web-dev-qa-db-fra.com

npm install n'installe pas la dernière version sur GitHub

J'ai un module appelé 'sails-mongo' et je veux le mettre à jour vers la dernière version en utilisant la commande suivante:

npm update sails-mongo --save

J'ai également essayé de désinstaller puis de réinstaller. J'ai essayé sails-mongo@latest et sails-mongo@beta.

Problème : La version actuelle ( master ) sur GitHub le package.json ( https://github.com/balderdashy/sails-mongo/blob/master/package.json ) le fichier a:

"dependencies": {
  "async": "~0.2.9",
  "lodash": "~2.4.1",
  "mongodb": "1.4.2",
  "waterline-errors": "~0.10.0"
},

Et dans celui qui est mis à jour

"dependencies": {
  "async": "0.2.10",
  "underscore": "1.5.2",
  "underscore.string": "2.3.3",
  "mongodb": "~1.3.23"
},

La seule façon d'obtenir la branche principale est d'utiliser la commande npm install git+https://github.com/balderdashy/sails-mongo

Pourquoi sails-mongo@latest installer la branche master?

36
user2867106

Par défaut, les dépendances NPM sont extraites du référentiel NPM. Les auteurs doivent télécharger manuellement les nouvelles versions de leur logiciel dans le référentiel NPM, de sorte que le "@latest "la version du code hébergé sur NPM est différente de la dernière version du code qui existe n'importe où (par exemple, sur GitHub).

Selon le référentiel NPM page d'informations sur Sails , la dernière version hébergée par NPM est 0.9.16 tandis que version actuelle de GitHub est 0.10.0-rc3.

Si vous souhaitez que votre projet dépende d'une branche particulière ou de la validation d'un référentiel Git particulier (au lieu des versions hébergées sur le référentiel NPM), les développeurs NPM ont inclus un mécanisme explicite pour permettre cela, détaillé dans "- Git URL comme dépendances "dans le package.json documents :

Git URL comme dépendances

Les URL Git peuvent être de la forme:

git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+ssh://user@hostname/project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish

Le commit-ish peut être n'importe quelle balise, sha ou branche qui peut être fournie comme argument à git checkout. La valeur par défaut est master.

En fait, il est encore plus facile de tiliser un dépôt Github.com comme dépendance:

Depuis la version 1.1.65, vous pouvez faire référence aux URL GitHub comme simplement "foo": "user/foo-project". Par exemple:

{
  "name": "foo",
  "version": "0.0.0",
  "dependencies": {
    "express": "visionmedia/express"
  }
}

Donc, pour utiliser le référentiel Sails GitHub, utilisez simplement:

"dependencies": {
  "sails": "balderdashy/sails-mongo",
  ...
}

Et pour utiliser l'état exact de Sails tel qu'il existe sur GitHub au 28 avril 2014, utilisez:

"dependencies": {
  "sails": "git://github.com/balderdashy/sails-mongo#b9cdce9a48",
  ...
}
44
apsillers

J'ai eu un problème similaire. Via le registre NPM, j'essayais d'obtenir les dernières informations d'un projet dans GitHub, comme ceci:

//package.json
"devDependencies": {
    "foo-package": "^3.3.0",
}

Mais le code que je suis revenu de npm install (comme observé dans le node_modules/ dossier) n'était pas ce que j'ai vu dans la branche principale du référentiel GitHub. J'étais confus; car les deux ne correspondaient pas.

J'ai finalement trouvé: https://docs.npmjs.com/cli/view , qui révèle certaines informations (versions et dates) de ce que le registre NPM connaît pour un référentiel particulier.

// Console example
npm view foo-package

Après avoir confirmé que ce que je voulais de la branche principale du référentiel GitHub n'était pas dans le registre NPM, j'ai finalement changé mon approche Git URLs as Dependencies , tout comme @apsillers répond.

1
Michael R