如何让 Heroku 识别子目录(不是根目录)中的 yarn.lock 或 package.json



我有一个使用React,Webpack和Yarn的Rails应用程序用于客户端。我在/client 目录中拥有与客户端相关的所有内容。这包括我的yarn.lock和package.json文件。我有一个 Procfile,它 cd 到/client 并正确运行yarn run build .这在本地工作,没有错误。但是,当我部署/推送到 Heroku 时,我的推送被拒绝,并且出现以下错误:

remote:        cd client && yarn run build:production
remote:        sh: 1: yarn: not found
remote:        rake aborted!
remote:        Command failed with status (127): [cd client && yarn run build:production...]

这告诉我,Heroku无法在根级别找到yarn.lock文件。如何让 Heroku 在我的/client 目录中使用yarn.lock文件?

还是此错误的原因完全是其他原因?

确保同时使用 ruby 和节点构建包。当我没有时,我得到了这个错误。

在根文件夹中执行以下命令:

heroku buildpacks:set heroku/ruby
heroku buildpacks:add --index 1 heroku/nodejs

资料来源: https://devcenter.heroku.com/articles/using-multiple-buildpacks-for-an-app

https://github.com/shakacode/react_on_rails/blob/master/docs/additional-reading/heroku-deployment.md

我自己刚刚经历过类似的事情。您需要对构建包进行排序,以便节点排在第一位。如果 yarn.lock 位于您的根目录中(或者 yarn 位于您的"引擎"键中,如 @remydib 的答案(,那么节点构建包将安装 yarn,然后是您的软件包。如果你在/client 中有一个yarn.lock,把一个放在根目录中,然后添加一个postinstall脚本,上面写着cd client && yarn run build

就我而言(rake assets:precompile 调用 yarn 并失败(,出于某种原因,当构建包变成 ruby -> 节点时,Heroku 在尝试运行 rake 任务之前不会等待节点安装,我们去 kablooie。

希望这有帮助。

  1. 使用yarn安装应用程序的依赖项

    a( yarn.lock应存在于存储库的根目录中。 yarn install b( 应删除package-lock.json git rm package-lock.json

  2. 使用npm

    a( 应删除yarn.lock

来源: https://devcenter.heroku.com/articles/ruby-support#installed-binaries

https://docs.npmjs.com/files/package-lock.json

也许你可以尝试在package.json中输入

  "engines": {
    "node": "^6.9",
    "yarn": "^0.21"
  },

我将为文档另一个可能的用例添加一个答案。我经历了类似的,多个构建包,我已经检查了所有答案中的所有内容:

  • node-js首先在文件中声明.buildpacks
  • 在项目的根目录中添加了yarn.lock
  • 引擎下声明的纱线依赖package.json

尽管如此,yarn并没有回升,因为我使用的是旧版本的node-js构建包。


碰撞最新的构建包版本解决了我的问题:

https://github.com/heroku/heroku-buildpack-nodejs#v118

你可以保留 package.json 和 yarn.lock,方法是将其中一个添加到.slugignore.

它的工作方式类似于 .gitignore - 它只是定义了要忽略哪些文件推送到 Heroku。

在此处查看更多信息

最新更新