我正在使用NPM进行依赖关系管理,使用Angular5使用TypeScript。
编辑我没有从npm安装加密包,我正在引用内置包的节点。
无论我做什么,“crypto”包都会解析为空对象。 我已经安装了节点@typings包,可以在node_modules / @ typings文件夹中看到@typings定义crypto的定义。
我尝试了什么:
import * as cryp from 'crypto'
declare var crypto:any
declare module crypto
var cryp = require('crypto')
我尝试删除模块文件夹并重新安装。
我尝试将所有内容更新到最新版本。
我尝试创建一个新项目,只使用加密而没有其他依赖项。没有运气。
这里最大的问题是我们正在尝试使用依赖于这个'加密'模块的库,如果没有它,它们就无法运行。
最令人困惑的是它不会抛出任何错误,并且它不是未定义的,而是一个空对象。它在项目中或在项目之外不起作用。而其他Node JS / TS模块工作正常,它实际上(到目前为止)仅仅是'crypto'存在这个问题。这里的任何指导或想法都会很棒。
主要使用ng服务来运行应用程序,但也尝试直接使用节点打包和运行。
根据@kendor的建议,我运行了一个tsc --traceResolution。这是关于加密的部分。有趣的是,它说“node_modules”不存在,但显然确实存在,而其他软件包正在从中正确解析。
======== Resolving module 'crypto' from '[...]/src/app/app.component.ts'. ========
Explicitly specified module resolution kind: 'NodeJs'.
Loading module 'crypto' from 'node_modules' folder, target file type 'TypeScript'.
Directory '[...]/src/app/node_modules' does not exist, skipping all lookups in it.
Directory '[...]/src/node_modules' does not exist, skipping all lookups in it.
File '[...]/node_modules/crypto.ts' does not exist.
File '[...]/node_modules/crypto.tsx' does not exist.
File '[...]/node_modules/crypto.d.ts' does not exist.
File '[...]/node_modules/@types/crypto.d.ts' does not exist.
Directory '[...]/node_modules' does not exist, skipping all lookups in it.
Directory '[...]node_modules' does not exist, skipping all lookups in it.
Directory '/home/node_modules' does not exist, skipping all lookups in it.
Directory '/node_modules' does not exist, skipping all lookups in it.
Loading module 'crypto' from 'node_modules' folder, target file type 'JavaScript'.
Directory '[...]/src/app/node_modules' does not exist, skipping all lookups in it.
Directory '[...]/src/node_modules' does not exist, skipping all lookups in it.
File '[...]/node_modules/crypto.js' does not exist.
File '[...]/node_modules/crypto.jsx' does not exist.
Directory '[...]/node_modules' does not exist, skipping all lookups in it.
Directory '[...]node_modules' does not exist, skipping all lookups in it.
Directory '/home/node_modules' does not exist, skipping all lookups in it.
Directory '/node_modules' does not exist, skipping all lookups in it.
======== Module name 'crypto' was not resolved. ========
答案 0 :(得分:3)
为了回答你的问题,我试图找到库代码。在搜索它时,我注意到这个库已被弃用,因此你很可能没有任何运气。见这里:https://www.npmjs.com/package/crypto
如果您想确保这种情况,请查看node_modules/crypto
文件夹及其中的代码。如果可以,请与我们分享: - )。
编辑:正如@Jaromanda X在评论中指出的那样(并写在npm页面上),它已被弃用为npm包并添加到nodejs本身(https://nodejs.org/docs/latest-v7.x/api/crypto.html#crypto_crypto)。然而,他们仍然阻止它的名称,以避免恶意使用。
编辑2:这个答案假设他安装了加密npm软件包(在工作区或全局),这可能会干扰内置加密软件包。
答案 1 :(得分:0)
要将crypto
NodeJS库与Typescript一起使用(例如,Angular> = 2),请执行以下步骤:
npm install @types/node --save-dev
安装NodeJS定义在tsconfig.ts
文件中添加以下内容:
"files": [
"./node_modules/@types/node/index.d.ts"
]
使用import * as crypto from 'crypto';