не может запустить скомпилированную программу машинописного текста с использованием разрешения модуля

Я пытаюсь скомпилировать следующий файл typscript

import { magic } from 'lib/magic';

magic();

Файловая структура:

./src/
     main.ts
     lib/
         a/magic.ts
         b/magic.ts

Внутри tsconfig.json я карта lib/magic в правый файл следующим образом

{
    "compilerOptions": {
        "target": "esnext",
        "module": "commonjs",
        "outDir": "./dist",
        "baseUrl": ".",
        "paths": {
            "lib/*": [ "src/lib/a/*" ]
        }
    },
    "include": [ "./src/**/*.ts" ],
    "exclude": [ "./node_modules" ]
}

Это то, что paths раздел, который отображает этот импорт lib/magic к ./src/lib/a/magic.ts.

Итак, я могу скомпилировать следующим образом

$> tsc -p ./tsconfig-a.json

Он производит вывод в dist. Однако, когда я пытаюсь запустить его

$> node ./dist/main.js
internal/modules/cjs/loader.js:626
    throw err;
^

Error: Cannot find module 'lib/magic'
Require stack:
...

Это имеет смысл, потому что в dist нет такой вещи, как lib/magic. Есть предложения, как это исправить?

1 ответ

Пока кто-нибудь не докажет, что я неправ, вот мои выводы.

Вот проблема, в которой утверждается, что все это на самом деле ожидаемое поведение.

Таким образом, вам в основном нужно исправить это на втором этапе. В моем случае я хочу сделать 2 сборки, одну дляa и один для b. Самый простой способ исправить это - заставить его работать по умолчанию дляa следующим образом

import { magic } from './lib/a/magic';

magic();

Затем построить b и замените этот путь следующим образом

sed -e 's/lib\/a/lib\/b/' ./dist/main.js > ./dist/main-node.js

В моем случае одна версия была для NodeJs, а другая - для браузера, поэтому мне также нужно было добавить .jsрасширение. На всякий случай, если кому-то интересно, вот команда

$> echo "import { magic } from  './lib/a/magic';" | sed "s#^\(import[^']*\)'\([^']*\)#\1 '\2.js#g" 

Пожалуйста, дайте мне знать, если у вас есть лучшее решение, потому что все это кажется немного взломанным

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