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

Ziz*_*rro 42 node.js npm webpack angular angular6

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

ERROR in ./node_modules/aws-sign2/index.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\aws-sign2'
ERROR in ./node_modules/aws4/aws4.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\aws4'
ERROR in ./node_modules/ecc-jsbn/index.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\ecc-jsbn'
ERROR in ./node_modules/http-signature/lib/signer.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\http-signature\lib'
ERROR in ./node_modules/http-signature/lib/verify.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\http-signature\lib'
ERROR in ./node_modules/oauth-sign/index.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\oauth-sign'
ERROR in ./node_modules/request/lib/oauth.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\request\lib'
ERROR in ./node_modules/request/lib/helpers.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\request\lib'
ERROR in ./node_modules/request/lib/hawk.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\request\lib'
ERROR in ./node_modules/sshpk/lib/signature.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/private-key.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/certificate.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/fingerprint.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/key.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/dhe.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/identity.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/utils.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/formats/pem.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\sshpk\lib\formats'
ERROR in ./node_modules/sshpk/lib/formats/ssh-private.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\sshpk\lib\formats'
ERROR in ./node_modules/sshpk/lib/formats/openssh-cert.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Users\sorou\projects\tunrWeb\node_modules\sshpk\lib\formats'
ERROR in ./node_modules/request/lib/har.js
Module not found: Error: Can't resolve 'fs' in 'C:\Users\sorou\projects\tunrWeb\node_modules\request\lib'
ERROR in ./node_modules/forever-agent/index.js
Module not found: Error: Can't resolve 'http' in 'C:\Users\sorou\projects\tunrWeb\node_modules\forever-agent'
ERROR in ./node_modules/http-signature/lib/signer.js
Module not found: Error: Can't resolve 'http' in 'C:\Users\sorou\projects\tunrWeb\node_modules\http-signature\lib'
ERROR in ./node_modules/request/request.js
Module not found: Error: Can't resolve 'http' in 'C:\Users\sorou\projects\tunrWeb\node_modules\request'
ERROR in ./node_modules/tunnel-agent/index.js
Module not found: Error: Can't resolve 'http' in 'C:\Users\sorou\projects\tunrWeb\node_modules\tunnel-agent'
ERROR in ./node_modules/forever-agent/index.js
Module not found: Error: Can't resolve 'https' in 'C:\Users\sorou\projects\tunrWeb\node_modules\forever-agent'
ERROR in ./node_modules/request/request.js
Module not found: Error: Can't resolve 'https' in 'C:\Users\sorou\projects\tunrWeb\node_modules\request'
ERROR in ./node_modules/tunnel-agent/index.js
Module not found: Error: Can't resolve 'https' in 'C:\Users\sorou\projects\tunrWeb\node_modules\tunnel-agent'
ERROR in ./node_modules/forever-agent/index.js
Module not found: Error: Can't resolve 'net' in 'C:\Users\sorou\projects\tunrWeb\node_modules\forever-agent'
ERROR in ./node_modules/tough-cookie/lib/cookie.js
Module not found: Error: Can't resolve 'net' in 'C:\Users\sorou\projects\tunrWeb\node_modules\tough-cookie\lib'
ERROR in ./node_modules/tunnel-agent/index.js
Module not found: Error: Can't resolve 'net' in 'C:\Users\sorou\projects\tunrWeb\node_modules\tunnel-agent'
ERROR in ./node_modules/mime-types/index.js
Module not found: Error: Can't resolve 'path' in 'C:\Users\sorou\projects\tunrWeb\node_modules\mime-types'
ERROR in ./node_modules/assert-plus/assert.js
Module not found: Error: Can't resolve 'stream' in 'C:\Users\sorou\projects\tunrWeb\node_modules\assert-plus'
ERROR in ./node_modules/combined-stream/lib/combined_stream.js
Module not found: Error: Can't resolve 'stream' in 'C:\Users\sorou\projects\tunrWeb\node_modules\combined-stream\lib'
ERROR in ./node_modules/delayed-stream/lib/delayed_stream.js
Module not found: Error: Can't resolve 'stream' in 'C:\Users\sorou\projects\tunrWeb\node_modules\delayed-stream\lib'
ERROR in ./node_modules/isstream/isstream.js
Module not found: Error: Can't resolve 'stream' in 'C:\Users\sorou\projects\tunrWeb\node_modules\isstream'
ERROR in ./node_modules/request/request.js
Module not found: Error: Can't resolve 'stream' in 'C:\Users\sorou\projects\tunrWeb\node_modules\request'
ERROR in ./node_modules/sshpk/lib/ed-compat.js
Module not found: Error: Can't resolve 'stream' in 'C:\Users\sorou\projects\tunrWeb\node_modules\sshpk\lib'
ERROR in ./node_modules/forever-agent/index.js
Module not found: Error: Can't resolve 'tls' in 'C:\Users\sorou\projects\tunrWeb\node_modules\forever-agent'
ERROR in ./node_modules/tunnel-agent/index.js
Module not found: Error: Can't resolve 'tls' in 'C:\Users\sorou\projects\tunrWeb\node_modules\tunnel-agent'
ERROR in ./node_modules/request/request.js
Module not found: Error: Can't resolve 'zlib' in 'C:\Users\sorou\projects\tunrWeb\node_modules\request'
Run Code Online (Sandbox Code Playgroud)

这是我的package.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"
  }
}
Run Code Online (Sandbox Code Playgroud)

有人知道出了什么问题吗?我的node_modules文件中没有上面提到的模块(我可以安装其中一些,但是'crypto',例如,现在内置).我怎样才能获得这些文件夹?这让我疯了.

sno*_*uis 34

这是由导入浏览器中不可用的节点模块的依赖项引起的.将package.json添加到提供错误的模块中:

"browser": {
    "http": false,
    "https":false,
    "net": false,
    "path": false,
    "stream": false,
    "tls": false
}
Run Code Online (Sandbox Code Playgroud)

  • 它正在从我这里工作,但我只想知道为什么我们需要添加为false。 (4认同)
  • @Codebrekers您需要添加“false”,因为这些库不应该在浏览器中可用。如果您确实需要它们,您将需要使用诸如“browserify-zlib”之类的依赖项。 (2认同)
  • 发生这种情况的原因是,当您运行 ngserve 时,它​​会捆绑“package.json”中的依赖项以在浏览器上提供服务。但是,“package.json”通常包含服务器和浏览器依赖项,并且任何本机模块依赖项(例如 crypto)无法捆绑在浏览器上提供服务。在 `package.json` 的浏览器部分设置 `'crypto': false` 告诉 ngserve 不要尝试捆绑该文件。[参考](/sf/answers/3791371321/) (2认同)

Azk*_*ana 11

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

要解决你的加密问题,流库,转到,

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

文件并执行以下更改,

`node: {crypto: true, stream: true}`
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个可重现的修复程序.如果将模块安装在新位置,则会丢失此更改. (16认同)
  • 同样,很可能您没有将node-modules文件夹检入VC,其他任何需要这样做的协作者都不会将其检入VC,更不用说任何CI了。 (2认同)

pip*_*omb 7

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

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

对我来说解决这个问题的方法是认识到我的 Angular 服务需要严格与我自己的后端通信,而不是与外部网站通信,这意味着我需要自己单独编写一个 API。就我而言,我将使用 MEAN 堆栈,因此这意味着创建一个 Express.js API,它将在后端为我与外部 API 进行通信。这具有额外的优势,例如能够将会话数据和来自外部 API 的其他数据缓存在 Mongo 数据库中,而不是每次都需要新的客户端 API 会话,这将很快超过该站点允许的每日会话数 7500一天,假设我有很多用户。

TL;DR 修复是删除任何不用于前端工作的 NPM 包的导入,这些包需要诸如httpscrypto和 之类的包fs。这fs是一个特别的危险信号。我认为这意味着“文件系统”,您的前端当然不应该直接访问它。


小智 5

您可以通过用户补丁文件解决此问题。

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);
  });
});
Run Code Online (Sandbox Code Playgroud)

packege.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"
Run Code Online (Sandbox Code Playgroud)

}

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

  • 很难看,但是可以完成工作。谢谢 (2认同)

Bri*_*ton 5

如果上述方法都没有帮助,我就花了 4 个小时来诊断为什么昨天编译的 Angular 应用程序现在由于“找不到模块”错误而无法编译。

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

从 '../../../../../../../../my-node-server-app/class-name' 导入 { ClassName } ;

然后它尝试编译所有与 ES2015 浏览器应用程序不兼容的特定于 Node 的模块。如果您遇到同样的问题并且上述方法都没有帮助,请检查您的导入!希望我能拯救某人的理智。

  • 这解决了我的问题。不知何故,导入“渲染器”会产生“找不到模块”错误。一旦我从 *.ts 文件中删除,编译成功。花了大约一个小时试图解决这个问题。 (3认同)

小智 0

当前版本的 Angular-cli 没有安装旧版本中安装的一些软件包,例如 zlib。您可能需要手动安装一些软件包才能解决这些错误。