J'ai un fichier .ts dans l'application node js (dernière version de node.js pour le 07.10.19) avec l'importation du module node sans l'exportation par défaut. J'utiliser cette construction: import { Class } from 'abc';
Quand je lance le code, j'ai cette erreur: Cannot use import statement outside a module
.
Dans le réseau, je vois de nombreuses solutions à ce problème (pour .js), mais cela ne m'aide pas, peut-être parce que j'ai un fichier dactylographié. Voici mon code:
import { Class } from 'abc';
module.exports = { ...
execute(a : Class ,args : Array<string>){ ...
Voici mon tsconfig.json:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true
}
}
typescript
ecmascript-6
Zerumi
la source
la source
import
énoncé est-il la première ligne de votre dossier?require
vsimport
) que vous utilisez. Juste pour vous donner une idée de la complexité de cela, Node a de la documentation surimport
vsrequire
et comment les faire fonctionner ensemble.module.exports
syntaxe, vous n'êtes probablement pas dans un module ES6.execute(a : abc.Class...
Réponses:
L'ajout
“type”: “module”
à package.json indiquera à Node que vous utilisez des modules ES2015, ce qui devrait supprimer l'erreur, mais vous devrez ensuite dire à Typescript de générer ce type de module en définissant“module”: “es2015”
plutôt que“commonjs”
dans tsconfig.json.Cela provoque cependant un problème avec le code actuel car, bien que vous utilisiez une
import {}
instruction ES6 , vous exportez à l'aide de lamodule.exports = {}
syntaxe commonJS , et le chargeur de module ES de Node aura un problème avec celle-ci. Il y a deux façons de le gérer:module.exports
mais dites à Node d'interpréter ce fichier comme commonJS en lui donnant l'extension .cjs .export function execute(…)..
La première option pourrait devenir un peu délicate car le compilateur produira des fichiers .js et vous devrez le changer en .cjs tout le temps (pour autant que je sache). Avec la deuxième option, vous devriez pouvoir exécuter le fichier avec Node (y compris l'indicateur --experimental-modules pour les versions <13.8).
Si vous devez absolument utiliser commonJS, il est peut-être préférable d'installer les définitions de type pour Node: @ types / node et de modifier l'importation au format commonJS:
require('abc')
et de conserver les autres paramètres tels qu'ils sont (bien que vous puissiez ajouter «type» : «Commonjs» à package.json pour être explicite).la source