#node.js #typescript #es6-modules
Вопрос:
Я хочу использовать модули ES6 в своем приложении.
Если я установлю "module": "es2020"
или "module": "esnext"
получу ошибку To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
Поэтому я устанавливаю "type" : "module"
в своем package.json
и получаю сообщение об ошибке, Unknown file extension ".ts"
поэтому я не могу его использовать. Я тоже не могу использовать .mjs
расширение в машинописном тексте.
Поэтому я установил "module": "commonjs"
"esModuleInterop": true
и могу использовать модули ES6 с машинописным текстом. Но потом я хочу использовать import.meta
, и я получаю ошибку, в которой говорится, что the 'import.meta' meta-property is only allowed when the '--module' option is 'es2020', 'esnext', or 'system'.
Я пробежал полный круг. Существует ли конфигурация, которая позволит мне использовать машинопись с узлом без компромиссов? Это только import.meta
сейчас, но я не уверен, какие еще функции будут заблокированы при такой настройке.
Ответ №1:
Я решил эту проблему с помощью экспериментальной функции. Вместо запуска команды ts-node для запуска кода, который я использовал:
TS_NODE_PROJECT='./tsconfig.json' node --loader ts-node/esm ./src/index.ts
Это позволяет мне использовать "type": "module"
и "module": "esnext"
вместе с машинописным текстом, и у меня есть как импорт ES6, так и доступ к import.meta
нему .
Я получаю предупреждение в консоли о том, что эта функция является экспериментальной и может измениться в любое время, поэтому полезно иметь это в виду и пересмотреть, стоит ли это того.
Комментарии:
1. я довольно новичок в этом, но я не думаю
tsconfig
"type"
, что он вообще примет ключ. ты это имел в виду"types": [...]
?