Ionic 2导入库

时间:2016-11-07 16:36:03

标签: ionic2

我正在尝试用Ionic 2实现crypto-js

我做了以下事情:

npm install crypto-js
typings install dt~crypto-js --global --save

我的index.d.ts现在包含:

/// <reference path="globals/crypto-js/index.d.ts" />

crypto-js

下创建了./typings/global文件夹

然后我尝试以下代码:

declare var require: any;
import * as CryptoJS from 'crypto-js';

...

private CryptoJS: any;

    constructor() {
        this.CryptoJS = require("crypto-js");
    }

    test() {
       alert(this.CryptoJS);
    }

只要我尝试引用this.CryptoJS(即alert(this.CryptoJS)),应用就会崩溃。

我在导入crypto-js库的方式上做错了。请问有人可以提出建议吗?

由于

更新

this之后,我运行:

>npm install --save @types/cryptojs
npm WARN package.json theWhoZoo@ No repository field.
npm WARN package.json theWhoZoo@ No README data
npm WARN package.json theWhoZoo@ No license field.
@types/cryptojs@3.1.29 node_modules\@types\cryptojs

如何在代码中导入CryptoJS

由于

更新

import { Injectable } from "@angular/core";
import { LanguageModel } from './languageModel';
import { LocationModel } from './locationModel';
import { JobModel } from './jobModel';
import 'crypto-js';

@Injectable()
export class PersonModel {

    public id: number = null;
    public joiningDate: number = null;
    public lastAccessDate: number = null;
    public userName: string = null;
    public password: string = null;
    public firstName: string = null;
    public lastName: string = null;
    public emailAddress: string = null;
    public locations: LocationModel[] = [];
    public languages: LanguageModel[] = [];
    public time: string = null;
    public avatar: string = null;
    public avatar64: string = null;

    //private CryptoJS: any;
    private SECERET_KEY: string = 'secret key 123';

    public getPasswordEcrypted(): string {
        // Decrypt 
        var bytes = CryptoJS.AES.decrypt(this.password.toString(), this.SECERET_KEY);
        var plaintext = bytes.toString(CryptoJS.enc.Utf8);
        console.log('getPasswordEcrypted', plaintext);
        return plaintext;
    }

    public setPasswordEncrypted(password: string): void {
        // Encrypt 
alert(password);
        console.log('setPasswordEncrypted', password, CryptoJS);
alert(CryptoJS);
        var ciphertext = CryptoJS.AES.encrypt(password, this.SECERET_KEY);
alert(ciphertext);
        console.log('setPasswordEncrypted', password, ciphertext);
        this.password = ciphertext;
    }
}

enter image description here

更新

更改为:

import CryptoJS from 'crypto-js';

结果:

enter image description here

更新

运行此:

typings install dt~crypto-js --global --save

不会导致构建错误,但在访问CryptoJS时的运行时(例如console.log(CryptoJS);),应用程序崩溃。

3 个答案:

答案 0 :(得分:3)

Here就是解决方案。

安装npm库后

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

在src下创建一个declaration.d.ts文件,并向模块添加声明。这可以解决您的模块未定义问题。

declare module 'crypto-js';

在服务类本身中,从模块中添加导入CrytoJS,如下所示:

import CryptoJS from 'crypto-js';

现在在您的代码中,您可以引用CryptoJS。例如:

 let obj = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(['abcd', this.config.salt].join(':'), this.config.salt));

console.log(obj);

输出:

t2eCyUuZMKRNTRqCW0L5KRvMjWhLV887h1ehjCNSr2c=

答案 1 :(得分:1)

我不知道这个主题是否已经关闭,我刚刚为我解决了同样的问题,所以......

实际上,您似乎只需安装crytpoJS:

npm install crypto-js --save

导入您要使用的精确文件/库:

import { SHA3 } from "crypto-js"; // SHA3 one-way encryption
import { AES } from 'crypto-js'; // For AES encryption/decryption
import { enc } from 'crypto-js'; // For characters encodages types (Utf-8, latin1...)

现在您可以直接使用导入库的名称来使用CryptoJs函数:

//AES
let encrypted = AES.encrypt('my message', 'secret key 123');
let bytes  = AES.decrypt(encrypted.toString(), 'secret key 123');
let decrypted = bytes.toString(enc.Utf8);

//SHA
let hash = SHA3('password', { outputLength: 224 }).toString()

也许有一天它会帮助别人......

问候。

答案 2 :(得分:0)

你是正确的,因为离子使用@types而不是打字。

首先

import * as CryptoJS from 'crypto-js';

应该是

   import 'crypto-js';

在这种特定情况下,crypto js不是一个合适的节点模块,因此导入到一般文件

除非您安装了打字稿,否则打字稿中也没有要求,而是导入。所以这没有意义:

this.CryptoJS = require("crypto-js"); 

这声明了一个空变量:

private CryptoJS: any;

如果您将其翻译为javascript,它将如下所示:

var CryptoJS;

所以这基本上是多余的。您已经拥有导入中的变量

总结一下,这应该是你的代码:

import CryptoJS from 'crypto-js';


class SomeClass{

       test(){
           alert(CryptoJS);
        }
}