Angular 6 Uncaught ReferenceError:未定义缓冲区

时间:2018-05-16 12:56:57

标签: angular

我正在尝试使用ng update从5迁移到6,我收到错误

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)

本地环境适用于创建新的角度项目。我没有使用Buffer。这是幕后的事情

有什么想法吗?

UPD

我试图更新@ types / node npm install --save-dev @types/node

+ @types/node@8.9.5
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

8 个答案:

答案 0 :(得分:31)

好的,一小时后我终于设法让Cognito在我的Angular应用程序上工作(升级到6.0之后)。

关于消息global is not defined(或关闭的内容无法记住)。将以下内容添加到 index.html

<!doctype html>
<html lang="en">
<head>
  ...

  <script>
    var global = global || window;
  </script>
</head>

然后,您可能会收到一条错误消息,指出Buffer未定义。

使用npm或yarn安装buffer包。并将以下内容添加到 polyfills.ts ():

global.Buffer = global.Buffer || require('buffer').Buffer;

Stackoverflow回答/ github问题帮助我,以防万一之后没有为你修复:

Upgrading to angular-6.x gives "Uncaught ReferenceError: global is not defined"

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

答案 1 :(得分:5)

<强> @ maxime1992
对我来说,在开始时,这也解决了我从迁移到angular 6 后检测到的问题,即一个声明良好的模块,但是当你想要进入其中一个视图时却找不到。
问题来自那里,而不是来自我的模块导入或其他。

但是当我启动ng test命令时,现在我有这个错误:

  

DeprecationWarning:不推荐使用Tapable.plugin。使用新的API   而是.hooks

显然,这是一个webpack问题 所以,我更喜欢使用这个解决方案:
将此行添加到polyfills.ts应解决节点全局错误

(window as any).global = window;

再次感谢!!!

答案 2 :(得分:1)

在angular 7应用中,变通方法(https://github.com/angular/angular-cli/issues/9827#issuecomment-386154063)仅对我有效,

(window as any).global = window;

在.ts文件中,然后将其导入polyfill.ts中,例如

import 'cstm-polyfill.ts'; 

答案 3 :(得分:1)

我添加了尝试从randomBytes运行crypto方法的相同问题,并在我的polyfill.ts文件中添加了globalBuffer引用。

不幸的是,我仍然收到以下错误消息:_stream_writable.js:57 Uncaught TypeError: Cannot read property 'slice' of undefined

_stream_writable.js文件中查找后,我看到未定义的指针在process.version.slice指令上。

总结起来,将以下几行添加到我的polyfill文件中完全解决了它:

(window as any).global = window;
global.Buffer = global.Buffer || require('buffer').Buffer;
(window as any).process = {
  version: ''
};

我希望它可以帮助某人...

答案 4 :(得分:0)

这是Angular CLI行为发生变化的结果。我最后通过使用以下补丁解决了这个问题:

https://gist.github.com/niespodd/1fa82da6f8c901d1c33d2fcbb762947d

有关更多背景信息,请参阅此处:

https://github.com/angular/angular-cli/issues/1548

答案 5 :(得分:0)

该脚本正在尝试要求浏览器的缓冲区版本,但找不到它。运行一个简单的

npm install buffer

会将软件包添加到您的package.json并暂时删除错误。

答案 6 :(得分:0)

如果遇到此错误,请使用上面建议的方法解决,但随后又遇到另一条错误,指出以下内容:

  

未捕获的ReferenceError:未定义过程

很可能是您在应用程序中错误地使用了HttpClient。确保您在app.module中使用HttpClientModule导入,而不是意外地将HttpClient用作提供程序。

是:

  imports: [
    HttpClientModule,
  ],

否:

providers: [HttpClient],

答案 7 :(得分:0)

除了可接受的答案和其他良好的回答,我还需要在我的/ src文件夹中添加types.d.ts并在其中输入以下内容:

declare var global: any;
declare var require: any;