在 Heroku 上使用带有 npm 和 Node 的 Git 依赖项

Posted

技术标签:

【中文标题】在 Heroku 上使用带有 npm 和 Node 的 Git 依赖项【英文标题】:Use Git dependencies with npm and Node on Heroku 【发布时间】:2012-01-04 19:46:36 【问题描述】:

我有这个 package.json 文件:


    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": 
      "coffee-script": "1.1.3"
    , "express": "2.5.0"
    , "less": "1.1.5"
    , "jade": "0.17.0"
    , "connect-redis": "1.2.0"
    , "hiredis": "0.1.13"
    , "redis": "0.7.1"
    , "bcrypt": "0.4.1"
    , "promised-io": "0.3.0"
    , "jugglingdb": "git://github.com/juggy/jugglingdb.git#master"
    , "nodemailer": "0.2.3"
  

我想部署到 Heroku。它在本地使用 npm 版本 1.0.105 可以正常工作,但它在 Heroku 上窒息(我也将那里的 npm 更新为 1.0.105):

   -----> Heroku receiving push
   -----> Fetching custom build pack... done
   -----> Node.js app detected
   -----> Fetching Node.js binaries
   -----> Vendoring node 0.4.7
   -----> Installing dependencies with npm 1.0.105
          npm ERR! git checkout master fatal: Not a git repository: '.'
          npm ERR! Error: `git "checkout" "master"` failed with 128
          npm ERR!     at ChildProcess.<anonymous> (/tmp/node-npm-Jb2d/lib/utils/exec.js:49:20)
          npm ERR!     at ChildProcess.emit (events.js:67:17)
          npm ERR!     at ChildProcess.onexit (child_process.js:192:12)
          npm ERR! Report this *entire* log at:
          npm ERR!     <http://github.com/isaacs/npm/issues>
          npm ERR! or email it to:
          npm ERR!     <npm-@googlegroups.com>
          npm ERR! 
          npm ERR! System Linux 2.6.32-316-ec2
          npm ERR! command "/tmp/node-node-C3jD/bin/node" "/tmp/node-npm-Jb2d/cli.js" "install"
          npm ERR! cwd /tmp/build_2yzg7lk83o5m9
          npm ERR! node -v v0.4.7
          npm ERR! npm -v 1.0.105
          npm ERR! git checkout master fatal: Not a git repository: '.'
          npm ERR! 
          npm ERR! Additional logging details can be found in:
          npm ERR!     /tmp/build_2yzg7lk83o5m9/npm-debug.log
          npm not ok
    !     Failed to install dependencies with npm
    !     Heroku push rejected, failed to compile Node.js app 

另外,我似乎没有找到访问 /tmp 中该日志文件的方法。

任何人都成功地在 Heroku 上部署了 Git 依赖项(在 ruby​​ 方面工作正常:P)?

【问题讨论】:

在我看来是个错误,你报告了吗? Heroku 已经沉默了一个星期了.... 我相信这不是heroku的,它更像是一个NPM错误(我认为这很明显......) 为什么会这样?它适用于我的本地安装... 似乎使用 github 中下载选项卡中的 tarball 链接而不是 git 链接正在工作......我现在就使用它。 【参考方案1】:

仅供参考,如果它在 GitHub 上,您只需指定 username/repository,npm 将完成剩下的工作。


    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": 
      "coffee-script": "1.1.3"
    , "express": "2.5.0"
    , "less": "1.1.5"
    , "jade": "0.17.0"
    , "connect-redis": "1.2.0"
    , "hiredis": "0.1.13"
    , "redis": "0.7.1"
    , "bcrypt": "0.4.1"
    , "promised-io": "0.3.0"
    , "jugglingdb": "juggy/jugglingdb"
    , "nodemailer": "0.2.3"
  

或者

指定 (git/git+ssh/git+http/git+https)://user@host/repo.git 网址之一

完全documented

【讨论】:

酷。如何指定分支? @betzerra 我认为那是juggy/jugglingdb#master 但不确定【参考方案2】:

我不知道这个包,但我有其他人可以使用如下语法。在 heroku 上,使用对 tar.gz 的 http 引用

package.json:


    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": 
      "coffee-script": "1.1.3"
    , "express": "2.5.0"
    , "less": "1.1.5"
    , "jade": "0.17.0"
    , "connect-redis": "1.2.0"
    , "hiredis": "0.1.13"
    , "redis": "0.7.1"
    , "bcrypt": "0.4.1"
    , "promised-io": "0.3.0"
    , "jugglingdb": "https://github.com/juggy/jugglingdb/tarball/master"
    , "nodemailer": "0.2.3"
  

【讨论】:

是的,这就是我最终做的,但我认为 git 链接会更好 是的,这对我有用。语法为:github.com/:organization/:repo/tarball/master 工作完美。我以为我遇到了代理问题;但事实证明我瞄准了错误的地方。 我不得不使用上面的url重定向到codeload.github.com/:org/:repo/legacy.tar.gz/master的url 现在在 2021 年尝试过,可以说添加 /tarball/master 仍然有效。谢谢!【参考方案3】:

问题出在他们的 nodejs buildpack 中。我已经向 Heroku 发送了一个带有修复程序的拉取请求,但我不知道他们是否或何时会回复。幸运的是,有一种使用自定义 buildpack 的方法并没有很好的记录,它可以让您解决这个问题。我已经分叉了 heroku 的 nodejs buildpack 并解决了这个问题 - 在这里可用:

https://github.com/chrisleishman/heroku-buildpack-nodejs/tree/git_fix

要使用它,您最好创建自己的https://github.com/heroku/heroku-buildpack-nodejs github 分支,然后合并到我的chrisleishman/git_fix 分支中。例如。 (分叉后):

git clone git@github.com:@YOUR-GITHUB-NAME@/heroku-buildpack-nodejs.git
cd heroku-buildpack-nodejs
git remote add chrisleishman git://github.com/chrisleishman/heroku-buildpack-nodejs.git
git fetch chrisleishman
git merge chrisleishman/git_fix
git push

然后您可以将BUILDPACK_URL 配置变量添加到您的heroku 应用程序。例如

heroku config:add BUILDPACK_URL="git://github.com/@YOUR-GITHUB-NAME@/heroku-buildpack-nodejs.git

下一次推送到 heroku 应该使用自定义 buildpack,包含修复。

【讨论】:

很好用。你知道如果我改变git hash而不改变package.json版本是否会更新依赖包吗? 不,他们不会。这是 npm 中的一个错误。 另外,我相信此修复程序现已合并到标准 buildpack 中,因此不再需要此解决方法。 对于任何遇到此页面并试图引用 GitHub 存储库的人来说,请务必在您的 package.json 中使用“Git 只读”URL。如果您使用其中一个私有 URL,您将收到与上述错误不同的错误,但结果相似。只读 URL 工作正常。【参考方案4】:

请注意,您可以指定commit-ish 来选择要安装的提交/分支/...,格式为"user/foo-project#commit-ish",请参阅doc。

一个例子:

"dependencies": 
    "express": "visionmedia/express#some-branch",
    "mocha": "visionmedia/mocha#4727d357ea"

【讨论】:

【参考方案5】:

目前不确定这是否是同一个问题,但我遇到了相同的错误消息,我发现我能够通过在此页面上明确指定 node 和 npm 的版本来解决它:

https://devcenter.heroku.com/articles/nodejs-versions

【讨论】:

【参考方案6】:

我遇到了类似的问题,只是我引用了一个私人 git 存储库。我的解决方案是为以下内容添加postinstall 脚本:


    "postinstall": "npm update && npm install package-name"

更新和安装使 npm 将私有 repo 更新到最新。 (https://github.com/npm/npm/issues/1727)

【讨论】:

【参考方案7】:

如果有人在使用 npm 5+(其中 package-lock.json 是一个东西)遇到这个问题,请确保通过命令行安装包。

npm i my_package --save https://github.com/username/repo/archive/v6.5.2.tar.gz

从 NPM 5.0.3 开始,只需将其添加到 package.json 并运行 npm i 将不会更新 package-lock.json (grrr)。

【讨论】:

以上是关于在 Heroku 上使用带有 npm 和 Node 的 Git 依赖项的主要内容,如果未能解决你的问题,请参考以下文章

带有 Node.js 的 Heroku 上的 Tesseract-OCR

停止 Heroku 运行 npm start + 运行啥来代替?

NPM 使用 React + Node + 同时运行构建如何?

Mac 上的 Node.js Heroku 部署 - sh: 1: nodemon: not found / npm ERR! `nodemon fileName.js`/npm 错误!在...启动脚

Heroku 不读取节点版本

如何在Heroku上托管带有Node后端的React应用程序?