web-dev-qa-db-fra.com

Utiliser les dépendances Git avec npm et Node sur Heroku

J'ai ce fichier 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"
  }
}

et je veux me déployer à Heroku. Cela fonctionne bien localement avec npm version 1.0.105, mais cela étouffe Heroku (j’ai mis à jour le npm à 1.0.105 également):

   -----> 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!     <[email protected]>
          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 

De plus, je ne semble pas trouver un moyen d'obtenir l'accès à ce fichier journal dans/tmp.

Si quelqu'un réussit à déployer une dépendance de Git sur Heroku (fonctionne bien du côté de Ruby: P)?

30
Julien

Le problème est dans leur buildpack nodejs. J'ai envoyé une demande de retrait à Heroku avec un correctif, mais je ne sais pas si ou quand ils répondront. Heureusement, il existe une méthode pas très bien documentée pour utiliser un buildpack personnalisé, qui vous permettra de contourner le problème. J'ai brouillé le buildpack de nodejs de heroku et résolu le problème - disponible ici:

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

Pour utiliser cela, vous feriez mieux de créer votre propre fork de github de https://github.com/heroku/heroku-buildpack-nodejs puis de fusionner dans ma branche chrisleishman/git_fix. Par exemple. (après avoir bifurqué):

git clone [email protected]:@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

Vous pouvez ensuite ajouter la variable BUILDPACK_URL config à votre application heroku. Par exemple.

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

Le prochain envoi à heroku doit ensuite utiliser le buildpack personnalisé, contenant le correctif.

12
Chris Leishman

Pour info si c'est sur GitHub, vous pouvez simplement spécifier le username/repository et npm fera le reste.

{
    "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"
  }
}

Alternativement

Spécifiez l'une des (git/git+ssh/git+http/git+https) ://user@Host/repo.git urls

Complètement documenté

78
code ninja

Je ne connais pas ce paquet, mais j'en ai d'autres avec une syntaxe comme celle-ci. Sur heroku, en utilisant une référence http à un tar.gz

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"
  }
}
35

Notez que vous pouvez spécifier commit-ish pour sélectionner la validation/branche/... à installer, sous la forme "user/foo-project#commit-ish", voir doc .

Un exemple: 

"dependencies": {
    "express": "visionmedia/express#some-branch",
    "mocha": "visionmedia/mocha#4727d357ea"
}
3
laike9m

Pas sûr que ce soit le même problème à cette date, mais j'ai eu un message d'erreur identique, et j'ai trouvé que je pouvais le résoudre en spécifiant explicitement la version de node et npm sur cette page:

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

2
prototype

J'ai eu un problème similaire, sauf que je faisais référence à un dépôt privé git. Ma solution pour cela consistait à ajouter un script postinstall pour les éléments suivants:

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

La mise à jour et l’installation permettent à npm de mettre à jour le dépôt privé au plus tard. ( https://github.com/npm/npm/issues/1727 )

1
wlingke

Si vous avez des problèmes avec npm 5+ (où package-lock.json est une chose), assurez-vous d’installer le paquet via la ligne de commande.

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

À partir de NPM 5.0.3, il suffit de l'ajouter à package.json et d'exécuter npm i ne mettra pas à jour package-lock.json (grrr). 

0
rguerrettaz