【问题标题】:How to use 'crypto' module in Angular2?如何在 Angular2 中使用“加密”模块?
【发布时间】:2017-09-07 07:12:50
【问题描述】:

我安装模块:

npm install --save crypto

我将它导入到我的组件中:

import { createHmac } from "crypto";

但我得到错误:

错误在 -------------- (4,28): Canno 找不到模块'crypto'。

我做错了什么?

【问题讨论】:

    标签: node.js angular typescript


    【解决方案1】:

    要将crypto NodeJS 库与 Typescript(例如 Angular >= 2)一起使用,请按以下步骤操作:

    1. npm install @types/node --save-dev 安装 NodeJS 定义
    2. tsconfig.ts 文件中添加以下内容:

      "files": [ "./node_modules/@types/node/index.d.ts" ]

    3. 使用import * as crypto from 'crypto';导入要使用的库

    【讨论】:

    • 天才!这添加了来自 node.js 的内置加密库,它实际上具有 createHmac 函数。 npmjs.com/package/crypto
    • 我说得太早了。它似乎不适用于 Angular 7 .. 导入不起作用。找不到模块“加密”
    【解决方案2】:

    您需要安装第 3 方库的定义文件,例如 crypto。这样打字稿就可以找到它的“意义”。

    我认为定义文件是:

    npm install --save-dev @types/crypto-js 
    

    然后你可以像这样导入模块:

    import * as crypto from "crypto";
    

    如果您找不到该库的定义文件,您可以自己编写它,或者作为一种解决方法,您可以将模块声明为any,但 typescript 将无法自动完成这些方法。

    declare var crypto: any;
    

    并使用它的方法,例如:

    crypto.createHmac..
    

    【讨论】:

    • 但我认为crypto-jscrypto 是不同的模块。
    • @johnerfx 啊感谢您的反馈,您可以将模块声明为 any 或自行创建其定义文件。我会用一个例子来编辑我的答案。
    • 感谢您的回答,但我仍然无法使其工作:ERROR TypeError: crypto.createHmac is not a function
    • @johnerfx 如果您使用的是 systemjs,您是否将其包含在您的导入中?还是你的 index.html?或者,如果您使用的是 angular-cli,您是否将其包含在脚本中?我现在得走了,但我会在早上再检查一次。
    【解决方案3】:

    我正在使用最新版本的 Angular 进行开发,“crypto-js”似乎工作正常。

    安装包和定义:

    npm install crypto-js
    npm install --save @types/crypto-js
    

    使用它:

    import { SHA256, enc } from "crypto-js";
    ...
    login() {
    ...
       const hashedPass = SHA256(this.loginForm.value.password).toString(enc.Hex);
    ...
    }
    

    【讨论】:

    • 很好的解决方案。
    【解决方案4】:

    current tsconfig.json configuration(我正在使用“typescript”:“~3.5.3”)包含一个 types 编译器选项,应该在这种情况下使用:在 tsconfig.ts 文件中添加以下:

    {
      "compilerOptions": {
        "types" : [ "node" ]
       }
    }
    

    import crypto from 'crypto'导入你想使用的库

    不要使用 import * as crypto from 'crypto':它会导入已弃用的符号/函数。 (你可能应该看到编译器抱怨它)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2019-03-06
      • 2018-01-08
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多