2014-04-28 6 views
33

Ich habe ein Modul ‚Segel-Mongo‘ genannt, und ich will es auf die neueste Version aktualisieren, den folgenden Befehl:npm Installation nicht Installation neueste Version auf GitHub

npm update sails-mongo --save 

Ich habe auch versucht Deinstallation dann wieder installieren . Ich habe versucht und [email protected].

Problem: Die aktuelle Version (Master) auf GitHub die package.json (https://github.com/balderdashy/sails-mongo/blob/master/package.json) Datei hat:

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

Und in dem einen ist

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

Die Nur so bekomme ich den Master-Zweig mit dem Befehl npm install git+https://github.com/balderdashy/sails-mongo

Warum installiert [email protected] den Master-Zweig nicht?

+7

Da NPM nicht von Github installiert wird, wird es von [NPM] (https://www.npmjs.org/package/sails) installiert. Der Schlüssel 'repository' in' package.json' identifiziert nur ein Repository, das auf der NPM-Seite angezeigt wird. –

+0

+1 aber nicht sicher, dass ich dich habe, lassen Sie mich es anders fragen: Wie weiß NPM welche Version zu installieren? – user2867106

+2

Pakete werden unabhängig von Github auf NPM veröffentlicht. Wenn ein Entwickler das Paket veröffentlicht, nimmt es die Versionsnummer aus 'package.json'. NPM speichert jeden von diesen fast wie Github. Wenn Sie NPM install ausführen, wird immer die neueste Version installiert, aber wenn Sie das Paket in 'package.json' angeben, können Sie die Version hinzufügen, die Sie installieren möchten. –

Antwort

42

Standardmäßig werden NPM-Abhängigkeiten vom NPM-Repository abgerufen. Autoren müssen manuell neue Versionen ihrer Software in das NPM-Repository hochladen, sodass sich die "@latest" -Version des auf NPM gehosteten Codes von der neuesten Version des Codes unterscheidet, die irgendwo existiert (z. B. auf GitHub).

Nach dem NPM Repository info page on Sails, ist die neueste NPM-gehostete Version 0.9.16 während die current GitHub version0.10.0-rc3 ist.

Wenn Sie möchten, dass Ihr Projekt von einem bestimmten Zweig oder Commit eines bestimmten Git-Repos abhängt (statt der Version (en) auf dem NPM-Repository), haben die NPM-Entwickler einen expliziten Mechanismus integriert, detaillierte in "Git URLs as Dependencies" in dem package.json docs:

Git URLs als Abhängigkeiten

Git URLs kann von der Form sein:

git://github.com/user/project.git#commit-ish 
git+ssh://[email protected]:project.git#commit-ish 
git+ssh://[email protected]/project.git#commit-ish 
git+http://[email protected]/project/blah.git#commit-ish 
git+https://[email protected]/project/blah.git#commit-ish 

Die commit-ish kann ein beliebiges Tag, eine sha oder eine Verzweigung sein, die als Argument an git checkout übergeben werden kann. Der Standardwert ist master.

In der Tat ist es noch einfacher zu use a Github.com repo als Abhängigkeit:

Ab Version 1.1.65 können Sie auf GitHub Urls beziehen sich nur "foo": "user/foo-project".Zum Beispiel:

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

Also, um das Segel GitHub Repo, verwenden Sie einfach:

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

Und den genauen Zustand der Segel zu verwenden, wie es auf GitHub ab April, 28 vorhanden 2014 , verwenden:

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

Also gibt es eigentlich keine Möglichkeit '' '' neustes stable''' Release zu installieren, ohne jedes Mal zu github zu gehen und gezielt zu überprüfen, welches release/branch/etc. du brauchst? – Andrey

+0

@Andrey Kannst du nicht einfach den Master-Zweig des Repos für die neueste stabile Version verwenden? Wenn die Repo-Betreuer neue Zweige erstellen und den Zweig wechseln, der die neueste Version hat, dann musst du ja mit dem Shell-Spiel des Betreuers Schritt halten, welcher Zweig der neueste ist. – apsillers

+0

Nicht immer, d. H. '' 'Npm installieren github: jquery/jquery-ui''' installiert neueste verfügbare Version (https://github.com/jquery/jquery-ui/releases) ... – Andrey

1

Ich hatte ein ähnliches Problem. Über das NPM Registry habe ich versucht, die neueste von einem Projekt zu bekommen ich in GitHub sah in, wie folgt aus:

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

Aber der Code ich wieder von npm install (wie im node_modules/ Ordner beobachtet) war nicht das, was ich sah in Master-Zweig des GitHub-Repository. Ich war verwirrt; als die beiden nicht übereinstimmten.

Ich fand schließlich: https://docs.npmjs.com/cli/view, die einige Informationen (Versionen und Daten) von dem, was die NPM-Registrierung für ein bestimmtes Repository bekannt ist.

// Console example 
npm view foo-package 

Danach bestätigt, was ich von GitHub-Repository Master-Zweig wollte, war nicht in der NPM Registry, änderte es schließlich meinen Ansatz Git URLs as Dependencies, wie @apsillers Antworten.