如何让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" },
-
使用
yarn
来安装应用程序的依赖性a)
yarn.lock
应该存在于回购的根部。yarn install
b)package-lock.json
应该被删除git rm package-lock.json
-
要使用
npm
a)应移除
yarn.lock
资料来源: https : //devcenter.heroku.com/articles/ruby-support#installed-binaries
我将为文档添加另一个可能的用例的答案。 我经历了类似的,多个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的文件。
在这里查看更多信息