Welche npm-Pakete werden und werden bei Angular 2 nicht funktionieren? Wie kann ich es sagen?

8

Muss ein NPM-Paket modifiziert werden, um mit Angular 2 kompatibel zu sein (z. B. Hinzufügungen hinzufügen, Richtlinien dafür festlegen) oder wird ein bestehendes Paket funktionieren? Wenn sie nicht alle kompatibel sind, woher weiß ich, was ist und was nicht kompatibel ist?

Beispiel: Ich möchte dieses Paket importieren ( Ссылка ). Mir ist bewusst, dass es ein ts-md5-Paket für angular 2 gibt, um md5 zu machen - ich benutze nur dieses Paket als Beispiel.

Wie würde ich das zum Laufen bringen?

Ich habe es mit

installiert %Vor%

aber ich kann nicht scheinen, es zu importieren

%Vor%

Ich erhalte diese Fehlermeldung, nachdem ich versucht habe,

auszuführen
  

Modul   '"/ Benutzer / xxx / Quelle / tempProjects / ngUnderscore / node_modules / @ types / md5 / index"'   wird in eine Nicht-Modul-Entität aufgelöst und kann nicht mit diesem Element importiert werden   konstruieren.

Ich bin mir nicht sicher, was diese Nachricht bedeutet. Bedeutet es, dass das Paket in seinem aktuellen Zustand nicht kompatibel ist oder versuche ich, das Paket falsch zu verwenden?

    
Diskdrive 26.03.2017, 14:10
quelle

5 Antworten

6

Ich habe es geschafft, es mit Hilfe von declare und require statt des Imports funktionieren zu lassen (der Import funktioniert nicht für diese Nicht-Modul-lib)

%Vor%

Wenn Sie den Umgehungsimport nicht so durchführen möchten, können Sie versuchen, die Typoskript-MD5-Implementierung namens ts-md5 zu verwenden . Dann sollte der Import wie unten beschrieben funktionieren. (verwiesen von diese Frage )

%Vor%

Wenn es keine TS-Implementierung gibt, können Sie nach den Typen in DefinitelyTyped suchen und dann das Paket einfach nach npm i --save-dev @types/{package-name}     

Vojtech 02.04.2017 15:14
quelle
2

Wenn die Bibliothek an Ihrem Projekt funktioniert, hängt dies von vielen Faktoren ab: Ihrer Angular-Version, Ihrer TypeScript-Version usw.

Dies gesagt, ist offensichtlich, dass wir die Dokumentation der Bibliothek überprüfen sollten und sehen, welche Abhängigkeiten und Versionen hat, und natürlich sollte die Bibliothek die Angular 2-Version von sich selbst sein. Ihrem Beispiel folgend, gibt es mehrere md5-Bibliotheken, aber wenn Sie TypeScript verwenden, sollten Sie folgendes beachten: Ссылка

Wenn wir alles abgedeckt haben, aber irgendetwas nicht funktioniert, wegen einer Art von Inkompatibilität, wie zum Beispiel:

Meine Version von eckig ist 2, die Bibliothek, die ich gerade installiert habe, funktioniert mit Angular 4. Ich habe Code voll von <template> , Bibliothek verwendet <ng-template> ... Was kann ich tun?

Sie können die Bibliothek in github forkieren und alles ändern, was Sie für die Kompatibilität mit Ihrem Projekt benötigen. Schritte:

  1. Fork-Bibliothek Repository und ändern, was Sie brauchen
  2. Abonnieren Sie das Hauptarchiv-Repository, um mit Änderungen aktualisiert zu werden
  3. In packages.json verwenden Sie Ihre gegabelte Version der Bibliothek, zum Beispiel:

"ng2-datetime": "https://github.com/my_user/ng2-datetime/tarball/my_forked_version_name",

  1. Wenn Sie denken, dass Ihre Änderungen für andere Benutzer geeignet sind ... Machen Sie eine Pull-Anfrage! : D
SrAxi 05.04.2017 11:26
quelle
2

Dies ist eher eine TypeScript-Frage, da md5 kein Angular-Paket ist. Der Schlüssel ist, dass der Import korrekt ist, um einer require () - Funktion zu entsprechen.

%Vor%

Verwenden Sie direkt in der TypeScript-Datei:

%Vor%

Um dies auf der Vorlage zu verwenden, sollte es vorzugsweise in der Methodenimplementierung verwendet werden, kann aber auch direkt belichtet werden. Fügen Sie es als Eigenschaft für die Komponente hinzu:

%Vor%

Dann auf der Vorlage:

%Vor%     
George 07.04.2017 15:49
quelle
1

Sie sagen normalerweise, für welches Winkelstück es bestimmt ist, manchmal haben Sie ein Paket für beide oder für jedes.

Wenn Sie ein Angular 1x-Paket verwenden und keine Angular2-Kompatibilität besteht, können Sie einfach ngUpgrade verwenden .

Aber wenn Sie ein gemeinsames Plugin verwenden, muss es eine eckige 2 Lösung geben.

Wenn Sie andersherum wollen, dann gehen Sie wahrscheinlich in die falsche Richtung.

    
mlk 02.04.2017 15:06
quelle
0

Das Problem, auf das Sie gestoßen sind, bezieht sich nicht auf Angular. Es ist ein Problem, das beim Importieren von CommonJS-Paketen in TypeScript auftritt.

Die Faustregel (meine Empfehlung) besteht darin, die Interop-Funktion (d. h. import * as X from 'x' ) beim Importieren von CommonJS nicht zu verwenden und stattdessen die "alte" Syntax zu verwenden (d. h. import X = require('x') ).

Wenn CommonJS eine Funktion in der Form module.exports = function() {...} exportiert, funktioniert import * as X from 'x' nicht.

Dies schließt den Fall ein, dass das Paket eine ES6-Klasse exportiert, aber mit Babel nach ES5 transpiliert.

Sie können sehen, dass einige Pakete mit dieser Syntax arbeiten, aber das liegt daran, dass die Typings einen Hack darin enthalten:

%Vor%

Es gibt andere Gründe, warum das Interop keine gute Idee ist, einschließlich der Syntax zwischen TypeScript ( import * X from 'x' ) und Babel ( import X from 'x' ) stimmt nicht überein.

Sie können hier mehr darüber erfahren und den Links folgen: Ссылка

UPDATE: mit [email protected] veröffentlicht, können Sie jetzt import EditableElement from 'Transformer' direkt machen.

Aktivieren Sie esModuleInterop in Ihrem tsconfig.json

    
unional 09.04.2017 04:53
quelle