У меня есть файл .ts в приложении node js (последняя версия node.js для 07.10.19) с импортом узла-модуля без экспорта по умолчанию. Я использую эту конструкцию: import { Class } from 'abc';
Когда я запускаю код, у меня есть эта ошибка: Cannot use import statement outside a module
.
В сети я вижу много решений для этой проблемы (для .js), но это не помогает мне, возможно, потому что у меня есть машинописный файл. Вот мой код:
import { Class } from 'abc';
module.exports = { ...
execute(a : Class ,args : Array<string>){ ...
Вот мой tsconfig.json:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true
}
}
typescript
ecmascript-6
Zerumi
источник
источник
import
выписка первой строкой в вашем файле?require
vsimport
) вы используете. Просто чтобы дать вам представление о том, насколько это сложно, у Node есть некоторая документация оimport
противостоянииrequire
и о том, как заставить их работать вместе.module.exports
синтаксис, вы, вероятно, не в модуле ES6.execute(a : abc.Class...
Ответы:
Добавление
“type”: “module”
в package.json скажет Node, что вы используете модули ES2015, которые должны избавиться от ошибки, но тогда вам нужно будет сказать Typescript для генерации этого типа модуля, установив“module”: “es2015”
вместо“commonjs”
tsconfig.json.Это, однако, вызывает проблему с текущим кодом, потому что, хотя вы используете оператор ES6,
import {}
вы экспортируете с использованиемmodule.exports = {}
синтаксиса commonJS , и загрузчик модуля ES Node будет иметь проблемы с ним. Есть два способа справиться с этим:module.exports
но скажите Node интерпретировать этот файл как commonJS, дав ему расширение .cjs .export function execute(…)..
Первый вариант может быть немного сложным, потому что компилятор будет выводить файлы .js, и вам придется все время менять его на .cjs (насколько я знаю). Со вторым вариантом вы сможете запускать файл с Node (включая флаг --experimental-modules для версий <13.8).
Если вам абсолютно необходимо использовать commonJS, возможно, лучше установить определения типов для Node: @ types / node и изменить импорт на формат commonJS:
require('abc')
и оставить остальные настройки без изменений (хотя вы можете добавить «type»). : «Commonjs» в package.json должен быть явным).источник