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查看日誌,沒有報錯。問題解決!

相關文章
相關標籤/搜索