pm2 意外的令牌导入
pm2 Unexpected token import
我有一个在我使用 node 或 nodemon 时可以工作的网络服务器(例如 "nodemon index.js")。但是,当我尝试使用 pm2 ("pm2 start index.js") 时,我得到 "SyntaxError: Unexpected token import"。完整的错误日志如下。我在这里做错了什么?
/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)
遇到同样的问题。
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 post 您的安装详细信息,我可以推荐如何修复。
最新的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
来使用配置文件中的环境变量
将节点升级到 v12(并重新安装 pm2)后,pm2 似乎试图 运行 我的服务使用它保存的旧配置。我所要做的就是删除并重新开始。
pm2 delete <app-name>
pm2 start src/app.js --name="<app-name>"
我找到的解决方法是 运行 它与 Windows PowerShell。
我用 运行 和 Git Bash 连接它,但它不工作,给出了上面相同的错误。
在 运行 PowerShell 之后,它正确启动,包含我想要的所有实例。
此答案适用于处理遗留系统
正如其他人所指出的,该错误是节点版本与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 包版本,其中还包含您的 pm2 包及其版本:
$ npm list -g --depth 0
/usr/local/lib
├── other-package@version.number
└── pm2@4.2.2
├── ...
└── ...
- 然后在检查它是与版本控制相关的问题后,通过在全局安装特定版本的 pm2(与您的节点兼容)简单地降级 pm2 使其恢复工作:
$ npm install -g pm2@3.5.2 # might need sudo
您可以通过 运行ning $ pm2 --version
或第一步中的命令 $ npm list -g --depth 0
来验证安装是否成功
提示: 确定您需要哪个版本的最佳方法可能是检查 pm2 changelogs 并查看哪个 pm2 版本更改了节点版本。
我有以下错误:
/root/.nvm/versions/node/v8.0.0/lib/node_modules/pm2/node_modules/chalk/source/index.js:103
...styles,
^^^ SyntaxError: Unexpected token ...
at createScript (vm.js:74:10)
at Object.runInThisContext (vm.js:116:10)
at Module._compile (module.js:533:28)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)
at tryModuleLoad (module.js:466:12)
at Function.Module._load (module.js:458:3)
at Module.require (module.js:513:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/root/.nvm/versions/node/v8.0.0/lib/node_modules/pm2/constants.js:10:14)
pm2 支持的版本 4.1.2 与节点版本 8 存在一些问题,我们必须将节点版本至少升级到 12 才能正常工作。我做了同样的事情,它对我有用。
注:节点。 Node.js 版本大多向后兼容,这意味着您为 Node 8 编写的代码可以在 Node 10 或 12 上运行。因此,如果您只有普通的旧 JavaScript,升级
应该没有困难
我遇到了和你一样的问题,但我已经解决了。我将 nodejs 更新到最新版本。
请输入这 3 个命令:
- sudo npm 缓存清理 -f
- sudo npm install -g n
- sudo n 稳定
所以重置它。您的问题将得到解决
我有一个在我使用 node 或 nodemon 时可以工作的网络服务器(例如 "nodemon index.js")。但是,当我尝试使用 pm2 ("pm2 start index.js") 时,我得到 "SyntaxError: Unexpected token import"。完整的错误日志如下。我在这里做错了什么?
/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)
遇到同样的问题。
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 post 您的安装详细信息,我可以推荐如何修复。
最新的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
来使用配置文件中的环境变量
将节点升级到 v12(并重新安装 pm2)后,pm2 似乎试图 运行 我的服务使用它保存的旧配置。我所要做的就是删除并重新开始。
pm2 delete <app-name>
pm2 start src/app.js --name="<app-name>"
我找到的解决方法是 运行 它与 Windows PowerShell。 我用 运行 和 Git Bash 连接它,但它不工作,给出了上面相同的错误。 在 运行 PowerShell 之后,它正确启动,包含我想要的所有实例。
此答案适用于处理遗留系统
正如其他人所指出的,该错误是节点版本与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 包版本,其中还包含您的 pm2 包及其版本:
$ npm list -g --depth 0
/usr/local/lib
├── other-package@version.number
└── pm2@4.2.2
├── ...
└── ...
- 然后在检查它是与版本控制相关的问题后,通过在全局安装特定版本的 pm2(与您的节点兼容)简单地降级 pm2 使其恢复工作:
$ npm install -g pm2@3.5.2 # might need sudo
您可以通过 运行ning $ pm2 --version
或第一步中的命令 $ npm list -g --depth 0
提示: 确定您需要哪个版本的最佳方法可能是检查 pm2 changelogs 并查看哪个 pm2 版本更改了节点版本。
我有以下错误:
/root/.nvm/versions/node/v8.0.0/lib/node_modules/pm2/node_modules/chalk/source/index.js:103
...styles,
^^^ SyntaxError: Unexpected token ...
at createScript (vm.js:74:10)
at Object.runInThisContext (vm.js:116:10)
at Module._compile (module.js:533:28)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)
at tryModuleLoad (module.js:466:12)
at Function.Module._load (module.js:458:3)
at Module.require (module.js:513:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/root/.nvm/versions/node/v8.0.0/lib/node_modules/pm2/constants.js:10:14)
pm2 支持的版本 4.1.2 与节点版本 8 存在一些问题,我们必须将节点版本至少升级到 12 才能正常工作。我做了同样的事情,它对我有用。
注:节点。 Node.js 版本大多向后兼容,这意味着您为 Node 8 编写的代码可以在 Node 10 或 12 上运行。因此,如果您只有普通的旧 JavaScript,升级
应该没有困难我遇到了和你一样的问题,但我已经解决了。我将 nodejs 更新到最新版本。 请输入这 3 个命令:
- sudo npm 缓存清理 -f
- sudo npm install -g n
- sudo n 稳定
所以重置它。您的问题将得到解决