错误TS2307:找不到模块“密码”

时间:2019-02-12 23:02:42

标签: node.js angular typescript

我正在使用Angular 6编写Web。我需要对客户端的字符串进行哈希处理,因此我正在使用createHash("sha256") from 'crypto'

实际上,我只是写了createHash,而vscode建议我进行导入,如下所示:

import { createHash } from "crypto";

(这种导入方式似乎很好,并且在某些打字稿教程here中使用了),然后:

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以打开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

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

您需要安装依赖项。曾经有同样的问题,尝试做同样的事情,它必须帮助How to use 'crypto' module in Angular2?

答案 1 :(得分:1)

我有同样的问题。我发现的第一个解决方案是将以下内容添加到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路径

剩下的就是在构造函数中声明f CryptoService

constructor( private _crypto: CryptoService; ) {}

并通过传递字符串来使用它,或者如果复合数据(例如和用于构建缓存键的HTTP查询字符串)对其进行字符串化。

 myHash = this._crypto.getSha256HEX(JSON.stringify(_compoundDataStruccture));

注意:jshashes支持

摘要:

  • MD5
  • SHA1
  • SHA256
  • SHA512
  • HMAC
  • RIPEND-160

也:

  • Base64编码/解码
  • CRC-32计算
  • UTF-8编码/解码

答案 2 :(得分:0)

对于打字稿2. *和Angular-

  1. 安装此软件包并将其添加到devDependencies。

    npm install @types/node --save-dev
    
  2. 在编译器选项下的tsconfig.app.json中,添加此-

    "types": [ "node" ],
    

答案 3 :(得分:-1)

如果您要使用Typescript为NodeJ创建服务器端应用程序,则只需使用npm i @types/node -D安装@ types / node,然后应该可以使用import * as crypto from "crypto"导入它