Angular 6 许多无法解决错误(crypto, fs, http, https, net, path, stream, tls, zlib)



我正在构建一个Angular 6应用程序,但每次我想为localhost服务时,我都会收到以下错误:

ERROR in ./node_modules/aws-sign2/index.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulesaws-sign2'
ERROR in ./node_modules/aws4/aws4.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulesaws4'
ERROR in ./node_modules/ecc-jsbn/index.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulesecc-jsbn'
ERROR in ./node_modules/http-signature/lib/signer.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_moduleshttp-signaturelib'
ERROR in ./node_modules/http-signature/lib/verify.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_moduleshttp-signaturelib'
ERROR in ./node_modules/oauth-sign/index.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulesoauth-sign'
ERROR in ./node_modules/request/lib/oauth.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulesrequestlib'
ERROR in ./node_modules/request/lib/helpers.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulesrequestlib'
ERROR in ./node_modules/request/lib/hawk.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulesrequestlib'
ERROR in ./node_modules/sshpk/lib/signature.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulessshpklib'
ERROR in ./node_modules/sshpk/lib/private-key.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulessshpklib'
ERROR in ./node_modules/sshpk/lib/certificate.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulessshpklib'
ERROR in ./node_modules/sshpk/lib/fingerprint.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulessshpklib'
ERROR in ./node_modules/sshpk/lib/key.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulessshpklib'
ERROR in ./node_modules/sshpk/lib/dhe.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulessshpklib'
ERROR in ./node_modules/sshpk/lib/identity.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulessshpklib'
ERROR in ./node_modules/sshpk/lib/utils.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulessshpklib'
ERROR in ./node_modules/sshpk/lib/formats/pem.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulessshpklibformats'
ERROR in ./node_modules/sshpk/lib/formats/ssh-private.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulessshpklibformats'
ERROR in ./node_modules/sshpk/lib/formats/openssh-cert.js
Module not found: Error: Can't resolve 'crypto' in 'C:UserssorouprojectstunrWebnode_modulessshpklibformats'
ERROR in ./node_modules/request/lib/har.js
Module not found: Error: Can't resolve 'fs' in 'C:UserssorouprojectstunrWebnode_modulesrequestlib'
ERROR in ./node_modules/forever-agent/index.js
Module not found: Error: Can't resolve 'http' in 'C:UserssorouprojectstunrWebnode_modulesforever-agent'
ERROR in ./node_modules/http-signature/lib/signer.js
Module not found: Error: Can't resolve 'http' in 'C:UserssorouprojectstunrWebnode_moduleshttp-signaturelib'
ERROR in ./node_modules/request/request.js
Module not found: Error: Can't resolve 'http' in 'C:UserssorouprojectstunrWebnode_modulesrequest'
ERROR in ./node_modules/tunnel-agent/index.js
Module not found: Error: Can't resolve 'http' in 'C:UserssorouprojectstunrWebnode_modulestunnel-agent'
ERROR in ./node_modules/forever-agent/index.js
Module not found: Error: Can't resolve 'https' in 'C:UserssorouprojectstunrWebnode_modulesforever-agent'
ERROR in ./node_modules/request/request.js
Module not found: Error: Can't resolve 'https' in 'C:UserssorouprojectstunrWebnode_modulesrequest'
ERROR in ./node_modules/tunnel-agent/index.js
Module not found: Error: Can't resolve 'https' in 'C:UserssorouprojectstunrWebnode_modulestunnel-agent'
ERROR in ./node_modules/forever-agent/index.js
Module not found: Error: Can't resolve 'net' in 'C:UserssorouprojectstunrWebnode_modulesforever-agent'
ERROR in ./node_modules/tough-cookie/lib/cookie.js
Module not found: Error: Can't resolve 'net' in 'C:UserssorouprojectstunrWebnode_modulestough-cookielib'
ERROR in ./node_modules/tunnel-agent/index.js
Module not found: Error: Can't resolve 'net' in 'C:UserssorouprojectstunrWebnode_modulestunnel-agent'
ERROR in ./node_modules/mime-types/index.js
Module not found: Error: Can't resolve 'path' in 'C:UserssorouprojectstunrWebnode_modulesmime-types'
ERROR in ./node_modules/assert-plus/assert.js
Module not found: Error: Can't resolve 'stream' in 'C:UserssorouprojectstunrWebnode_modulesassert-plus'
ERROR in ./node_modules/combined-stream/lib/combined_stream.js
Module not found: Error: Can't resolve 'stream' in 'C:UserssorouprojectstunrWebnode_modulescombined-streamlib'
ERROR in ./node_modules/delayed-stream/lib/delayed_stream.js
Module not found: Error: Can't resolve 'stream' in 'C:UserssorouprojectstunrWebnode_modulesdelayed-streamlib'
ERROR in ./node_modules/isstream/isstream.js
Module not found: Error: Can't resolve 'stream' in 'C:UserssorouprojectstunrWebnode_modulesisstream'
ERROR in ./node_modules/request/request.js
Module not found: Error: Can't resolve 'stream' in 'C:UserssorouprojectstunrWebnode_modulesrequest'
ERROR in ./node_modules/sshpk/lib/ed-compat.js
Module not found: Error: Can't resolve 'stream' in 'C:UserssorouprojectstunrWebnode_modulessshpklib'
ERROR in ./node_modules/forever-agent/index.js
Module not found: Error: Can't resolve 'tls' in 'C:UserssorouprojectstunrWebnode_modulesforever-agent'
ERROR in ./node_modules/tunnel-agent/index.js
Module not found: Error: Can't resolve 'tls' in 'C:UserssorouprojectstunrWebnode_modulestunnel-agent'
ERROR in ./node_modules/request/request.js
Module not found: Error: Can't resolve 'zlib' in 'C:UserssorouprojectstunrWebnode_modulesrequest'

这是我的包.json:

{
"name": "tunr-web",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/animations": "^6.0.7",
"@angular/cdk": "github:angular/cdk-builds",
"@angular/common": "^6.0.3",
"@angular/compiler": "^6.0.3",
"@angular/core": "^6.0.3",
"@angular/forms": "^6.0.3",
"@angular/http": "^6.0.3",
"@angular/material": "github:angular/material2-builds",
"@angular/platform-browser": "^6.0.3",
"@angular/platform-browser-dynamic": "^6.0.3",
"@angular/router": "^6.0.3",
"angular-svg-round-progressbar": "^2.0.0",
"angularfire2": "^5.0.0-rc.11",
"core-js": "^2.5.4",
"firebase": "^5.1.0",
"hammerjs": "^2.0.8",
"jquery": "^3.3.1",
"ng-scrollreveal": "^2.2.0",
"ng2-scroll-to-el": "^1.2.1",
"ngx-facebook": "^2.4.0",
"ngx-infinite-scroll": "^6.0.1",
"ngx-sharebuttons": "^4.1.4",
"rxjs": "^6.2.1",
"rxjs-compat": "^6.2.1",
"time-ago-pipe": "^1.3.2",
"youtube-search": "^1.1.1",
"zone.js": "^0.8.26"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.6.8",
"@angular/cli": "~6.0.8",
"@angular/compiler-cli": "^6.0.3",
"@angular/language-service": "^6.0.3",
"@types/jasmine": "~2.8.6",
"@types/jasminewd2": "~2.0.3",
"@types/node": "~8.9.4",
"@types/scrollreveal": "0.0.3",
"codelyzer": "~4.2.1",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~1.7.1",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.0",
"karma-jasmine": "~1.1.1",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.3.0",
"ts-node": "~5.0.1",
"tslint": "~5.9.1",
"typescript": "~2.7.2"
}
}

有人知道出了什么问题吗?上面提到的模块都不存在于我的node_modules文件中(我可以安装其中的一些模块,但现在内置了"crypto")。如何获取这些文件夹?它把我逼疯了。

这是由依赖项导入浏览器中不可用的节点模块引起的。将出现错误的模块添加到您的软件包.json中:

"browser": {
"http": false,
"https":false,
"net": false,
"path": false,
"stream": false,
"tls": false
}

您使用的是最新版本的Angular CLI。某些npm程序包不再受支持。它现在是一个内置的Node模块。如果你一直依赖加密货币,你应该切换到内置的加密货币。

要解决您的加密问题,请使用流式库,转到,

node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs/browser.js

文件并进行以下更改,

`node: {crypto: true, stream: true}`

您可以使用补丁文件来解决此问题。

patch.js

const fs = require('fs');
const f = 'node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs/browser.js';
fs.readFile(f, 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
var result = data.replace(/node: false/g, 'node: {crypto: true, stream: true}');
fs.writeFile(f, result, 'utf8', function (err) {
if (err) return console.log(err);
});
});

软件包.json

"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "node patch.js && ng build",
"build-prod": "node patch.js && ng build --configuration=production",
"build-staging": "node patch.js && ng build --configuration=staging"
}

确保仅在第一次ng serve之前"构建"代码。

我刚刚作为Angular的新手遇到了这个问题,所有这些其他答案实际上都为您提供了一些不应该解决的问题的解决方案(在大多数情况下)。事实上,你需要退一步考虑你正在做一些框架不希望你做的事情

在我的情况下,发生的事情是,我添加了对访问外部API服务的库的依赖,并尝试将其导入到Angular"服务"中。我还是Angular的新手,来自C#WCF背景,所以在我看来,服务是一个服务器端进程。然而,Angular中没有任何东西是服务器端的!它是一个严格的客户端框架,在浏览器中运行。

解决这个问题的方法是意识到我的Angular服务需要严格与我自己的后端通信,而不是与外部网站通信,这意味着我需要单独编写一个API。在我的情况下,我将使用一个MEAN堆栈,因此这意味着创建一个Express.js API,它将在后台为我与外部API通信。这增加了一些优势,比如可以在Mongo数据库中缓存来自外部API的会话数据和其他数据,而不是每次都需要一个新的客户端API会话,这将很快超过该网站每天允许的7500个会话,假设我有很多用户。

TL;DR修复方法是删除任何不用于前端工作的NPM程序包的导入,这些程序包需要httpscryptofs等程序包。fs是一个特殊的红旗。我认为这意味着"文件系统",您的前端当然不应该直接访问它。

如果以上都没有帮助,我只花了4个小时诊断为什么昨天编译的Angular应用程序现在由于";模块未找到";错误。

问题是,昨天当我在我的一个组件中导入一个类时,WebStorm在我的后端节点应用程序中指向了一个同名的类,如下所示:

从'../../../../../../../../..导入{ClassName}/我的节点服务器应用程序/类名';

然后,它试图编译所有与ES2015浏览器应用程序不兼容的Node特定模块。如果您有同样的问题,并且以上任何一项都没有帮助,请检查您的导入!希望我救了一个人的理智。

使用ngx构建+包-https://github.com/manfredsteyer/ngx-build-plus-并提供附加配置。这样,您就不必在每次安装时手动更新节点模块文件。

我调用重定向视图如下:this.router.navigate(['/dashboard'])我在构造函数中创建了一个类型为Router的变量路由器,并从'express'而不是'@angular/router'导入,我也遇到了同样的问题。我删除了错误的进口,它消失了

通过编辑文件tsconfig.json(tsconfig.base.json)为我工作,使用:

...
"baseUrl": ".",
"paths": {
...
"crypto": [
"node_modules/crypto-js"
],
"http": [
"node_modules/stream-http"
],
"https": [
"node_modules/https-browserify"
]
}

享受吧。

您必须找到作为依赖项添加的节点包,这是导致此问题的原因。打开package-lock.json,搜索crypto可以找到package.json的dependencies部分中包含的导致包名称的依赖关系链。在我的情况下,这些库大多是随npm包"request"引入的。

Angular cli的当前版本没有像旧版本那样安装一些类似zlib的软件包。您可能必须手动安装一些程序包才能解决这些错误。

如本评论所述https://stackoverflow.com/a/52367183/16245434,仅在package.json:中的devDependencies之后添加

"browser": {
"crypto": false
}

相关内容

最新更新