Beschreibung des Problems und Schritte zur Reproduktion:
Versuch, Instanz-Gebietsschema im Typoskript-Projekt zu implementieren
https://momentjs.com/docs/#/i18n/instance -locale/
aber wenn ich import moment from 'moment'
erhalte, erhalte ich eine Fehlermeldung:
moment has no default export
Zweck:
Ich benötige in einigen Teilen der Anwendung benutzerdefinierte Formen (verkürzen, wie 'sec' statt 'seconds') von humanisierten Strings, daher möchte ich zwei Gebietsschemas in einer Ansicht verwenden.
Umfeld:
Typoskript-Projekt
Weitere Informationen, die hilfreich sein können:
TypeScript, Angular4
Wenn Sie ein Problem melden, führen Sie den folgenden Code in der von Ihnen verwendeten Umgebung aus und fügen Sie die Ausgabe ein:
console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)
Tue Jan 09 2018 15:46:46 GMT+0100 (CET)
VM12667:2 09/01/2018, 15:46:46
VM12667:3 -60
VM12667:4 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
VM12667:5 Uncaught ReferenceError: moment is not defined
at <anonymous>:5:13
md5-1f8dcc13f1f8244065e29a6dcf5a9efa
import * as moment from 'moment';
console.log('version', moment.version);
md5-1f8dcc13f1f8244065e29a6dcf5a9efa
version 2.20.1
Ich möchte die import * as moment from 'moment';
Lösung verhindern, da sie drei Schütteln beim Bündeln blockiert
Vielen Dank! :)
RTFM
Note: If you have trouble importing moment, try adding
"allowSyntheticDefaultImports": true in compilerOptions
in your tsconfig.json file and then use the syntax
https://momentjs.com/docs/#/use -it/typescript/
Besteht die Möglichkeit, dass dies so gelöst wird, dass allowSyntheticDefaultImport
nicht mehr benötigt wird? Das Problem bei der Anforderung besteht darin, dass jeder, der den Moment verwendet, auch diese Einstellung aktiviert haben muss.
Indem Sie diese Einstellung nicht benötigen, können Sie moment
problemlos in Projekten verwenden, die ihre eigene Präferenz für allowSyntheticDefaultImport
, aber jetzt wird diese Einstellung effektiv jedem aufgezwungen.
Ich stimme hier nur ein, dass dies ein wirklich, wirklich, widerwärtiges Problem ist. Da moment entschieden hat, die offizielle Spezifikation nicht zu respektieren, bedeutet dies, dass einige Bibliotheken über import * as moment from "moment"
während andere Bibliotheken über import defaultMoment from "moment"
laufen. Wenn mein Projekt also versucht, beide zu laden, kann ich einfach nicht die richtigen Einstellungen erhalten, um Rollup zum richtigen Kompilieren zu erhalten. Ich habe fast jede Permutation und Kombination von allowSyntheticDefaultImports : true
, esModuleInterop : true
, moduleResolution : "node"
und skipLibCheck : true
ausprobiert und kann keine richtig funktionierende Permutation finden. Eine Lösung ermöglicht es einer Bibliothek mit einem Importformat zu arbeiten, aber sie schlägt im anderen fehl.
Es gibt einen Grund dafür, dass Spezifikationen existieren, und zwar um Konsistenz zu schaffen. Gibt es keine Möglichkeit, dass dieser Moment eine Moment-es-Variante oder etwas hat, das richtig importiert werden kann, so dass Leute, die der Spezifikation folgen möchten, einfach der Spezifikation folgen können, sodass die JS-Toolchain wie erwartet funktioniert, anstatt alle? hackt?
+1
Hilfreichster Kommentar
RTFM
https://momentjs.com/docs/#/use -it/typescript/