运行 使用 pm2 使用 tsconfig-paths 构建打字稿

Run typescript build with tsconfig-paths using pm2

我正在尝试 运行 在生产中使用 tsconfig-paths 构建(.js 文件)打字稿,运行使用路径打字稿没有问题。就在 运行使用 pm2 构建生产环境时。

我试过:

apps: [
{
  name: 'app',
  script: './dist/index.js',
  node_args: '-r ts-node/register -r tsconfig-paths/register',
},

],

TLDR:如果我假设你 运行 info *the* 对 tsconfig 的常见误解,你可以尝试:

{
  apps: [
  {
    name: 'app',
    script: './dist/index.js',
    node_args: '-r ts-node/register -r tsconfig-paths/register',
    env: {
      "TS_NODE_BASEURL": "./dist"
    }
  },
}

解释:

Typescript 允许我们指定路径别名,这样我们就不必使用像 ../../../../config 这样丑陋的相对路径。要使用此功能,您通常需要这样的 tsconfig.json

...
  "outDir": "./dist",
  "baseUrl": "./src", /* if your code sits in the /src directory */
   "paths": {
     "@/*": ["*"]
   }, 
...

现在您可以执行以下操作:

import config from "@/config";

编译成功。在编译期间,请求的模块位于 src 目录中。然而:

$ node -r tsconfig-paths/register dist/index.js
Failure! Cannot find module '@/config'

这是为什么?因为在 运行 时配置不再位于 ./src 内,而是可以在 ./dist.

中找到

那么我们该如何处理呢? 幸运的是 tsconfig-paths 允许我们用 TS_NODE_BASEURL env:

覆盖 baseUrl
$ TS_NODE_BASEURL=./dist node -r tsconfig-paths/register dist/index.js
Success!