reactjs - 使用 lerna 和 pm2 为 React / Next / express / typescript 项目设置 monorepo
问题描述
我正在做一个项目,我想为它构建一个 Monorepo 架构。
现在我有两个包:
- front/ 包含我的带有 typescript 的 React(next) 应用程序
- server/ 也是一个使用打字稿的快速应用程序
这是我的project architecture
:
├── Makefile
├── ecosystem.config.js
├── lerna.json
├── package-lock.json
├── package.json
├── packages
│ ├── front
│ │ ├── components
│ │ ├── interfaces
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── pages
│ │ ├── tsconfig.json
│ │ ├── utils
│ │ └── yarn.lock
│ └── server
│ ├── package.json
│ ├── src
│ │ ├── app.ts
│ │ └── index.ts
│ ├── tsconfig.json
│ └── yarn.lock
└── yarn.lock
该文件ecosystem.config.js
是我描述所有 pm2 进程的地方:
module.exports = {
apps: [
{
name: "Front",
cwd: "./packages/front",
script: "yarn",
args: "run dev",
interpreter: "bash",
instances: 1,
max_memory_restart: "1G",
env: {
NODE_ENV: "development",
REACT_APP_API_URL: "http://localhost:8080",
},
env_production: {
NODE_ENV: "production",
}
},
{
name: "Server",
cwd: "./packages/server",
script: "yarn",
args: "run dev",
instances: 1,
interpreter: "bash",
autorestart: true,
watch: true,
max_memory_restart: "1G",
env: {
NODE_ENV: "development",
PORT: "8080",
},
env_production: {
NODE_ENV: "production",
PORT: "8080",
}
}
]
}
这是我的lerna.json
{
"npmClient": "yarn",
"packages": [
"packages/*"
],
"useWorkspaces": true,
"version": "0.0.0"
}
Makefile
我在哪里设置我的所有命令:
## ------------
## Setup
## ------------
install:
yarn install
npx lerna bootstrap
## ------------
## Dev
## ------------
start:
npx pm2 start
stop:
npx pm2 delete all
当我运行make start
(npx pm2 start) 命令时,2 个进程状态显示为已停止。我不明白为什么..
npx pm2 start
[PM2][WARN] Applications Front, Server not running, starting...
[PM2] App [Front] launched (1 instances)
[PM2] App [Server] launched (1 instances)
┌─────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼───────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ Front │ default │ 0.35.3 │ fork │ 10947 │ 0 │ 1 │ stopped │ 0% │ 0b │ max… │ disabled │
│ 1 │ Server │ default │ 0.35.3 │ fork │ 10949 │ 0 │ 1 │ stopped │ 0% │ 0b │ max… │ enabled │
└─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
这就是我运行后得到的npx pm2 logs
:
[TAILING] Tailing last 15 lines for [all] processes (change the value with --lines option)
/home/maximeoger/.pm2/pm2.log last 15 lines:
PM2 | 2020-11-17T16:57:42: PM2 log: App [Front:0] starting in -fork mode-
PM2 | 2020-11-17T16:57:42: PM2 log: App [Front:0] online
PM2 | 2020-11-17T16:57:42: PM2 log: App [Server:1] exited with code [2] via signal [SIGINT]
PM2 | 2020-11-17T16:57:42: PM2 log: App [Server:1] starting in -fork mode-
PM2 | 2020-11-17T16:57:42: PM2 log: App [Server:1] online
PM2 | 2020-11-17T16:57:42: PM2 log: App [Front:0] exited with code [2] via signal [SIGINT]
PM2 | 2020-11-17T16:57:42: PM2 log: App [Front:0] starting in -fork mode-
PM2 | 2020-11-17T16:57:42: PM2 log: App [Front:0] online
PM2 | 2020-11-17T16:57:42: PM2 log: App [Server:1] exited with code [2] via signal [SIGINT]
PM2 | 2020-11-17T16:57:42: PM2 log: App [Server:1] starting in -fork mode-
PM2 | 2020-11-17T16:57:42: PM2 log: App [Server:1] online
PM2 | 2020-11-17T16:57:42: PM2 log: App [Front:0] exited with code [2] via signal [SIGINT]
PM2 | 2020-11-17T16:57:42: PM2 log: Script /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn had too many unstable restarts (16). Stopped. "errored"
PM2 | 2020-11-17T16:57:42: PM2 log: App [Server:1] exited with code [2] via signal [SIGINT]
PM2 | 2020-11-17T16:57:42: PM2 log: Script /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn had too many unstable restarts (16). Stopped. "errored"
/home/maximeoger/.pm2/logs/Front-out-0.log last 15 lines:
/home/maximeoger/.pm2/logs/Server-out-1.log last 15 lines:
/home/maximeoger/.pm2/logs/Front-error-0.log last 15 lines:
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 7: var: command not found
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 8: syntax error near unexpected token `('
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 8: `var majorVer = parseInt(ver.split('.')[0], 10);'
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 3: /bin: Is a directory
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 4: /bin: Is a directory
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 5: use strict: command not found
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 7: var: command not found
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 8: syntax error near unexpected token `('
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 8: `var majorVer = parseInt(ver.split('.')[0], 10);'
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 3: /bin: Is a directory
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 4: /bin: Is a directory
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 5: use strict: command not found
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 7: var: command not found
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 8: syntax error near unexpected token `('
0|Front | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 8: `var majorVer = parseInt(ver.split('.')[0], 10);'
/home/maximeoger/.pm2/logs/Server-error-1.log last 15 lines:
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 7: var: command not found
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 8: syntax error near unexpected token `('
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 8: `var majorVer = parseInt(ver.split('.')[0], 10);'
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 3: /bin: Is a directory
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 4: /bin: Is a directory
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 5: use strict: command not found
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 7: var: command not found
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 8: syntax error near unexpected token `('
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 8: `var majorVer = parseInt(ver.split('.')[0], 10);'
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 3: /bin: Is a directory
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 4: /bin: Is a directory
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 5: use strict: command not found
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 7: var: command not found
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 8: syntax error near unexpected token `('
1|Server | /home/maximeoger/.nvm/versions/node/v15.2.0/bin/yarn: line 8: `var majorVer = parseInt(ver.split('.')[0], 10);'
你能帮我理解这个错误吗?任何帮助将不胜感激!
谢谢,
马克西姆