Skip to content

pm2部署nuxt

复制所需文件到服务器

打包:npm run build(执行的:nuxt build)

一般包含:.nuxtstaticenv.js(环境配置,没有则忽略)nuxt.config.jspackage.jsonpackage-lock.json(锁定依赖包版本号)ecosystem.config.js(pm2配置文件)

安装依赖:npm i --> node_modules

注意

npx nuxt 跑起来的是 development(开发) 模式.

npx nuxt start 跑起来的是 product(生产) 模式.

WARNING

如果先nuxt build后,再跑development模式,会把构建好的.nuxt/dist目录干掉。要跑生产模式需要重新构建一次!!!

方案一:npm脚本

js
// -- start 表示会把'start'这个参数传递给./node_modules/nuxt/bin/nuxt.js这个脚本。对应ecosystem.config.js中args字段配置
// --name为项目名称
"script": {
    "start": "pm2 start ./node_modules/nuxt/bin/nuxt.js --name \"project-xxx\" -- start",
}

方案二:配置文件

js
// package.json
"scripts": {
  // ecosystem.config.js可不指定
  // 使用不同命令部署不同环境(--env) 【运行时可以不配置环境变量,使用系统的环境变量】
  "uat": "pm2 start ecosystem.config.js --env uat",
  "prod": "pm2 start ecosystem.config.js --env prod"
}
js
// ecosystem.config.js
module.exports = {
  apps: [
    {
      name: 'project-xxx',
      exec_mode: 'cluster', // instances为1时同fork
      instances: '1',
      script: './node_modules/nuxt/bin/nuxt.js',
      // args为拼接上面的script的命令行参数
      args: 'start', // 重要===生产模式(注释掉这行启动后为development模式;注意有坑,看下面【坑】!!!)===
      max_memory_restart: '1024M',
      log_date_format: 'YYYY-MM-DD HH:mm:ss', // 日志格式, 路径: cd ~/.pm2/logs
      env: {
        NODE_ENV: 'production' // process.env.NODE_ENV
      },
      // uat后缀对应package.json中script中的--env参数
      env_uat: {
        CUR_ENV: 'uat' // process.env.CUR_ENV
      },
      // prod后缀对应package.json中script中的--env参数
      env_prod: {
        CUR_ENV: 'prod' // process.env.CUR_ENV
      }
    }
  ]
}
// 环境配置参考:https://www.cnblogs.com/mmzuo-798/p/11139352.html

pm2部署nuxt优缺点

优点

  1. 简单易用, 对前端开发人员友好
  1. 支持热重启、负载均衡、自带监控、内存控制等

缺点

每次部署nuxt服务, 从git拉取代码后需要重新安装依赖与打包, 较为繁琐。

pm2守护npm指令

TIP

例如守护npm指令:npm run prod

pm2命令:pm2 start npm --name "chatgpt-web" -- run prod 【这里的prod为package.json中的script指令】