我有一个在使用node或nodemon(例如“ nodemon index.js”)时可以工作的网络服务器。但是,当我尝试使用pm2(“ pm2 start index.js”)时,出现“ SyntaxError:意外的令牌导入”。完整的错误日志如下。我在这里做什么错了?
/usr/local/lib/node_modules/pm2/lib/ProcessContainerFork.js:29
import(process.env.pm_exec_path);
^^^^^^
SyntaxError: Unexpected token import
at new Script (vm.js:51:7)
at createScript (vm.js:136:10)
at Object.runInThisContext (vm.js:197:10)
at Module._compile (internal/modules/cjs/loader.js:618:28)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10)
at Module.load (internal/modules/cjs/loader.js:566:32)
at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
at Function.Module._load (internal/modules/cjs/loader.js:498:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:695:10)
at startup (internal/bootstrap/node.js:201:19)
答案 0 :(得分:10)
遇到同样的问题。
pm2发布了4.2.2版,该版本仅适用于Node 10.x或更高版本,因此:
最好的解决方案是将节点从9.x升级到10.x或更高版本。
在我的情况下,我想坚持使用节点9,因此将pm2的版本固定为4.2.1。
我使用npm在我的Dockerfile中安装pm2:
更改:
RUN npm install -g webpack@4.29.3 pm2
收件人:
RUN npm install -g webpack@4.29.3 pm2@4.2.1
将解决此问题,并允许您继续使用节点9和pm2 4.2.1
如果您以其他方式安装pm2,请发布安装详细信息,我可以建议如何修复。
答案 1 :(得分:4)
将节点升级到v12 (并重新安装pm2)之后,似乎pm2试图使用保存的旧配置来运行我的服务。我要做的就是删除并重新启动它们。
pm2 delete <app-name>
pm2 start src/app.js --name="<app-name>"
答案 2 :(得分:0)
对于最新的pm2,您需要创建一个ecosystem.config.js
文件,内容类似于
module.exports = {
apps : [{
name: "mp-todo",
script: "./build/index.js",
env: {
NODE_ENV: "development",
},
env_production: {
NODE_ENV: "production",
},
log_date_format: 'YYYY-MM-DD HH:mm Z',
combine_logs: true
}]
}
您可以使用pm2 start ecosystem.config.js --env production
在配置文件中使用环境变量
答案 3 :(得分:0)
我发现的解决方法是使用Windows PowerShell运行它。 我在Git Bash上运行它,但无法正常工作,上面给出了相同的错误。 使用PowerShell运行后,它可以正确启动,并包含我想要的所有实例。
答案 4 :(得分:0)
此答案用于处理遗留系统
正如其他人指出的,该错误是节点版本和 pm2 版本之间不兼容的产物。例如,在处理旧项目时可能会导致此问题,其中 pm2 已更新但 node.js 版本较旧。
“只升级节点版本”并不总是可能的,即使这是最好的做法。因此,如果您运行 pm2 并且它会给您一个错误,例如:
$ pm2 --version
/usr/local/nvm/v6.3.0/lib/node_modules/pm2/node_modules/chalk/source/index.js:103
...styles,
^^^
SyntaxError: Unexpected token ...
at Object.exports.runInThisContext (vm.js:76:16)
at Module._compile (module.js:513:28)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/usr/local/nvm/v6.3.0/lib/node_modules/pm2/constants.js:10:14)
at Module._compile (module.js:541:32)
您现在可以先解决问题,然后再计划升级。
$ npm list -g --depth 0
/usr/local/lib
├── other-package@version.number
└── pm2@4.2.2
├── ...
└── ...
$ npm install -g pm2@3.5.2 # might need sudo
您可以通过运行 $ pm2 --version
或第一步中的命令 $ npm list -g --depth 0
提示:确定您需要哪个版本的最佳方法可能是检查 pm2 changelogs 并查看哪个 pm2 版本已更改节点版本。