资讯专栏INFORMATION COLUMN

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

Eminjannn / 1768人阅读

摘要:背景用于项目中使用了阿里云的功能,而阿里官方的类库是基于写的,因此应用需要在环境下运行。在将应用通过部署到阿里云的中的时候,一直报错。

背景

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

Node

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

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

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

PM2

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

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. (/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. (/home/eee/www/tegaoya/production/source/app_server/controllers/upload.js:3:21)
给PM2添加ES6的支持

通过Google,发现给PM2配置ES6支持的方法如下:

命令行

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

$ pm2 start my_app.js --node-args="--harmony"
配置文件

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

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

但是,在按照以上配置操作后,依然无法启用ES6的支持,还是报错。在查看node的版本后,发现了问题所在:

$ node -v
v0.10.*

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

卸载node

通过命令:

$ 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查看日志,没有报错。问题解决!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45646.html

相关文章

  • 深入理解Node.js 进程与线程(8000长文彻底搞懂)

    摘要:在单核系统之上我们采用单进程单线程的模式来开发。由进程来管理所有的子进程,主进程不负责具体的任务处理,主要工作是负责调度和管理。模块与模块总结无论是模块还是模块,为了解决实例单线程运行,无法利用多核的问题而出现的。 前言 进程与线程是一个程序员的必知概念,面试经常被问及,但是一些文章内容只是讲讲理论知识,可能一些小伙伴并没有真的理解,在实际开发中应用也比较少。本篇文章除了介绍概念,通过...

    Harpsichord1207 评论0 收藏0
  • socket.io搭配pm2(cluster)集群解决方案

    摘要:对应的,服务端返回第六个请求为方式的请求,用来获取服务端对第五个请求的响应。但是,官方的解决方案是每个进程的服务器创建不同端口的服务器,专注用于握手和升级,由做握手请求的代理。 可以收藏我的博客 socket.io与cluster 在线上系统中,需要使用node的多进程模型,我们可以自己实现简易的基于cluster模式的socket分发模型,也可以使用比较稳定的pm2这样进程管理工具。...

    娣辩孩 评论0 收藏0
  • 全栈式开发多人在线聊天室

    摘要:技术栈觉得好的欢迎点个。前端后端部署演示全栈式的开发多人在线聊天室项目只适配了移动端,请使用浏览器的手机视图查看。之前删除了一个文件,但是没有删除中的对应值。编译时会报上面的错误。 技术栈 觉得好的欢迎点个star ^_^。 前端:Express & EJS & ES6 & Less & Gulp 后端:Express & SocketIO & MongoDB & REST API ...

    Chiclaim 评论0 收藏0
  • es6之深入理解promise

    摘要:形式非必须,也非必须调用把用函数表示在调用的时候用函数代码更加同步化三是什么异步操作的终极解决方案写法四总结不管用还是用还是用,都保证你写的的返回值是一个对象 一、promise入门 1. Promise对象是什么 回调函数的另一种原生实现,比之前回调函数的写法机构清晰,功能强大, 2.以前回调这么写 function a(fn){ let h = 1; setTime...

    luckyw 评论0 收藏0
  • 阿里云服务器部署 nodejs + mongodb + nginx 反向代理 + https配置 s

    摘要:感谢老师,老师的慕课网教程购买阿里云服务器及域名终端连接阿里云服务器环境输入密码购买时的密码如果出现这个问题的解决方案解决方法查看硬盘挂在情况如果有数据盘的情况下查看硬盘使用情况通过设置快捷登录权限,可以增加几个拥有权限的用户下查 感谢 Scott 老师,Scott老师的慕课网教程 https://coding.imooc.com/clas... 1. 购买阿里云服务器及域名 2. ...

    张春雷 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<