PM2中没法开启ES6的解决方案

背景

用于项目中使用了阿里云的OSS功能,而阿里官方的Node.js类库(ali-oss)是基于ES6写的,所以应用须要在ES6环境下运行。node

Node

在本地(MBP)上,经过修改package.json文件中的script来更改环境,代码以下:es6

"scripts": {
    "start": "node --harmony server.js"
  },

添加--harmony后,经过nodemon运行没有问题。json

PM2

将应用经过PM2部署到阿里云的ECS(CentOS)中的时候,一直报错。提示没法正确运行,错误显示以下:segmentfault

tegaoya-1 (err): /home/eee/www/tegaoya/production/source/node_modules/ali-oss/lib/client.js:295
tegaoya-1 (err): proto.request = function* (params) {
tegaoya-1 (err):                         ^
tegaoya-1 (err): SyntaxError: Unexpected token *
tegaoya-1 (err):     at Module._compile (module.js:439:25)
tegaoya-1 (err):     at Object.Module._extensions..js (module.js:474:10)
tegaoya-1 (err):     at Module.load (module.js:356:32)
tegaoya-1 (err):     at Function.Module._load (module.js:312:12)
tegaoya-1 (err):     at Function._load (/usr/lib/node_modules/pm2/node_modules/pmx/lib/transaction.js:62:21)
tegaoya-1 (err):     at Module.require (module.js:364:17)
tegaoya-1 (err):     at require (module.js:380:17)
tegaoya-1 (err):     at Object.<anonymous> (/home/eee/www/tegaoya/production/source/libs/AliOssStorage.js:4:11)
tegaoya-1 (err):     at Module._compile (module.js:456:26)
tegaoya-1 (err):     at Object.Module._extensions..js (module.js:474:10)
tegaoya-1 (err):     at Module.load (module.js:356:32)
tegaoya-1 (err):     at Function.Module._load (module.js:312:12)
tegaoya-1 (err):     at Function._load (/usr/lib/node_modules/pm2/node_modules/pmx/lib/transaction.js:62:21)
tegaoya-1 (err):     at Module.require (module.js:364:17)
tegaoya-1 (err):     at require (module.js:380:17)
tegaoya-1 (err):     at Object.<anonymous> (/home/eee/www/tegaoya/production/source/app_server/controllers/upload.js:3:21)

给PM2添加ES6的支持

经过Google,发现给PM2配置ES6支持的方法以下:bash

命令行

命令行中添加--node-args="--harmony"便可让应用以ES6运行:app

$ pm2 start my_app.js --node-args="--harmony"

配置文件

在配置文件(ecosystem.json)中,添加node_args属性来添加ES6的支持:curl

[{
  "name" : "ES6",
  "script" : "es6.js",
  "node_args" : "--harmony"
}]

问题

可是,在按照以上配置操做后,依然没法启用ES6的支持,仍是报错。在查看node的版本后,发现了问题所在:ui

$ node -v
v0.10.*

好吧,看来是CentOS系统中yum自带的node版本不支持ES6,因而着手升级:阿里云

卸载node

经过命令:url

$ yum remove nodejs

卸载老版本的nodejs

安装新版本

按照官方的文档,经过以下命令安装4.*的LTS版本(root下):

curl --silent --location https://rpm.nodesource.com/setup_4.x | bash -
yum -y install nodejs

安装结束后,确认版本:

$ node -v
v4.4.4

尝试

再次尝试经过PM2部署,提示成功,经过pm2 logs查看日志,没有报错。问题解决!

相关文章
相关标签/搜索