【发布时间】:2016-08-14 20:07:09
【问题描述】:
在我的 Angular 2 应用程序(SystemJS 模块管理器,Typescript 作为脚本语言)中,我需要导入一个 npm 模块来处理加密(Crypto-JS;Forge-JS 或任何其他服务)
在 CryptoJS 的情况下,通过 npm install 安装后 * 我尝试添加:
<script src="node_modules/crypto-js/crypto-js.js"></script>
在索引:html中。
在我的服务 (app/services/my-service.service.ts) 我通过
导入它 import {CryptoJS} from 'node_modules/crypto-js/crypto-js.js' // or /aes.js --> same issue
但是导入无法正常工作,例如
console.log(CryptoJS);
打印未定义。
我也尝试在中添加模块路径
System.config({
// ...
map: {
CryptoJS
}
}
并通过
将其导入我的服务中 import {CryptoJS} from 'cryptoJs';
虽然我不确定我应该在 SystemJS 配置中实际添加什么,但我尝试过的解决方案都没有奏效。
编辑我也试过...
// import ... as to overcome no default export
import * as CryptoJS from 'node_modules/crypto-js/crypto-js.js';
然后
console.log(CryptoJS.);
不提供 AES/任何方法(我的编辑通常会建议我可以通过自动完成使用哪些方法)
EDIT 2 现在感谢 Thierry 和 PierreDuc 的贡献,很明显类型和模块导入是未链接的概念。
但是它们都没有工作。这就是我所做的:
我下载了CryptoJS typings file,放到typings/cryptojs/cryptojs.d.ts中
然后我添加了
/// <reference path="cryptojs/cryptojs.d.ts"/>
到 typings/main.d.ts
然后我在 SystemJS 的地图配置中添加了 cryptojs:
cryptojs: "node_modules/crypto-js/crypto-js.js"
最后我尝试通过
在我的服务中导入cryptojs import CryptoJS from 'cryptojs'
据我所知有两个问题:
- 由于在我尝试导入模块时没有自动完成功能(我还尝试重新启动 Angular 2 应用程序),因此未加载输入。也许我不明白如何导入外部类型?
- 无论如何模块都没有加载,我可以通过 console.log(cryptojs) 看到(没有打印,甚至没有未定义;不太可能是我之前的尝试)
编辑 3
感谢 Thierry 和 PierreDuc 的建议,我终于让导入工作正常进行了(首先不知道出了什么问题)。 但是我仍然有打字的问题。
尽管我放了
/// <reference path="../../typings/cryptojs/cryptojs.d.ts"/>
当我写作时,直接为我服务
import CryptoJS from 'cryptojs';
就在那条线下方,我没有自动完成功能,当我通过 npm start 重新启动 Angular 2 应用程序时;我收到以下错误,应用程序无法启动
app/services/user.service.ts(6,22): error TS2307: Cannot find module 'cryptojs'.
注意:如果我将 cryptojs 添加到 SystemJS 配置(但不是 a )然后写入(没有任何导入)
console.log(CryptoJS.AES.encrypt('my message', 'secret key123').toString());
它只是工作,但我宁愿解决打字+导入问题。
【问题讨论】:
-
将CryptoJS Definitely Typed 添加到您的打字,并将
crypto-js.js添加到您的index.html,您应该很高兴。不要忘记在引导文件中添加/// <reference path="typings/cryptojs/cryptojs.d.ts"/> -
到今天为止,这里的任何答案都适用于最新的 Angular 版本吗?
标签: encryption npm angular