运行 使用 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!
我正在尝试 运行 在生产中使用 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:
$ TS_NODE_BASEURL=./dist node -r tsconfig-paths/register dist/index.js
Success!