找不到module:错误:无法解析“加密”

IT技术 javascript node.js angular npm nem
2021-03-14 08:22:20

我在运行时收到以下错误列表ng serve

我的包JSON如下:

{   "name": "ProName",   "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-devkit/build-angular": "~0.12.0",
    "@angular/animations": "5.2.10",
    "@angular/common": "5.2.10",
    "@angular/compiler": "5.2.10",
    "@angular/compiler-cli": "5.2.10",
    "@angular/core": "5.2.10",
    "@angular/forms": "5.2.10",
    "@angular/platform-browser": "5.2.10",
    "@angular/platform-browser-dynamic": "5.2.10",
    "@angular/router": "5.2.10",
    "@types/dotenv": "^4.0.3",
    "@types/errorhandler": "0.0.32",
    "@types/express": "^4.16.0",
    "@types/node": "^10.5.1",
    "apostille-library": "^7.1.0",
    "core-js": "^2.5.4",
    "dotenv": "^6.0.0",
    "errorhandler": "^1.5.0",
    "express": "^4.16.0",
    "nem2-sdk": "^0.9.7",
    "rxjs": "~6.3.3",
    "stream": "0.0.2",
    "tslib": "^1.9.0",
    "typescript": "^2.9.2",
    "zone.js": "~0.8.26"   } }

我得到的错误:

./node_modules/aws-sign2/index.js 中的错误未找到module:错误:无法解析 '/Users/MYPC/Documents/Myproj/ProName/node_modules/aws-sign2' 中的 'crypto' ./node_modules 中的错误/aws4/aws4.js module未找到:错误:无法解析 '/Users/MYPC/Documents/Myproj/ProName/node_modules/aws4' 中的 'crypto' ./node_modules/ecc-jsbn/index.js module中的错误未找到:错误:无法解析 '/Users/MYPC/Documents/Myproj/ProName/node_modules/ecc-jsbn' 中的 'crypto' ./node_modules/http-signature/lib/verify.js 中的错误未找到module:错误:无法解析 '/Users/MYPC/Documents/Myproj/ProName/node_modules/http-signature/lib' 中的 'crypto' 错误 ./node_modules/http-signature/lib/signer.js module未找到:错误: 无法解析 ' 中的 'crypto'/Users/MYPC/Documents/Myproj/ProName/node_modules/http-signature/lib' ./node_modules/nem-sdk/build/external/nacl-fast.js 中的错误找不到module:错误:无法解析“加密” '在'/Users/MYPC/Documents/Myproj/ProName/node_modules/nem-sdk/build/external' ./node_modules/nem-sdk/node_modules/aws-sign2/index.js 中的错误

6个回答

我最近在尝试在一个小项目中使用另一个库 ( tiff.js )时遇到了类似的问题

我解决这个问题的方法是将以下内容添加到我的package.json文件中,紧跟在该devDependencies部分之后。

"devDependencies": {
    ...
},
"browser": {
    "crypto": false
}

尝试在应用程序中使用该库时,这似乎没有任何不利影响。

就我而言,我使用 webpack 5。我收到一条警告,解释了它发生的原因以及该怎么做: BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default. This is no longer the case. Verify if you need this module and configure a polyfill for it. If you want to include a polyfill, you need to: - add a fallback 'resolve.fallback: { "crypto": require.resolve("crypto-browserify") }' - install 'crypto-browserify' If you don't want to include a polyfill, you can use an empty module like this: resolve.fallback: { "crypto": false }
2021-04-21 08:22:20
您可能必须停止并重新启动“ng serve”操作才能使其生效。谢谢,它奏效了。
2021-04-29 08:22:20
发生这种情况的原因是因为当您运行时ng serve,它会捆绑您的依赖项package.json以在浏览器上提供服务。但是,package.json通常包括服务器和浏览器依赖项,并且crypto不能捆绑任何原生module依赖项(如)以在浏览器上提供服务。设置'crypto': falsebrowserpackage.json告知ng serve不要试图捆绑该文件。
2021-05-05 08:22:20
那么 resolve.fallback 放在哪里呢?angular.json 在其中一层?
2021-05-11 08:22:20
很好的解决方案,除非您确实需要使用加密库。
2021-05-12 08:22:20

在该项目下的tsconfig.json文件中添加此设置可解决此警告

"compilerOptions": {
"baseUrl": "./",
"paths": {
  "crypto": [
    "node_modules/crypto-js"
  ]
}
这是唯一对我有用的解决方案。browser.crypto=false 没有做任何事情
2021-04-21 08:22:20
为我工作,不得不改变路径
2021-04-21 08:22:20
这对我有用。我们无法在我们的项目中使用 browser.crypto = false 修复,但这有效并且我们的高级开发人员可以接受。
2021-05-01 08:22:20
finame 应该是 tsconfig.json
2021-05-10 08:22:20
为我工作,但我不得不将“../../node_modules/crypto-js”更改为“node_modules/crypto-js”。Angular 10 和部分导入,如从“crypto-js/md5”导入 MD5;
2021-05-16 08:22:20

我喜欢R. Richards的回答,但我认为提供更多信息会很有用。

这是 Angular 的一个已知问题,Angular CLI 开发团队似乎认为这是一个功能而不是错误。我以及此问题线程中的其他开发人员不同意。该线程的贡献者提供了几个解决方法修复,但在我实施 R. Richards 的解决方案之前,我的项目没有成功编译。不过,我没有恢复以前的更改,因此tacnomanGrandSchtroumpf的修复可能对其他人有用。

有些人,比如这里的clovis1122和该问题线程中的其他人,质疑为什么 Web 应用程序需要访问这些库,以及为什么不能在服务器端完成必要的任务。我不能代表所有人,但我的用例是,在对用户帐户进行身份验证时,Strapi 使用必须由客户端解码的 JSON Web 令牌字符串进行响应。由于必要的库依赖于cryptostream,除非这些依赖项可用,否则您将无法提取 JWT 到期时间。

如果有人无法从 R. Richards 的回答中推断出问题,您必须将出现在“无法解决 x”错误中的任何依赖项设置为 false。例如,我的 package.json 的关键部分是:

    "browser": {
        "crypto": false,
        "stream": false
    }

我想我会扩展塔里克·艾哈迈德 (Tarique Ahmed) 在他的回答中所写的内容。

我使用的 npm module在代码中包含以下行:

const crypto = require('crypto');

我无法添加:

"browser": {
  "crypto": false
}

到 package.json 因为crypto包必须是构建的一部分。

事实证明,在编译过程中,Angular 似乎决定安装crypto-browserify包而不是crypto.

将以下内容添加到tsconfig.json文件中会指示构建在crypto-browserify每次crypto需要使用该如您所见,我对stream包裹有同样的问题

"paths": {
  "crypto": [
    "node_modules/crypto-browserify"
  ],
  "stream": [
    "node_modules/stream-browserify"
  ]
}
这是提供的最清晰、最精确的解决方案。刚刚安装和使用,crypto-browserify而不是如上所述crypto制作tsconifg.json
2021-05-12 08:22:20

在 Angular 11 和 crypto-js 4 遇到同样的问题(并在 tsconfig.json 中手动设置路径)后,我发现将 crypto-js 回滚到版本 3.1.9-1 解决了这个问题。似乎在第 4 版中所做的更改导致了该问题。

npm install crypto-js@3.1.9-1

在回购问题中解释如下:

GitHub 问题

我在使用 Angular 11 时遇到了同样的问题,并且使用了 crypto-js 版本 4.0。我确认这是该案例的解决方案。
2021-04-19 08:22:20
我有同样的问题,它对我有用。我使用 Angular 11,并且安装了 4.0 加密版本。
2021-05-13 08:22:20