我试图在生产中使用tsconfig路径运行类型记录的构建(.js文件),我在使用路径运行类型记录时没有问题。就在使用pm2在生产上运行构建时。
我试过:
apps: [
{
name: 'app',
script: './dist/index.js',
node_args: '-r ts-node/register -r tsconfig-paths/register',
},],
发布于 2022-01-28 19:59:20
TLDR:如果我假设您运行info *对于tsconfig的常见误解,您可以尝试:
{
apps: [
{
name: 'app',
script: './dist/index.js',
node_args: '-r ts-node/register -r tsconfig-paths/register',
env: {
"TS_NODE_BASEURL": "./dist"
}
},
}解释:
类型记录允许我们指定路径别名,这样我们就不必使用像../../../../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-path允许我们用baseUrl env覆盖TS_NODE_BASEURL:
$ TS_NODE_BASEURL=./dist node -r tsconfig-paths/register dist/index.js
Success! https://stackoverflow.com/questions/70803780
复制相似问题