使用 buffer.js 时出现 aurelia-cli 错误 - 全局未定义
aurelia-cli error when using buffer.js - global undefined
使用 aurelia-cli - SystemJS 捆绑器选项创建了一个新项目。
从 npm 安装了 htmlparser2 模块,它具有 buffer.js 作为依赖项。
尝试导入 htmlparser2 时出现以下错误:
bluebird.core.js:3434 Error: global is not defined
Evaluating http://localhost:9000/buffer/index
检查 vendor-bundle -> 这是产生错误的行:
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.
问题是如何使用 aurelia-cli 执行此操作?有什么建议吗?
vendor-bundle 中更大的代码片段
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()
我相信你使用的是 cli 内置的捆绑器(我写的),而不是 webpack。
是的,目前不支持 nodejs 全局变量 global
。 nodejs 全局变量 process
和 Buffer
也有类似的问题。
cli doc 有补丁支持 process
和 Buffer
。
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 并使其向后兼容。
使用 aurelia-cli - SystemJS 捆绑器选项创建了一个新项目。
从 npm 安装了 htmlparser2 模块,它具有 buffer.js 作为依赖项。
尝试导入 htmlparser2 时出现以下错误:
bluebird.core.js:3434 Error: global is not defined
Evaluating http://localhost:9000/buffer/index
检查 vendor-bundle -> 这是产生错误的行:
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.
问题是如何使用 aurelia-cli 执行此操作?有什么建议吗?
vendor-bundle 中更大的代码片段
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()
我相信你使用的是 cli 内置的捆绑器(我写的),而不是 webpack。
是的,目前不支持 nodejs 全局变量 global
。 nodejs 全局变量 process
和 Buffer
也有类似的问题。
cli doc 有补丁支持 process
和 Buffer
。
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 并使其向后兼容。