pm2 使用 yarn 启动项目报错的问题

367 阅读2分钟

在跟往常一样发布项目的时候,遇到了一个报错,这个报错似曾相识,但是由于时间太久,已经不太记得了。于是这里记录下。

现场情况:使用 pm2 发布 nextjs 项目

报错如下:

/share/yarn/bin/yarn:2
7|blog  | argv0=$(echo "$0" | sed -e 's,\\,/,g')

首先判断不是代码相关的问题,因为我已经在本地可以正常启动和打包了。 那么就先问问GPT吧。

1、GPT是这么提示我的:

出现这个问题可能是因为在 pm2 中配置的 yarn 路径不正确或环境变量设置有误

  • 检查 Yarn 安装路径:
    确保 yarn 安装正确并且路径正确。通过运行以下命令确认 yarn 的路径:

    which yarn
    

    这将返回 yarn 的安装路径,比如 /usr/local/bin/yarn

  • 更新 PM2 配置:
    如果 pm2 使用的 yarn 路径不正确,更新 pm2 配置文件或启动脚本中的路径。

  • 检查 Node.js 和 Yarn 环境:
    确保 pm2 启动时使用的 Node.jsyarn 版本是正确的。可以在 pm2 配置中指定环境变量:

    pm2 start app.js --interpreter $(which node) --interpreter-args "$(which yarn)"
    
  • 使用绝对路径启动:
    pm2 配置中直接使用 yarn 的绝对路径:

    pm2 start yarn --name my-nextjs-app -- start
    

2、 Stack Overflow 上是这么说的:

[node.js - 使用 pm2 执行 yarn start 时出现错误,而 npm start 工作正常 - 堆栈溢出](https://stackoverflow.com/questions/45887206/using-pm2-to-do-yarn-start-gives-error-while-npm-start-works-fine)

PM2 的默认解释器设置为 .`node`,要正确运行 yarn(bash 脚本),您必须将 pm2 的解释器设置为:`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'
    }
  }]
};

搜了下,最原始的出处在这里, 在 pm2 start 命令中使用时出现 yarn 错误。·问题 #6124 ·纱线PKG/纱线

并不打算深究这些,我最后用了npm 。。。又更新了下自己的笔记,记录了应该如何打包发布运行。毕竟半年没有更新项目了,忘得差不多了。

不得不说,有时候前端的时间都浪费在这里了。。