#typescript #next.js #ts-node
Вопрос:
У меня есть проект NextJS/Typescript, в котором я хочу добавить скрипт CLI, который должен обрабатывать некоторые файлы на сервере.
К сожалению, мне не удается запустить сценарий.
Пример сценария src/cli.ts
:
console.log("Hello world");
// Process files
Я попытался запустить сценарий с помощью:
ts-node src/cli.ts
Но я получаю это сообщение об ошибке:
src/cli.ts:1:1 - error TS1208: 'cli.ts' cannot be compiled under '--isolatedModules' because it is considered a global script file. Add an import, export, or an empty 'export {}' statement to make it a module.
Когда я добавляю пустой оператор » экспорт {}», я получаю это сообщение об ошибке:
(node:15923) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
Насколько я знаю, сейчас невозможно использовать NextJS с модулями ES.
Есть ли другой способ запустить скрипт в проекте NextJS? Может быть, мне нужно изменить конфигурацию веб-пакета?
Я использую последние версии: Next 11, Typescript 4.3, узел 14.18, ts-узел 10.13 по умолчанию tsconfig.json
, package.json
.
Ответ №1:
Запустите это вместо этого:
npx ts-node --skip-project src/cli.ts
Ссылка: https://github.com/TypeStrong/ts-node#tsconfig
--skip-project
Флаг не будет разрешать/загружать ваши tsconfig.json
и, таким образом, игнорировать "isolatedModules": true
требуемые Next.js.
Вы также можете создать отдельный tsconfig
файл для ts-node
--project [path]
этой опции и использовать его.
Другой способ-переопределить конфигурацию для ts-node
tsconfig.json
себя, как это:
{
"extends": "ts-node/next/tsconfig.json",
"ts-node": {
"compilerOptions": {
// compilerOptions specified here will override those declared below,
// but *only* in ts-node. Useful if you want ts-node and tsc to use
// different options with a single tsconfig.json.
"isolatedModules": false
}
},
"compilerOptions": {
// typescript options here
}
}
Ссылка: https://github.com/TypeStrong/ts-node#via-tsconfigjson-recommended