2016-11-07 2 views
3

Я пытаюсь реализовать crypto-js с ионными 2.Ионные 2 библиотеки импорта

Я сделал следующее:

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. Пожалуйста, кто-нибудь может посоветовать?

Благодаря

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:

Переход к:

import CryptoJS from 'crypto-js'; 

приводит:

enter image description here

ОБНОВЛЕНИЕ:

Запуск этого:

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

результаты без каких-либо ошибок сборки, но во время выполнения, когда CryptoJS доступ (например, console.log(CryptoJS);), приложение падает.

+0

Предполагается, что это путь вперед: https://www.npmjs.com/package/@types/cryptojs – Richard

+0

Не могли бы вы сообщить мне, откуда вы получаете SECRET_KEY? закрытый SECERET_KEY: string = 'секретный ключ 123'; Определен ли пользователь? –

ответ

0

Вы были правы, чтобы переключаться на типы, потому что ионный использует @types и не типизирует.

Прежде всего

import * as CryptoJS from 'crypto-js'; 

Должно быть

import 'crypto-js'; 

В данном конкретном случае криптографической JS не является собственным модулем узла так импорта в общем файле

Существует также нет необходимости в машинописном тексте, если вы не установили его, вместо этого у вас есть импорт. Так что это не имеет смысла:

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

Объявляет пустой переменной любого:

private CryptoJS: any; 

Если перевести его на Javascript это будет выглядеть следующим образом:

var CryptoJS; 

Так это в основном очень избыточно. У вас уже есть переменная от импорта

В сводке это должен быть ваш код:

import CryptoJS from 'crypto-js'; 


class SomeClass{ 

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

Благодарю вас за помощь. Отличное объяснение. Тем не менее, я получаю следующую ошибку в строке 'import' при создании приложения:' ERROR in ./app/pages/model/personModel.ts (5,22): ошибка TS2307: не удается найти модуль 'crypto-js' . (Я ранее делал это: 'npm install --save @ types/cryptojs') – Richard

+0

Если я запускаю следующее:' typings install dt ~ crypto-js --global --save', я получаю следующую ошибку сборки : 'ERROR in ./app/pages/model/personModel.ts (5,8): ошибка TS1192: модуль '' crypto-js '' не имеет экспорта по умолчанию.' – Richard

+0

Это должен быть import 'crypto-js'; и не импортировать CryptoJs из 'crypto-js'; Я отредактировал свой ответ – misha130

3

Here подходит для этого.

После установки библиотеки НПМ

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

Создать 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= 
0

Я не знаю, если эта тема будет закрыта или нет, и я только решил такую ​​же проблему для меня, так что ...

на самом деле, кажется, что вы просто должны установить 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() 

Может быть, это поможет кому-то, какой-то день ...

С уважением.

Смежные вопросы