How to get Heroku to recognize a yarn.lock or package.json within a subdirectory (not root)

后端 未结 6 2158
终归单人心
终归单人心 2021-02-19 10:11

I have a Rails application using React, Webpack, and Yarn for the client side. I have everything relating to the client side within the /client directory. This includes my yarn.

相关标签:
6条回答
  • 2021-02-19 10:43

    You can keep both package.json and yarn.lock by adding one of these to .slugignore.

    It works like .gitignore - it just defines which files to ignore pushing to Heroku.

    Check more information here

    0 讨论(0)
  • 2021-02-19 10:45
    1. To use yarn to install your application's dependences

      a) yarn.lock should be present in root of the repo. yarn install b) package-lock.json should be removed git rm package-lock.json

    2. To use npm

      a) yarn.lock should be removed

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

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

    0 讨论(0)
  • 2021-02-19 10:59

    maybe your can try typing in package.json

      "engines": {
        "node": "^6.9",
        "yarn": "^0.21"
      },
    
    0 讨论(0)
  • 2021-02-19 11:03

    I'll add an answer for document another possible use-case. I experienced something similar, multiple buildpacks and I had checked everything in all answers:

    • node-js was declared first in .buildpacks file
    • a yarn.lock was added in the root of the project
    • yarn dependency declared under engines on package.json

    Nevertheless yarn was not picking up since I was using an older version of node-js buildpack.


    Bumping the version of the buildpack the latest solve my problem:

    https://github.com/heroku/heroku-buildpack-nodejs#v118
    
    0 讨论(0)
  • 2021-02-19 11:05

    Just been through a similar thing myself. You need to order the buildpacks so that node is first. If a yarn.lock is in your root dir (or yarn is in your "engines" key as in @remydib's answer), then the node buildpack will install yarn and then your packages. If you have a yarn.lock in /client, put one in root, and add a postinstall script to it that says cd client && yarn run build.

    In my case (rake assets:precompile calls yarn and fails), for some reason when the buildpacks go ruby -> node, Heroku doesn't wait for node to install before trying to run rake tasks, and we go kablooie.

    Hope this helps.

    0 讨论(0)
  • 2021-02-19 11:08

    Make sure to use both ruby and node buildpacks. I got this error when I didn't.

    Execute these in your root folder:

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

    Sources: 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

    0 讨论(0)
提交回复
热议问题