使用buffer.js时出现aurelia-cli错误-全局未定义

时间:2019-01-31 11:20:57

标签: aurelia aurelia-cli

使用奥里利亚-CLI创建一个新的项目。 - SystemJS捆绑选项

从npm安装了htmlparser2模块,该模块具有buffer.js作为依赖项。

尝试导入htmlparser2时出现以下错误:

bluebird.core.js:3434 Error: global is not defined
  Evaluating http://localhost:9000/buffer/index

在检查供应商的束 - >这是创建错误的行:

Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
  ? global.TYPED_ARRAY_SUPPORT
  : typedArraySupport()

发现了similar issue与angualar-CLI其中溶液是手动打开节点全球

Node global is turned off. It works fine if I manually turn it on again.

现在的问题是如何使用奥里利亚-CLI做到这一点?有什么建议吗?


供应商捆绑包中的较大代码段

define('buffer/index',['require','exports','module','base64-js','ieee754','isarray'],function (require, exports, module) {/*!
 * The buffer module from node.js, for the browser.
 *
 * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
 * @license  MIT
 */
/* eslint-disable no-proto */

'use strict'

var base64 = require('base64-js')
var ieee754 = require('ieee754')
var isArray = require('isarray')

exports.Buffer = Buffer
exports.SlowBuffer = SlowBuffer
exports.INSPECT_MAX_BYTES = 50

/**
 * If `Buffer.TYPED_ARRAY_SUPPORT`:
 *   === true    Use Uint8Array implementation (fastest)
 *   === false   Use Object implementation (most compatible, even IE6)
 *
 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
 * Opera 11.6+, iOS 4.2+.
 *
 * Due to various browser bugs, sometimes the Object implementation will be used even
 * when the browser supports typed arrays.
 *
 * Note:
 *
 *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
 *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
 *
 *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
 *
 *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
 *     incorrect length in some situations.

 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
 * get the Object implementation, which is slower but behaves correctly.
 */
Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
  ? global.TYPED_ARRAY_SUPPORT
  : typedArraySupport()

1 个答案:

答案 0 :(得分:2)

我相信您使用的是cli内置捆绑程序(我写过),而不是webpack。

是的,当前不支持nodejs全局变量global。同样,nodejs全局变量processBuffer也有类似的问题。

cli doc的补丁程序可以支持processBuffer

import process from 'process';
window.process = process;
import {Buffer} from 'buffer';
window.Buffer = Buffer;

您可以尝试为global添加一个补丁。

window.global = window;

好,为什么cli出现问题

cli的跟踪算法使用rjs(requirejs优化器)解析器,它有点旧,不能检测全局变量(从技术上讲,它不进行变量范围分析)。

我有另一个名为dumber的WIP捆绑器,该捆绑器通过检测全局变量的新解析器解决了该限制。它会根据需要在模块级别自动修补nodejs全局变量。

从长远来看,我们将删除cli内置捆绑程序的代码,然后包装dumber并使其向后兼容。