PM2守护babel-node

如果你的nodejs项目使用了最新的语法,比如 importexport 代替了 commonjsrequire,那么使用pm2守护进程的时候可能会遇到一些问题。交代一下背景,我的node项目使用了import,文件名是.js而不是.mjs,所以无法直接使用 node 命令运行入口文件,如果要用 PM2 守护进程,需要指定babel-node解析器,可以采用下面的配置:

// pm2.json
{
  "name": "acl",
  "script": "./build/server.js", //脚本位置
  "exec_interpreter": "./node_modules/.bin/babel-node", // 指定解析器
  "interpreter_args": "--config-file ./node-babel.js", // 传给解析器的参数
  "exec_mode": "fork", // 自定义解析器和npm只能使用fork模式,无法使用集群
  "error_file": "./logs/error.log",
  "out_file": "./logs/console.log",
  "pid_file": "./logs/pid_file.pid",
  "log_date_format": "YYYY-MM-DD HH:mm:ss",
  "combine_logs": true,
  "merge_logs": true,
  "env": {
    "NODE_ENV": "qa"
  }
}

简单总结下:
pm2的集群模式不支持自定义解析器,其实npm脚本也无法使用集群模式,只是运行npm脚本无需指定解析器,默认的node是可以运行的。如果非要运行包含 importexport 的node文件,又要支持集群模式,那么需要打包你的程序,可以使用 webpack 构建。

如有错误,欢迎评论!

原文地址:https://www.cnblogs.com/idiv/p/12598077.html