Невозможно использовать оператор импорта вне модуля в 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 ответ

  1. Убедитесь, что у вас есть "esModuleInterop": trueв обоих tsconfigs - в mypackage и в зависимом проекте , в который вы устанавливаете mypackage .

  2. добавлять #!ts-nodeповерх файла script.ts

  3. нет необходимости делать ts-node ./node-modules/.bin/scriptделать npx scriptвместо этого (в каталоге зависимого проекта , где вы устанавливаете mypackage)

Другие вопросы по тегам