Ich habe eine .ts-Datei in der App Node Js (neueste Version von Node.js für den 07.10.19) mit dem Import des Node-Moduls ohne Standardexport. Ich benutze diese Konstruktion: import { Class } from 'abc';
Wenn ich den Code ausführe, habe ich diesen Fehler : Cannot use import statement outside a module
.
Im Netzwerk sehe ich viele Lösungen für dieses Problem (für .js), aber es hilft mir nicht, vielleicht weil ich eine Typoskriptdatei habe. Hier ist mein Code:
import { Class } from 'abc';
module.exports = { ...
execute(a : Class ,args : Array<string>){ ...
Hier ist meine tsconfig.json:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true
}
}
typescript
ecmascript-6
Zerumi
quelle
quelle
import
Anweisung die erste Zeile in Ihrer Datei?require
vsimport
) unterschiedlich sein. Um Ihnen ein Gefühl dafür zu geben, wie kompliziert dies ist, hat Node einige Dokumentationen überimport
vsrequire
und wie man sie zusammenarbeiten lässt.module.exports
Syntax verwenden, befinden Sie sich wahrscheinlich nicht in einem ES6-Modul.execute(a : abc.Class...
Antworten:
Wenn Sie
“type”: “module”
zu package.json hinzufügen, wird Node mitgeteilt , dass Sie ES2015-Module verwenden, wodurch der Fehler behoben werden soll. Anschließend müssen Sie Typescript anweisen , diesen Modultyp durch Festlegen“module”: “es2015”
anstelle von“commonjs”
tsconfig.json zu generieren.Dies führt jedoch zu einem Problem mit dem aktuellen Code, da Sie zwar eine ES6-
import {}
Anweisung verwenden, diese jedoch mit der CommonJS-module.exports = {}
Syntax exportieren und der ES- Modullader von Node ein Problem damit hat. Es gibt zwei Möglichkeiten, damit umzugehen:module.exports
aber weisen Sie Node an, diese Datei als commonJS zu interpretieren, indem Sie ihr die Erweiterung .cjs geben .export function execute(…)..
Die erste Option könnte etwas knifflig werden, da der Compiler .js-Dateien ausgibt und Sie sie (soweit ich weiß) ständig in .cjs ändern müssen. Mit der zweiten Option sollten Sie in der Lage sein, die Datei mit Node auszuführen (einschließlich des Flags --experimental-modules für Versionen <13.8).
Wenn Sie unbedingt commonJS verwenden müssen, ist es möglicherweise besser, die Typdefinitionen für Node: @ types / node zu installieren und den Import in das commonJS-Format zu ändern:
require('abc')
und die restlichen Einstellungen unverändert zu lassen (obwohl Sie "type" hinzufügen können). : "Commonjs" zu package.json, um explizit zu sein).quelle