使用pm2进行纱线启动会产生错误,而npm start可以正常工作

Sai*_*ish 5 node.js npm pm2 yarnpkg

我有一个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)
Run Code Online (Sandbox Code Playgroud)

我使用的PM2命令:

pm2 start yarn --name api -- start
Run Code Online (Sandbox Code Playgroud)

虽然npm同样可以启动,但可以使用以下命令正常工作:

pm2 start npm --name api -- start
Run Code Online (Sandbox Code Playgroud)

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

chi*_*rai 7

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

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

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

贝壳:

pm2 start yarn --interpreter bash --name api -- start
Run Code Online (Sandbox Code Playgroud)

或使用时ecosystem.config.js

module.exports = {
  apps : [{
    name      : 'yarn',
    script    : 'yarn',
    args      : 'start',
    interpreter: '/bin/bash',
    env: {
      NODE_ENV: 'development'
    }
  }]
};
Run Code Online (Sandbox Code Playgroud)