0

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

我试过了:

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

],

4

1 回答 1

1

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_BASEURLenv 覆盖 baseUrl:

$ TS_NODE_BASEURL=./dist node -r tsconfig-paths/register dist/index.js
Success! 
于 2022-01-28T19:59:20.533 回答