Я пытаюсь запустить один файл TypeScript внутри монорепозитория NX
, используя ts-node
, но продолжаю получать ошибки при импорте локальных модулей.
npx ts-node apps/sanity/src/sanity.ts
(node:22816) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
Cannot use import statement outside a module
Установка "type": "module"
в package.json
в корне рабочей области, а затем повторный запуск команды приводит к этой ошибке:
npx ts-node apps/sanity/src/sanity.ts
Unknown file extension ".ts" for /Users/maverik/Projects/project-zed/apps/sanity/src/sanity.ts
at new NodeError (internal/errors.js:322:7)
at Loader.defaultGetFormat [as _getFormat] (internal/modules/esm/get_format.js:71:15)
at Loader.getFormat (internal/modules/esm/loader.js:105:42)
at Loader.getModuleJob (internal/modules/esm/loader.js:243:31)
at async Loader.import (internal/modules/esm/loader.js:177:17)
at async Object.loadESM (internal/process/esm_loader.js:68:5)
at async handleMainPromise (internal/modules/run_main.js:59:12) {
code: 'ERR_UNKNOWN_FILE_EXTENSION'
Как я могу запустить один файл машинописного текста, используя ts-node
внутри монорепозитория NX?
Я добавил в проект новый файл tsconfig.demo.json
со следующими параметрами:
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
"types": ["node"],
"module": "ESNext", // this option
"moduleResolution": "Node", // this option
"esModuleInterop": true // this option
},
"ts-node": {
"esm": true, // this option
"experimentalSpecifierResolution": "node". // this option
},
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"],
"include": ["src/**/*.ts"]
}
А затем запустил эту команду:
npx ts-node --project apps/sanity/tsconfig.demo.json apps/sanity/src/main.ts
Это сработало, но затем я столкнулся с проблемами, когда
ts-node
не обрабатывалpaths
из файла tsconfig. Поэтому, если вы используете общие библиотеки внутри автономного файла, который хотите запустить, вам может потребоваться дополнительная настройка. В итоге я добавил еще одну запись в файлproject.json
, скопировал разделыbuild
иserve
, переименовал их и обновил основной файл. Это работает для проблемы, которую я решал.