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

我有一个使用React,Webpack和Yarn的Rails应用程序用于客户端。 我在/ client目录中拥有与客户端相关的所有内容。 这包括我的yarn.lock和package.json文件。 我有一个proc文件cds到/ 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文件?

或者这个错误的原因是完全不同的?

我自己也经历过类似的事情。 您需要订购构建包,以便节点是第一个。 如果yarn.lock在你的根目录中(或者纱线在你的“引擎”键中,就像在@ remydib的答案中那样),那么节点buildpack将安装yarn然后你的包。 如果你在/ client中有一个yarn.lock ,把它放在root中,然后添加一个postinstall脚本,说明cd client && yarn run build

在我的情况下(rake资产:预编译调用yarn和failed),由于某种原因,当buildpacks进入ruby – > node时,Heroku不会等待节点安装,然后再尝试运行rake任务,然后我们去kablooie。

希望这可以帮助。

确保使用ruby和node buildpack。 当我没有时,我收到了这个错误。

在根文件夹中执行以下操作:

 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

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

  "engines": { "node": "^6.9", "yarn": "^0.21" }, 
  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

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

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

然而,由于我使用的是旧版本的node-js buildpack,因此yarn没有增加。


碰到最新版本的buildpack解决了我的问题:

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

您可以通过将其中一个添加到.slugignore来保留package.json和yarn.lock。

它的作用类似于.gitignore – 它只是定义要忽略推送到Heroku的文件。

在这里查看更多信息