【问题标题】:How to get Heroku to recognize a yarn.lock or package.json within a subdirectory (not root)如何让 Heroku 识别子目录(不是根目录)中的 yarn.lock 或 package.json
【发布时间】:2017-08-18 17:13:03
【问题描述】:

我有一个在客户端使用 React、Webpack 和 Yarn 的 Rails 应用程序。我在 /client 目录中拥有与客户端相关的所有内容。这包括我的 yarn.lock 和 package.json 文件。我有一个 cd 到 /client 并正确运行 yarn run build 的 Procfile。这在本地有效,没有错误。但是,当我部署/推送到 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-on-rails heroku procfile yarnpkg


    【解决方案1】:

    确保同时使用 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

    【讨论】:

      【解决方案2】:

      我自己也经历过类似的事情。您需要订购构建包,以便首先使用节点。如果 yarn.lock 在您的根目录中(或 yarn 在您的“engines”键中,如@remydib 的答案),那么节点 buildpack 将安装 yarn,然后安装您的包。如果您在 /client 中有一个 yarn.lock,请将其放入根目录,然后在其中添加一个 postinstall 脚本,上面写着 cd client && yarn run build

      在我的情况下(rake assets:precompile 调用 yarn 并失败),由于某种原因,当 buildpacks 转到 ruby​​ -> node 时,Heroku 在尝试运行 rake 任务之前不会等待 node 安装,而是使用 kablooie。

      希望这会有所帮助。

      【讨论】:

      • 它有效。但我想知道为什么我们必须把 NodeJS buildpacks 放在首位?
      • @hiveer 需要 NodeJS Buildpack 来确保 node 和 npm/yarn 可用。
      【解决方案3】:
      1. 使用yarn 安装应用程序的依赖项

        a) yarn.lock 应该存在于 repo 的根目录中。 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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

          尽管如此,yarn 没有使用,因为我使用的是旧版本的 node-js buildpack。


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

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

          【讨论】:

            【解决方案6】:

            您可以同时保留 package.json 和 yarn.lock,方法是将其中之一添加到 .slugignore。

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

            Check more information here

            【讨论】:

              猜你喜欢
              • 2015-07-29
              • 2019-06-23
              • 2015-12-08
              • 2021-12-14
              • 2021-11-30
              • 2012-02-03
              • 2010-11-26
              • 2014-12-21
              • 1970-01-01
              相关资源
              最近更新 更多