So importieren Sie nicht-Kern-npm-Modulen im Winkel 2 z.B. (ein Krypto-Bibliothek)?
In meinem Winkel 2 app (SystemJS Modul-manager, Typoskript als scripting-Sprache) brauche ich zum importieren einer npm-Modul zur Verschlüsselung (entweder Crypto-JS;Schmiede-JS oder irgendeinem anderen Zweck dienen)
Im Fall von CryptoJS, nach der Installation über npm installieren * ich habe versucht, durch Zugabe von:
<script src="node_modules/crypto-js/crypto-js.js"></script>
in index:html.
Die in meinem Dienst (- app/services/my-service.service.ts) ich importieren über
import {CryptoJS} from 'node_modules/crypto-js/crypto-js.js' //or /aes.js --> same issue
Aber der import funktioniert nicht richtig, wie zum Beispiel
console.log(CryptoJS);
Drucke undefined.
Ich habe auch versucht, fügen Sie den Modul-Pfad in
System.config({
//...
map: {
CryptoJS
}
}
importieren und es in meinem Dienst durch
import {CryptoJS} from 'cryptoJs';
Während ich bin mir nicht sicher, was soll ich eigentlich in SystemJS config, keine der Lösungen, die ich versuchte gearbeitet.
BEARBEITEN ich auch versucht...
//import ... as to overcome no default export
import * as CryptoJS from 'node_modules/crypto-js/crypto-js.js';
aber dann
console.log(CryptoJS.);
gibt kein AES/whatever-Methode (mein editor in der Regel Hinweise, welche Methoden ich verwenden könnte, per auto-Vervollständigung)
EDIT 2 jetzt vielen Dank an Thierry und PierreDuc Beitrag es ist klar, dass die Testungen und das Modul zu importieren sind nicht verknüpfte Konzepte.
Aber keiner von Ihnen arbeitet. Dies ist, was ich getan habe:
Ich heruntergeladen CryptoJS-Testungen Datei, steckte es in Testungen/cryptojs/cryptojs.d....ts
Dann habe ich
///<reference path="cryptojs/cryptojs.d.ts"/>
zu - Testungen/main.d....ts
Dann habe ich cryptojs in SystemJS die map config:
cryptojs: "node_modules/crypto-js/crypto-js.js"
Schließlich habe ich versucht zu importieren cryptojs in meinem Dienst durch
import CryptoJS from 'cryptojs'
Soweit ich sehe, gibt es 2 Probleme:
- - Testungen werden nicht geladen, da es keine autocompletion, wenn ich versuche, das Modul importieren (ich habe auch versucht, starten Sie den Winkel-2 app). Vielleicht hatte ich nicht verstanden, wie der import externer Testungen?
- das Modul wird nicht geladen, trotzdem kann ich sehen, dass auf der Konsole aus.log(cryptojs) (nichts wird gedruckt, auch nicht undefined; unwahrscheinlich meine bisherigen versuche)
EDIT 3
Schließlich habe ich die import-Arbeit Dank an Thierry und PierreDuc Beratung (nicht sicher, was falsch gelaufen ist auf dem ersten Platz).
Aber ich habe noch Probleme mit Testungen.
Trotz legte ich
///<reference path="../../typings/cryptojs/cryptojs.d.ts"/>
direkt in meinen Dienst, wenn ich Schreibe
import CryptoJS from 'cryptojs';
nur unter dieser Zeile bekomme ich keine Autovervollständigung und wenn ich starten Eckig 2-app über die von npm start ; bekomme ich folgende Fehlermeldung und die app nicht starten
app/services/user.service.ts(6,22): error TS2307: Cannot find module 'cryptojs'.
HINWEIS: Wenn ich cryptojs zu SystemJS config (aber nicht a ) und schreiben Sie dann (ohne zu importieren)
console.log(CryptoJS.AES.encrypt('my message', 'secret key123').toString());
es genau funktioniert, aber ich würde eher zu lösen, die Testungen + import-Probleme.
- fügen Sie CryptoJS Definitiv Typisierte, um Ihre Testungen, und die
crypto-js.js
zu Ihremindex.html
und Sie sollten gut zu gehen. Vergessen Sie nicht, fügen Sie ein/// <reference path="typings/cryptojs/cryptojs.d.ts"/>
zu Ihrer bootstrap-Datei - Die Antworten hier sind arbeiten für die neuesten eckige version von heute?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie versuchen, diese, da die Bibliothek CommonJS-konform in Ihrem Haupt-HTML-Datei:
importieren und es auf diese Weise:
Für die Zusammenstellung Teil können Sie die in Pierre ' s Vorschlag.
Bearbeiten
Machte ich ein paar tests und hier ist der Weg, das zu tun.
Installieren-Testungen für crypto-js:
Den entsprechenden Testungen in Ihre ts-Datei:
Konfigurieren Sie die Bibliothek in SystemJS in Ihrem Haupt-HTML-Datei:
Importieren Sie die Bibliothek in Ihrem ts-Dateien:
index.html
. Ich vergessen, dass. Aber wie du schon erwähnt hast, für die Zusammenstellung/code hinting, müssen Sie died.ts
- Datei. Dies ist nicht in dernode_module
SystemJS
importieren die benötigte Bibliothek Recht, wenn Sie es inmap
. Keine Notwendigkeit, fügen Sie es als Skript, um dieindex.html
dachte ich. (fyi, entfernen oder fügen Sie ein Anführungszeichen ( ' ), um die map-Namen von cryptojs :))index.html
- Datei, die Sie haben sollen 😉 Sonst nicht... Danke für den Hinweis, die Tippfehler aus! Ich aktualisiert meine Antwort...import CryptoJS from 'cryptojs'
und nichtimport {} from 'cryptojs'
CryptoJS
Objekt aus meiner Antwort, es ist nicht null:Object {lib: Object, enc: Object, algo: Object, x64: Object, mode: Object…}AES: ObjectDES: ObjectEvpKDF: (password, salt, cfg)HmacMD5: (message, key)HmacRIPEMD160: (message, key)HmacSHA1: (message, key)HmacSHA3: (message, key)HmacSHA224: (message, key)...
War ich in der Lage zu bekommen CryptoJS arbeiten in einem Angular2 Projekt generiert, mit eckig-cli die folgenden Schritte/Konfiguration:
bash
angular-cli-build.js
system.config.ts
einige.Komponente.ts
War dies die einzige Einrichtung, die ich bekommen könnte arbeiten für einen regelmäßigen Aufbau und eine
-prod
bauen. Ich merke, diese Frage war nicht speziell über angular-cli, aber dachte, ich würde die Antwort sowieso, falls es jemandem hilft.Antworten importieren Sie die gesamte
crypto-js
Bibliothek, also Blähungen die app, wenn Sie nur kleine Stücke davon.Ich will, dass meine app so schneiden wie möglich, das ist also mein Ansatz:
installiert über NPM
systemjs.config.js
Komponente.ts
Diese hat ein paar Nachteile, though. Die shortcut-Methoden funktionieren nicht für mich:
nicht funktioniert
funktioniert
Vermeiden der compiler Fehler
"Could not find module x"
musste ich mich fügen Sie den folgenden, um eine Brauch.Testungen.d....tsDann link zu den Testungen von meinem main.ts
Der größte Nachteil ist, dass die Testungen erwähnt in die anderen Antworten scheinen nicht zu funktionieren mit diesem Ansatz, weil Sie für die ganze
crypto-js
Bibliothek. Zum BeispielCryptoJS.algo
wird nicht erkannt. Also es ist wirklich beschissen, aber ich habe keine intellisense - /autocomplete in der IDEAlso warum mit so einem Nachteil? In der Erwägung, dass die gesamte Bibliothek wird über 60kb der minified JS, um meine app zu importieren nur, was ich brauche, fügt 4.5 kb. Und das ist ein Sieg für mich.
Installieren cryptojs Paket führen Sie folgenden Befehl aus:
npm installieren crypto-js --speichern
Nach Abschluss der installation, wie oben beschrieben, wenn Sie mit webpack/bundles oder aktualisiert angularjs-Versionen, führen Sie folgenden Befehl als auch um die Erklärung von Dateien.
npm install --save @ - Typen/crypto-js
In @ - Arten von node_modules d.ts-Dateien werden Hinzugefügt, so wie zu beheben import zugehörigen Fehler für cryptojs. Dieser arbeitete für mich.
Wenn ich versuchte zu laufen:
Testungen installieren --ambient crypto-js
Bekam ich die Fehlermeldung:
Testungen ERR! veraltet Die "ambient" - flag ist veraltet. Bitte verwenden Sie "global" statt
Statt, indem diese Zeile in Testungen.json-Datei, funktionierte es.
"crypto-js": "Registrierung:dt/crypto-js#3.1.4+20160505170201"