我正在尝试使用生产中的 tsconfig-paths 运行 typescript 的构建(.js 文件),使用路径运行 typescript 没有问题。就在使用 pm2 在生产环境中运行构建时。
我试过了:
apps: [
{
name: 'app',
script: './dist/index.js',
node_args: '-r ts-node/register -r tsconfig-paths/register',
},
],
我正在尝试使用生产中的 tsconfig-paths 运行 typescript 的构建(.js 文件),使用路径运行 typescript 没有问题。就在使用 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!