【问题标题】:Using pm2 to do yarn start gives error while npm start works fine使用 pm2 进行 yarn start 会出错,而 npm start 工作正常
【发布时间】:2018-02-03 20:19:18
【问题描述】:

我有一个 NodeJs 微服务。做纱线启动通常工作得很好。当我尝试使用 pm2 将其作为后台服务启动时,遇到以下问题:

/Users/sairamk/.pm2/logs/api-error-21.log last 15 lines:
21|api     | /usr/local/Cellar/yarn/0.27.5_1/bin/yarn:2
21|api     | PREFIX="/usr/local" exec "/usr/local/Cellar/yarn/0.27.5_1/libexec/bin/yarn.js" "$@"
21|api     |                     ^^^^
21|api     |
21|api     | SyntaxError: Unexpected identifier
21|api     |     at createScript (vm.js:74:10)
21|api     |     at Object.runInThisContext (vm.js:116:10)
21|api     |     at Module._compile (module.js:533:28)
21|api     |     at Object.Module._extensions..js (module.js:580:10)
21|api     |     at Module.load (module.js:503:32)
21|api     |     at tryModuleLoad (module.js:466:12)
21|api     |     at Function.Module._load (module.js:458:3)
21|api     |     at Object.<anonymous> (/usr/local/lib/node_modules/pm2/lib/ProcessContainerFork.js:70:21)
21|api     |     at Module._compile (module.js:569:30)
21|api     |     at Object.Module._extensions..js (module.js:580:10)

我使用的 PM2 命令:

pm2 start yarn --name api -- start

虽然 npm start 相同,但使用以下命令可以正常工作:

pm2 start npm --name api -- start

尝试探索多种可能性。我做错了什么?

【问题讨论】:

标签: node.js npm pm2 yarnpkg


【解决方案1】:

您的 yarn 命令指向 bash 脚本 /usr/local/Cellar/yarn/0.27.5_1/bin/yarn,而不是同一文件夹中的 yarn.js。通过手动运行类似

pm2 start /usr/local/Cellar/yarn/0.27.5_1/bin/yarn.js --name api -- start

它应该按预期工作。只需将路径调整到当前位置即可。就我而言,它是/usr/share/yarn/bin/yarn.js


附带说明:与 npm 相比,像这样执行 yarn 占用的内存几乎是 npm 的两倍。我不知道确切的原因,但我会坚持使用 npm for pm2,因为理论上它不应该有任何区别......

【讨论】:

    【解决方案2】:

    您遇到的错误是因为正在使用节点执行 bash 脚本 (yarn)...

    因为 pm2 的默认解释器设置为node

    要运行 yarn,您必须将解释器设置为 bash

    外壳:

    pm2 start yarn --interpreter bash --name api -- start
    

    或者当你使用ecosystem.config.js时:

    module.exports = {
      apps : [{
        name      : 'yarn',
        script    : 'yarn',
        args      : 'start',
        interpreter: '/bin/bash',
        env: {
          NODE_ENV: 'development'
        }
      }]
    };
    

    【讨论】:

    • 谢谢,从今天开始我收到一个错误,我的解释没有定义。在我不需要它之前。您的解决方案对我有用!
    • 你把我从地狱的两天里救了出来,谢谢!
    • 如何在 Windows 服务器上配置它?我已经尝试过解释器的原因但失败了(我的怀疑)。如果我在命令提示符下运行 plain yarn serve: shop 命令,该文件夹级别的生态系统.config.js 存在按预期工作。
    • 像魅力一样工作,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 2018-02-10
    • 2019-03-05
    • 2016-12-14
    相关资源
    最近更新 更多