我有这个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)?
答案 0 :(得分:78)
仅供参考,如果它在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
网址
答案 1 :(得分:35)
我不知道这个包,但我有其他人使用如下语法。在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"
}
}
答案 2 :(得分:12)
问题出在他们的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应用中。 E.g。
heroku config:add BUILDPACK_URL="git://github.com/@YOUR-GITHUB-NAME@/heroku-buildpack-nodejs.git
然后下一次推送到heroku应该使用包含修复的自定义buildpack。
答案 3 :(得分:4)
请注意,您可以指定commit-ish来选择要安装的提交/分支/ ...,格式为"user/foo-project#commit-ish"
,请参阅doc。
一个例子:
"dependencies": {
"express": "visionmedia/express#some-branch",
"mocha": "visionmedia/mocha#4727d357ea"
}
答案 4 :(得分:2)
在此日期不确定它是同一个问题,但我遇到了相同的错误消息,我发现我能够通过显式指定节点的版本和每页的npm来解决它:
答案 5 :(得分:1)
我有一个类似的问题,除了我引用私人git仓库。我的解决方案是为以下内容添加postinstall
脚本:
{
"postinstall": "npm update && npm install package-name"
}
更新&amp;安装使npm将私有仓库更新为最新版本。 (this answer)
答案 6 :(得分:0)
如果有人在使用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)。