2016-11-07 8 views
3

は、私は、次イオン2で私が行っているイオン2インポートライブラリ

crypto-jsを実装しようとしていますフォルダが./typings/global

に作成されました私が参照 this.CryptoJS(すなわち alert(this.CryptoJS))アプリのクラッシュを試すとすぐ

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

... 

private CryptoJS: any; 

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

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

は、私は、次のコードを試してみてください。

私はcrypto-jsライブラリをインポートする方法が間違っています。誰でも助言できますか?

おかげ

UPDATE:this

は、私が実行します。

>npm install --save @types/cryptojs 
npm WARN package.json [email protected] No repository field. 
npm WARN package.json [email protected] No README data 
npm WARN package.json [email protected] No license field. 
@types/[email protected] node_modules\@types\cryptojs 

私はコードでCryptoJSをインポートするにはどうすればよいですか?

おかげ

UPDATE:

:に変更

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

UPDATE

enter image description here

UPDATE:

は、この実行:中の

結果CryptoJSがアクセスされたときにビルドエラーに

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

結果を、しかし、実行時に(例えば、 console.log(CryptoJS);)、アプリがクラッシュします。

+0

これは進歩していると思われます。https://www.npmjs.com/package/@types/cryptojs – Richard

+0

SECRET_KEYの取得先を教えてください。 プライベートSECERET_KEY:文字列= '秘密キー123'; ユーザー定義ですか? –

答えて

0

イオンではタイピングではなく@タイプが使用されるので、タイプに切り替えることは正解です。

すべて

import * as CryptoJS from 'crypto-js'; 

の最初のインポートは、一般的なファイル

にもありますされるように暗号JSが適切なノードモジュールではありません。この特定の場合には

import 'crypto-js'; 

であるべきあなたがそれをインストールしない限り、typecriptには必要ありません。だから、これは意味がありません:あなたは、それはそれは次のようになりますJavaScriptに変換する場合は

private CryptoJS: any; 

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

これは、いずれかの空の変数を宣言し

var CryptoJS; 

ので、これは基本的に非常に冗長です。あなたは既にまとめてインポート

から変数を持っている、これはあなたのコードのようになります。

import CryptoJS from 'crypto-js'; 


class SomeClass{ 

     test(){ 
      alert(CryptoJS); 
     } 
} 
+0

ご協力いただきありがとうございます。素晴らしい説明。しかし、 'ERROR in ./app/pages/model/personModel.ts (5,22):エラーTS2307:モジュール 'crypto-js'が見つかりませんでした。 '' dt〜crypto-js --global --save'を実行すると、以下のビルドエラーが表示されます。(これは前に '' npm install --save @ types/cryptojs''を実行しています) – Richard

+0

: 'ERROR in ./app/pages/model/personModel.ts (5,8):エラーTS1192:モジュール' 'crypto-js' 'にデフォルトエクスポートがありません。' – Richard

+0

'crypto-js'をインポートする必要があります。 'crypto-js'からCryptoJsをインポートしない。私は私の答えを編集しました – misha130

3

Hereは、このためのソリューションです。

あなたはNPMライブラリをインストールした後

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

はsrc以下declaration.d.tsファイルを作成し、モジュールに宣言を追加します。これはあなたのモジュール未定義の問題を解決します。サービスクラス自体の中で

declare module 'crypto-js'; 

このようなモジュールからインポートCrytoJS追加:あなたはCryptoJSを参照することができ、あなたのコードで今すぐ

import CryptoJS from 'crypto-js'; 

を。

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

console.log(obj); 

出力:

t2eCyUuZMKRNTRqCW0L5KRvMjWhLV887h1ehjCNSr2c= 
0

この主題を閉じたりないと私はちょうど私のために同じ問題を解決してきている場合、私は知らないので...

、たとえば、

npm install crypto-js --save 

そして、あなたはUにしたい正確なファイル/ライブラリをインポート:

実際に、あなただけでcrytpoJSをインストールする必要がありますように思えますSEと:

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() 

多分それは誰か、いつの日か...

よろしくをお手伝いします。