ошибка aurelia-cli при использовании buffer.js - глобально не определено - PullRequest
0 голосов
/ 31 января 2019

Создан новый проект с использованием опции компоновщика aurelia-cli - SystemJS.

установлен модуль htmlparser2 из npm, в качестве которого используется buffer.js.

при попытке выполнить следующую ошибкуimport 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()

обнаружена аналогичная проблема с angualar-cli, где решением было вручную включить узел global

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

Вопрос в том, как это сделать с помощью aurelia-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 голосов
/ 01 февраля 2019

Я полагаю, вы используете встроенный в cli пакет (я его написал), а не webpack.

Да, глобальная переменная nodejs var global в настоящее время не поддерживается.Кроме того, у nodejs global vars 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 optimizer), он немного стар, не обнаруживает глобальные переменные (технически это не делает анализ переменной области).

У меня есть другой пакет WIP с именем тупее , который решил ограничение с помощью нового синтаксического анализатора, который обнаруживает глобальные переменные.Он автоматически исправляет глобальные переменные nodejs на уровне модуля в зависимости от необходимости.

В долгосрочной перспективе мы отбросим код для встроенного в cli упаковщика, затем свернем его и сделаем его обратно совместимым.

...