我正在尝试使用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
答案 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
答案 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文件中添加了global
和Buffer
引用。
不幸的是,我仍然收到以下错误消息:_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
有关更多背景信息,请参阅此处:
答案 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;