pm2 + babel-node 遇到的坑
背景:
在项目开发中使用es6语法,在打包时需要转译因此下载了babel/core、babel/node、babel/preset-env。转译完成之后项目可以正常运行。但是用pm2启动项目的时候一直报错,如下图
这是因为用了es6规范的导出/导出。网上查了好多方法,说是将pm2的配置文件中的interpreter配置成babel-node或者将exec_interpreter配置成babel-node。但是修改之后还是报错。
对于网上的说法其实就是将pm2的默认解析器改成babel-node解析器【pm2默认解析器是node】这个并不能说是错误,但是不够全面,后来花费很长时间才找到坑在哪里。
解决办法:【需要两步:网上说的只是第一步】
第一步:将配置文件中的interpreter改成babel-node
第二步:确认配置文件中的exec_mode,确保exec_mode配置项是fork_mode。默认是fork_mode。
注意项:
1、exec_mode:用于配置负载均衡的。它有两个值:fork_mode和cluster_mode。默认是fork_mode。
2、exec_mode:‘cluster_mode’ 模式用于node解析器,如果要改变解析器必须使用‘fork_mode’模式。
3、exec_mode:配置负载均衡是需要用‘cluster_mode’模式,同时需要配置instances【代表开启几个线程】
4、‘cluster_mode’:代表多实例多进程,‘fork_mode’代表单实例多进程