Angular 6 Uncaught ReferenceError: буфер не определен
Я пытаюсь перейти с 5 на 6, используя ng update
, и я получаю сообщение об ошибке
Uncaught ReferenceError: Buffer is not defined
at Object../node_modules/amazon-cognito-identity-js/node_modules/crypto-browserify/helpers.js (helpers.js:2)
at __webpack_require__ (bootstrap:81)
at Object../node_modules/amazon-cognito-identity-js/node_modules/crypto-browserify/md5.js (md5.js:10)
at __webpack_require__ (bootstrap:81)
at Object../node_modules/amazon-cognito-identity-js/node_modules/crypto-browserify/create-hash.js (create-hash.js:3)
at __webpack_require__ (bootstrap:81)
at Object../node_modules/amazon-cognito-identity-js/node_modules/crypto-browserify/index.js (index.js:12)
at __webpack_require__ (bootstrap:81)
at Object../node_modules/amazon-cognito-identity-js/es/AuthenticationHelper.js (vendor.js:47207)
at __webpack_require__ (bootstrap:81)
Локальная среда хорошо работает для создания нового проекта angular. Я не использую Buffer. Это что-то за кулисами
Любые идеи?
UPD
Я пытался обновить @types/ node npm install --save-dev @types/node
+ @types/[email protected]
updated 1 package in 12.031s
[!] 26 vulnerabilities found [36141 packages audited]
Severity: 11 Low | 13 Moderate | 2 High
Run `npm audit` for more detail
если я запустил npm audit
npm ERR! code ENOAUDIT
npm ERR! audit Your configured registry (https://registry.npmjs.org/) does not support audit requests.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/myname/.npm/_logs/2018-05-16T13_45_17_410Z-debug.log
Ответы
Ответ 1
Хорошо, через час мне наконец удалось запустить cognito в моем приложении Angular (сразу после обновления до 6.0).
О сообщении global is not defined
(или что-то близкое не помню). Добавьте в index.html следующее:
<!doctype html>
<html lang="en">
<head>
...
<script>
var global = global || window;
</script>
</head>
Затем вы, вероятно, получите сообщение о том, что Buffer не определен.
Установите пакет buffer
, используя npm или пряжу. И добавьте следующее в polyfills.ts():
global.Buffer = global.Buffer || require('buffer').Buffer;
Ответы на столбец/проблемы github, которые помогли мне, если это не исправлено после этого:
Обновление до angular -6.x дает "Uncaught ReferenceError: global не определен"
https://github.com/aws/aws-amplify/issues/840#issuecomment-389459988
https://github.com/aws/aws-amplify/issues/678
https://github.com/aws/aws-amplify/issues/153
https://github.com/crypto-browserify/createHash/issues/20
Ответ 2
@Maxime1992
Для меня, в начале, это также решило проблему, которую я обнаружил после перехода на angular 6, то есть хорошо установленный модуль, но не найденный, когда вы хотите перейти на одно из этих представлений.
Проблема пришла оттуда, а не от моего модуля импорта или другого.
Но когда я запускаю команду ng test
, теперь у меня появляется эта ошибка:
DeprecationWarning: Tapable.plugin устарела. Использовать новый API на .hooks
вместо
По-видимому, это проблема веб-пакета.
Поэтому я предпочитаю использовать это решение:
Добавление этой строки в polyfills.ts должно разрешить глобальную ошибку узла
(window as any).global = window;
Еще раз спасибо !!!
Ответ 3
В приложении Angular 7 обходной путь (https://github.com/angular/angular-cli/issues/9827#issuecomment-386154063) работает только для меня, если я поставлю
(window as any).global = window;
в файле .ts и импортируйте его в polyfill.ts, например
import 'cstm-polyfill.ts';
Ответ 4
Это результат изменения поведения Angular CLI. Я решил эту проблему с помощью следующего патча:
https://gist.github.com/niespodd/1fa82da6f8c901d1c33d2fcbb762947d
Смотрите здесь для большего контекста:
https://github.com/angular/angular-cli/issues/1548
Ответ 5
Если вы получили эту ошибку, а затем решили, используя предложенный выше метод, но затем столкнулись с другой ошибкой, указав что-то вроде:
Uncaught ReferenceError: процесс не определен
Скорее всего, вы неправильно используете HttpClient в своем приложении. Убедитесь, что вы используете импорт HttpClientModule в app.module, а не случайно используете HttpClient в качестве поставщика.
да:
imports: [
HttpClientModule,
],
нет:
providers: [HttpClient],
Ответ 6
Сценарий пытается запросить версию браузера для буфера, но не может ее найти. Запуск простого
npm install buffer
добавит пакет в ваш package.json
и пока устранит ошибку.