Ich baue eine Angular (2+) -Komponentenbibliothek mit jvandemo / generator-angular2-library als ein Starter, der Rollup als Modul-Builder verwendet. Die Komponente, die ich in der Bibliothek erstelle, verwendet MomentJS .
Ich hatte verschiedene Build-Probleme mit der Aufnahme von MomentJS.
Ich habe zuerst import moment from 'moment';
verwendet, um Moment in die Komponente zu importieren, aber das erzeugt den folgenden Fehler bei Build;
Ich habe diese SO-Frage gefunden, die besagt, dass ich import * as moment from 'moment';
jedoch damit verwenden soll Ich verstehe;
Soweit ich das beurteilen kann, sind das die beiden einzigen Optionen und ich kann nicht zur Arbeit kommen, was fehlt mir?
Bearbeiten
Ich habe dieses Problem zum Github Repo der Bibliothek hinzugefügt, das minimalistische Replikationsschritte enthält
Der Fehler ist sehr klar und spezifisch
Fehler: Kann einen Namespace ("Moment") nicht aufrufen bei Fehler (/Users/chris/angular-library/node_modules/rollup/dist/rollup.js:185:14)
Dies ist gemäß der ES-Modul-Spezifikation.
Dies bedeutet, dass die folgende Methode eine ungültige Methode zum Importieren von Momenten oder von Dingen ist, die Sie aufrufen möchten, da ein Modul-Namespace-Objekt, z. B. das von * as ns
, nicht aufgerufen werden kann.
Die korrekte Form ist die Form, dass ngc
einen Fehler auf
Zuerst müssen Sie das Flag --allowSyntheticDefaultImports
angeben, damit dies funktioniert.
tsconfig.json
%Vor% Unter der Annahme, dass ngc
die Option erkennt, haben Sie immer noch ein zusätzliches Problem.
Das obige Flag ist für Benutzer von Tools wie SystemJS oder Webpack, die die Synthese durchführen, so dass ein solcher Code überprüft werden kann.
Ab TypeScript 2.7 können Sie nun das Flag --esModuleInterop
angeben, damit die Sprache die Synthese als Teil des Übertragungsprozesses bereitstellt.
Beachten Sie, dass beim Kompilieren zu CommonJS-, AMD- oder UMD-Modulen (z. B. mit --module commonjs
) die korrekte Importsyntax eher
In der Beispielanweisung hatte ich kein Problem beim Kompilieren, wenn ich Folgendes verwendete:
%Vor%Die Dateien werden aus einem Build-Verzeichnis kompiliert, das ein Unterverzeichnis des Stammverzeichnisses ist. Sie erhalten eine weitere Warnung über "dieses", hier erwähnt:
Ich muss im gulfile sagen, dass die Bibliothek extern ist:
%Vor%Und von der GitHub-Verknüpfung sollten Sie einen Onwarn-Block zu beiden Rollup-Abschnitten hinzufügen: Das ist Abschnitt "Rollup: umd" und "Rollup: fesm"
%Vor%Geht das weiter?
Tags und Links angular typescript momentjs