运行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中的ERROR找不到模块:错误: 无法解析“密码” '/用户/ MYPC /文档/ Myproj / ProName / node_modules / aws-sign2'错误 ./node_modules/aws4/aws4.js找不到模块:错误:无法解析 '/用户/ MYPC /文档/ Myproj / ProName / node_modules / aws4'中的'crypto' ./node_modules/ecc-jsbn/index.js中的错误找不到模块:错误: 无法解析“密码” '/用户/ MYPC /文档/ Myproj / ProName / node_modules / ecc-jsbn'错误 ./node_modules/http-signature/lib/verify.js找不到模块:错误: 无法解析“密码” '/用户/ MYPC /文档/ Myproj / ProName / node_modules / http签名/ lib' 找不到./node_modules/http-signature/lib/signer.js模块中的错误: 错误:无法解析“密码” '/用户/ MYPC /文档/ Myproj / ProName / node_modules / http签名/ lib' ./node_modules/nem-sdk/build/external/nacl-fast.js中的模块错误 找到:错误:无法解析“ crypto” '/用户/ MYPC /文档/ Myproj / ProName / node_modules / nem-sdk / build / external' ./node_modules/nem-sdk/node_modules/aws-sign2/index.js中的错误
答案 0 :(得分:15)
将此项目添加到该项目下的 tsconfig.ts 文件中可解决此警告
"compilerOptions": {
"baseUrl": "./",
"paths": {
"crypto": [
"../../node_modules/crypto-js"
]
}
答案 1 :(得分:13)
在 Angular 11 和 crypto-js 4 遇到同样的问题(并在 tsconfig.json 中手动设置路径)后,我发现将 crypto-js 回滚到版本 3.1.9-1 解决了这个问题。似乎是在第 4 版中所做的更改导致了该问题。
npm install crypto-js@3.1.9-1
在回购问题中解释:
答案 2 :(得分:5)
我最近在尝试使用的一个小型项目中尝试使用另一个库(tiff.js)时遇到了类似的问题。
我要解决的方法是在devDependencies
部分之后,将以下内容添加到我的 package.json 文件中。
"devDependencies": {
...
},
"browser": {
"crypto": false
}
在尝试在应用程序中使用库时,这似乎没有任何不利影响。
答案 3 :(得分:4)
我想我会进一步介绍Tarique Ahmed在他的回答中写的内容。
我正在使用一个npm模块,其代码中包含以下行:
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"
]
}
答案 4 :(得分:4)
如果您升级到 Webpack 5,则需要将其添加到您的 webpack 配置文件:
resolve: {
fallback: { crypto: false },
},
答案 5 :(得分:2)
我喜欢R. Richards的答案,但我认为提供更多信息会很有用。
这是Angular的一个已知问题,并且Angular CLI开发团队似乎认为这是功能而不是错误。我和this issue thread中的其他开发人员不同意。该线程的提供者提供了几种解决方法,但在实施R. Richards的解决方案之前,我的项目无法成功编译。不过,我没有还原以前的更改,因此tacnoman和GrandSchtroumpf的修复可能对其他人有用。
有些人(例如此处的clovis1122以及该问题线程中的其他人)质疑为什么Web应用程序需要访问这些库,以及为什么不能在服务器端完成必要的任务。我不能代表所有人,但是我的用例是,在对用户帐户进行身份验证时,Strapi会使用必须由客户端解码的JSON Web令牌字符串进行响应。由于the necessary library依赖于crypto
和stream
,除非这些依赖项可用,否则您将无法提取JWT到期时间。
万一有人无法从R. Richards的答案中推断出问题,则必须将出现在“无法解析x”错误中的所有依赖项设置为false。例如,我package.json的关键部分是:
"browser": {
"crypto": false,
"stream": false
}
答案 6 :(得分:1)
aws-sign2
是NodeJS程序包(而crypto
是NodeJS模块),但看起来您正在处理Web应用程序。在该环境中无法使用crypto
模块。
能否完成服务器端所需的操作?否则,您可能需要寻找其他包装。
答案 7 :(得分:0)
经过深入研究,我发现解决方案非常简单:替换 从'crypto-js'导入*作为CryptoJS;与声明var CryptoJS;
答案 8 :(得分:0)
使用直接导入可能不适用于 ES6 环境..
这可能对您有所帮助。
$ npm i crypto-js@latest
// 用于使用最新版本 4
import AES from 'crypto-js/aes';
import Utf8 from 'crypto-js/enc-utf8';
import { secretKey } from './environments/environment';
/** Encryption */
const data = {key: 'Test Value'};
const ciphertext = AES.encrypt(JSON.stringify(data), secretKey).toString();
console.log('Encrypted Data', ciphertext);
/** Decryption */
const bytes = AES.decrypt(ciphertext, secretKey);
const decryptedData = JSON.parse(bytes.toString(Utf8));
console.log('Decrypted Data', decryptedData);
https://github.com/brix/crypto-js/issues/168#issuecomment-785617218
答案 9 :(得分:0)
在数组中添加带有文字“crypto-js”的 allowedCommonJsDependencies 选项,这在文件 angular.json 中:
"architect":
"build": {
"options": {
"allowedCommonJsDependencies": [
"crypto-js"
]
},
}
}
这将禁用在 Angular 11 中测试的所有警告。
答案 10 :(得分:0)
对于 Laravel Inertia JS 项目,我的解决方案是:
1- 向 package.json 添加依赖
"dependencies": {
"crypto-browserify": "3.12.0",
"crypto-random-string": "^3.3.0",
"stream": "^0.0.2"
}
2-在 webpack.config.js 中:
const path = require('path');
module.exports = {
resolve: {
alias: {
'@': path.resolve('resources/js'),
},
fallback: {
crypto: require.resolve('crypto-browserify'),
stream: require.resolve('stream'),
},
},
};
3-安装、构建和运行:
npm install && npm run watch