Невозможно использовать оператор импорта вне модуля в node_modules
у меня есть
script.ts
файл:
import path from 'path'
Если я убегу
ts-node script.ts
, он отлично работает.
Теперь я перемещаю файл в
./node-modules/.bin/script.ts
. Если я сбегу
ts-node ./node-modules/.bin/scripts.ts
не работает:
(node:38262) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
xxx/node_modules/.bin/script.ts:1
import path from 'path'
^^^^^^
SyntaxError: Cannot use import statement outside a module
at wrapSafe (internal/modules/cjs/loader.js:915:16)
at Module._compile (internal/modules/cjs/loader.js:963:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
at main (/xxx/.nvm/versions/node/v12.22.1/lib/node_modules/ts-node/src/bin.ts:198:14)
at Object.<anonymous> (/xxx/.nvm/versions/node/v12.22.1/lib/node_modules/ts-node/src/bin.ts:288:3)
at Module._compile (internal/modules/cjs/loader.js:999:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
Я пытался поставить
type: module
в моем
package.json
это не работает, и я не могу использовать расширение
.mjs
поскольку это файл машинописного текста.
Как сделать так, чтобы машинописный скрипт работал так же, как и те, что за пределами
node_modules
??
Мой
tsconfig.json
:
{
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": true,
"target": "es6",
"lib": ["es2017"],
"moduleResolution": "node",
"outDir": "dist",
"types": ["node"],
"sourceMap": true
},
"include": ["src/**/*", "./node_modules/bin/script.ts"]
}
1 ответ
Убедитесь, что у вас есть
"esModuleInterop": true
в обоих tsconfigs - в mypackage и в зависимом проекте , в который вы устанавливаете mypackage .добавлять
#!ts-node
поверх файла script.tsнет необходимости делать
ts-node ./node-modules/.bin/script
делатьnpx script
вместо этого (в каталоге зависимого проекта , где вы устанавливаете mypackage)