пути из tsconfig. json не работает после tsc - PullRequest
0 голосов
/ 21 апреля 2020

В моем проекте 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"
    }
  ]
}
...