reactjs - הקמת מונורפו עבור פרויקט React/Next/express/typescript עם lerna ו- pm2


אני עובד על פרויקט ואני רוצה לבנות עבורו ארכיטקטורת מונורפו.

כרגע יש לי שני חבילות:

  • front/ מכיל את אפליקציית React(next) שלי עם TypeScript
  • server/ הוא אפליקציית Express המשתמשת גם ב-TypeScript

הנה ארכיטקטורת הפרויקט שלי :

    ├── 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), המצב של שני התהליכים מוצג כעצור. ואני לא מבין למה ..

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);'

אתה יכול לעזור לי להבין את השגיאה הזו? כל עזרה תוערך מאוד!

תודה,

מקסים