Beschreibe den Fehler
Wenn import moment from 'moment'
in eine Entwicklungseinstellung importiert wird, kann der Moment effektiv arbeiten und macht alles, was ich will. Beim Ausführen von Scherztests, die über den Code ausgeführt werden, der moment () aufruft, wird jedoch der folgende Fehler angezeigt:
"TypeError: moment_1.default ist keine Funktion"
Seltsamerweise ermöglicht das Importieren auf diese Weise: import * as moment from 'moment'
Funktionen im Test, aber nicht in der Produktion. Ich habe alle Probleme von Jest durchgesehen und dies wurde als Problem gemeldet. Das Jest-Team ist jedoch zuversichtlich, dass das Problem auf der aktuellen Seite liegt.
Reproduzieren
Schritte zum Reproduzieren des Verhaltens:
Erwartetes Verhalten
Der Moment sollte sowohl im Test als auch in der Produktion auf dieselbe Weise abrufbar sein.
Desktop (bitte vervollständigen Sie die folgenden Informationen):
Momentenspezifische Umgebung
Moment -v 2.24.0
Führen Sie den folgenden Code in Ihrer Umgebung aus und fügen Sie die Ausgabe hinzu:
Konsolenausgabe, wenn der Moment so importiert wird, wie es die Entwicklung erwartet, dh Moment von 'Moment' importieren
console.log src/resources/timestamping.tsx:4
Tue Jul 16 2019 10:58:16 GMT-0400 (Eastern Daylight Time)
console.log src/resources/timestamping.tsx:5
7/16/2019, 10:58:16 AM
console.log src/resources/timestamping.tsx:6
240
TypeError: Cannot read property 'version' of undefined.
Konsolenausgabe, wenn der Moment so importiert wird, wie er im Test funktioniert, dh * als Moment aus 'Moment' importieren.
console.log src/resources/timestamping.tsx:4
Tue Jul 16 2019 11:02:46 GMT-0400 (Eastern Daylight Time)
console.log src/resources/timestamping.tsx:5
7/16/2019, 11:02:46 AM
console.log src/resources/timestamping.tsx:6
240
console.log src/resources/timestamping.tsx:8
2.24.0
const moment = require("moment").default || require("moment")
ist das, was ich mir ausgedacht habe, aber es erlaubt nur die Verwendung von moment
als Funktion.
// bearbeiten
import * as mom from "moment";
const moment = require("moment").default || require("moment");
Behebt das Winkel- / Scherzproblem. Aber es ist immer noch ein Hack.
blem. Aber es ist immer noch ein Hack.
Vielen Dank, Sir, das hat geholfen.
Gibt es etwas, was die Seite von Moment.j hier tun kann?
Ich hatte dieses Problem, als ich ts-jest
für die Arbeit mit Typoskript und Scherz verwendete. Ich habe stattdessen babel für die Typoskript-Unterstützung mit Scherz verwendet und sehe mich dem nicht mehr gegenüber. Vielleicht macht die ts-jest
Bibliothek etwas unter der Haube
nach etwas mehr suche fand hier die lösung
https://github.com/aurelia/skeleton-navigation/issues/606#issuecomment -397051406
müssen "esModuleInterop": true
unter compilerOptions in tsconfig.json übergeben
@DhrubajitPC froh, dass Sie die Lösung gefunden haben.
Können Sie das zu unseren Dokumenten hinzufügen?
https://momentjs.com/docs/#/use -it / typescript /
Klar ... gib mir etwas Zeit :)
hmmm ... es scheint schon Teil der FAQ zu sein
https://github.com/moment/moment/blob/develop/FAQ.md
Es scheint, dass ich diesen Fehler nur bekomme, wenn ich esModuleInterop auf true setze ...
@KonradLinkowski - der Hack hat aber geholfen :)
Hilfreichster Kommentar
const moment = require("moment").default || require("moment")
ist das, was ich mir ausgedacht habe, aber es erlaubt nur die Verwendung vonmoment
als Funktion.// bearbeiten
Behebt das Winkel- / Scherzproblem. Aber es ist immer noch ein Hack.