[英]error TS2307: Cannot find module 'crypto'
我正在用 Angular 6 编写一个网络。我需要在客户端散列一个字符串,所以我正在使用来自 'crypto' 的 createHash("sha256") 。
实际上,我只是写了 createHash 和 vscode 建议我导入,它看起来像这样:
import { createHash } from "crypto";
(这种导入方式似乎很好,它在一些打字稿教程中使用, 这里)然后:
var hashed = createHash("sha256").update(data).digest()
vscode 建议使用所有语法,包括文档字符串和所有内容。 但是在使用npm start
编译时,我得到:
ERROR in src/domain/User.ts(2,28): error TS2307: Cannot find module 'crypto'.
据我所知, crypto
现在内置于 node 中,导入它应该没有任何问题。
还要注意,如果我在终端中运行node
以打开 REPL,输入“crypto”会给我一个输出,表明一切正常。
以下是我认为关心的所有版本:
node --version: v10.15.1
ng --version:
Angular CLI: 6.2.9
Node: 10.15.1
OS: linux x64
Angular: 6.1.10
typescript 2.9.2
webpack 4.16.4
任何帮助将不胜感激。
对于 Typescript 2.* 和 Angular 2+ -
安装此包并将其添加到 devDependencies。
npm install @types/node --save-dev
在compilerOptions下的tsconfig.app.json中,添加这个 -
"types": [ "node" ],
您需要安装依赖项。 有同样的问题,尝试做同样的事情,它必须帮助如何在 Angular2 中使用“加密”模块?
我遇到过同样的问题。 我找到的第一个解决方案是将以下内容添加到packages.json
"browser": {
"crypto": false
}
由于我只想生成一个 sha256 摘要以使用索引,因此我删除了crypto-js
和@types/crypto=js
并将其替换为jshashed
。
yarn add jshashes
然后我修改了我的摘要服务以反映新库:
import { Injectable } from '@angular/core';
import * as JsHashes from 'jshashes';
@Injectable({
providedIn: 'root'
})
export class CryptoService {
getSha256HEX(value: string): string {
const hash = new JsHashes.SHA256;
return hash.hex(value);
}
}
只需将CryptoService
添加到您的模块文件apps.module.ts
import { CryptoService } from '@services/crypto.service';
注: @services
中定义的路径tsconfig.json
剩下的就是在构造函数中声明CryptoService
是需要的:
constructor( private _crypto: CryptoService; ) {}
并通过传递字符串来使用它,或者如果复合数据(例如和 HTTP 查询字符串来构建缓存键)将其字符串化。
myHash = this._crypto.getSha256HEX(JSON.stringify(_compoundDataStruccture));
注意: jshashes支持
摘要:
还:
如果您使用 typescript 为 NodeJs 制作服务器端应用程序,那么您只需要使用npm i @types/node -D
安装 @types/node,然后您应该能够使用import * as crypto from "crypto"
导入它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.