2016-11-07 3 views
3

Ich versuche crypto-js mit Ionic zu implementieren 2.Ionic 2 Importbibliotheken

ich folgendes getan:

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

Mein index.d.ts jetzt enthält:

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

A crypto-js Ordner wurde unter ./typings/global

erstellt

Ich versuche dann den folgenden Code:

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

... 

private CryptoJS: any; 

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

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

Sobald ich Referenz versuchen this.CryptoJS (d alert(this.CryptoJS)) die App stürzt ab.

Ich mache etwas falsch in der Art, wie ich die crypto-js Bibliotheken importieren. Bitte kann jemand beraten?

Dank

UPDATE:

folgende this, ich laufe:

>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 

Wie kann ich CryptoJS im Code importieren?

Dank

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:

zu ändern:

import CryptoJS from 'crypto-js'; 

ergibt:

enter image description here

UPDATE:

Ausführen dieser:

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

führt zu keinem Buildfehler, aber während der Laufzeit, wenn CryptoJS zugegriffen wird (z.B. console.log(CryptoJS);), stürzt die App ab.

+0

Dies soll der Weg nach vorne sein: https://www.npmjs.com/package/@types/cryptojs – Richard

+0

Könnten Sie bitte sagen, woher Sie den SECRET_KEY bekommen? private SECERET_KEY: string = 'geheimer Schlüssel 123'; Ist es benutzerdefiniert? –

Antwort

0

Sie hatten Recht, zu Typen zu wechseln, da ionische @ types und nicht typings verwendet.

Vor allem

import * as CryptoJS from 'crypto-js'; 

Sollte

import 'crypto-js'; 

In diesem speziellen Fall Krypto js ist kein richtiger Knotenmodul, so dass die Einfuhr in die allgemeine Datei ist

Es gibt auch keine requires in typescript, außer du hast es installiert, stattdessen musst du importieren. So ist dies nicht sinnvoll:

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

Dies erklärt eine leere Variable irgend:

private CryptoJS: any; 

Wenn Sie es übersetzen Javascript es würde wie folgt aussehen: So

var CryptoJS; 

Das ist im Grunde sehr überflüssig. Sie haben bereits die Variable aus dem Import

In Zusammenfassung dieser Code sein sollte:

import CryptoJS from 'crypto-js'; 


class SomeClass{ 

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

danke für Ihre Hilfe. Tolle Erklärung. Allerdings bekomme ich beim Erstellen der App den folgenden Fehler in der 'import'-Zeile:' ERROR in ./app/pages/model/personModel.ts (5,22): Fehler TS2307: Kann das Modul 'crypto-js' nicht finden .' (Ich habe das vorher getan: 'npm install --save @ types/cryptojs') – Richard

+0

Wenn ich folgendes ausführe:' types install dt ~ crypto-js --global --save', bekomme ich folgenden Build Fehler : FEHLER in ./app/pages/model/personModel.ts (5,8): Fehler TS1192: Modul '' crypto-js '' hat keinen Standard-Export. ' – Richard

+0

Es sollte' crypto-js 'importiert werden; und CryptoJs nicht aus 'crypto-js' importieren; Ich habe meine Antwort bearbeitet – misha130

3

Here ist die Lösung.

Nachdem Sie die NPM-Bibliotheken installieren

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

eine declaration.d.ts Datei unter src Erstellen und Erklärung zum Modul hinzufügen. Dies löst das nicht definierte Problem Ihres Moduls.

declare module 'crypto-js'; 

Innerhalb der Serviceklasse selbst die Import CrytoJS aus dem Modul wie folgt hinzu:

import CryptoJS from 'crypto-js'; 

Jetzt in Ihrem Code Sie CryptoJS verweisen können. Denn Beispiel:

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

console.log(obj); 

Ausgänge:

t2eCyUuZMKRNTRqCW0L5KRvMjWhLV887h1ehjCNSr2c= 
0

Ich weiß nicht, ob dieses Thema geschlossen ist oder nicht, und ich habe gerade das gleiche Problem für mich gelöst, so ...

Eigentlich scheint es, wie Sie müssen nur installieren crytpoJS mit:

npm install crypto-js --save 

und importieren Sie die genaue Datei/Bibliothek, die Sie u wollen se mit:

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

Jetzt können Sie CryptoJs Funktionen verwenden, indem Sie direkt den Namen der importierten Bibliothek:

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

Vielleicht hat jemand helfen, es wird, eines Tages ...

Grüße.