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'; 

Ответ 5

Если вы получили эту ошибку, а затем решили, используя предложенный выше метод, но затем столкнулись с другой ошибкой, указав что-то вроде:

Uncaught ReferenceError: процесс не определен

Скорее всего, вы неправильно используете HttpClient в своем приложении. Убедитесь, что вы используете импорт HttpClientModule в app.module, а не случайно используете HttpClient в качестве поставщика.

да:

  imports: [
    HttpClientModule,
  ],

нет:

providers: [HttpClient],

Ответ 6

Сценарий пытается запросить версию браузера для буфера, но не может ее найти. Запуск простого

npm install buffer

добавит пакет в ваш package.json и пока устранит ошибку.