В моем проекте Express я импортирую из путей типа @common/foo
. Благодаря paths
в tsconfig.json
это просто псевдоним ../common/src/foo
. Это замечательно и работает в разработке с этим скриптом в nodemon.json
:
{
"watch": ["src", "../common/src"],
"ext": "ts",
"ignore": ["src/public"],
"exec": "ts-node -r tsconfig-paths/register src/index.ts"
}
Проблема в том, что я не могу заставить его работать в производственном режиме.
Я строю проект с tsc
, и если я проверю сгенерированные файлы, они импортируют данные из @common/
, а не из ../common/src/
. Сначала я подумал, что все в порядке, поскольку tsconfig-paths
работает во время выполнения, поэтому мне просто нужно включить его в сценарий start
следующим образом:
node -r tsconfig-paths/register dist/index.js
К сожалению, это не сработало, и я получаю эти Cannot find module '@common/foo
сообщения об ошибках в консоли.
В чем проблема? Я неправильно настроил?
Мой package.json
(отброшены все нерелевантные части):
{
"main": "index.js",
"scripts": {
"start": "cross-env NODE_ENV=prod node dist/index.js",
"build": "rimraf ./dist/ && cross-env NODE_ENV=prod tsc"
},
"dependencies": {
"express": "^4.17.1"
},
"devDependencies": {
"@types/express": "^4.17.4",
"@types/node": "^13.11.0",
"cross-env": "^6.0.3",
"rimraf": "^3.0.2",
"ts-node": "^8.8.2",
"tsconfig-paths": "^3.9.0",
"typescript": "^3.8.3"
}
}
Мой tsconfig.json
(пропущены все нерелевантные части):
{
"compilerOptions": {
"module": "commonjs",
"baseUrl": "./",
"outDir": "dist",
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"noImplicitAny": false,
"target": "es6",
"emitDecoratorMetadata": true,
"moduleResolution": "node",
"importHelpers": true,
"types": [
"node"
],
"typeRoots": [
"node_modules/@types"
],
"paths": {
"@common/*": [
"../common/src/*"
]
}
},
"include": [
"./src/**/*.ts"
],
"exclude": [
"./src/dist/"
],
"references": [
{
"path": "../common"
}
]
}