не может запустить скомпилированную программу машинописного текста с использованием разрешения модуля
Я пытаюсь скомпилировать следующий файл 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"
Пожалуйста, дайте мне знать, если у вас есть лучшее решение, потому что все это кажется немного взломанным