2013-05-13 12 views
209

Wir brauchen Karma Test Runner in Teamcity integrieren und dafür möchte ich sys-Ingenieure kleines Skript (Powershell oder was auch immer) geben, das würde:npm Prüfung und Update-Paket bei Bedarf

  1. abholen gewünschte Versionsnummer von einer Konfigurationsdatei (ich glaube, ich es als Kommentar direkt im karma.conf.js setzen kann)

  2. überprüfen, ob die definierte Version von Karma Läufer in npm der globalen Repo installiert

  3. wenn es nicht ist, oder die Installation LED-Version ist älter als gewünscht: abholen und installieren richtige Version

  4. laufen sie: karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run

Also meine Frage ist: „Wie kann eine Prüfung in einem Skript, falls gewünscht Version von Paket installiert ? ". Sollten Sie die Überprüfung durchführen, oder es ist sicher, einfach immer npm -g install anzurufen?

Ich will nicht immer überprüfen und die neueste Version installieren, da andere Konfigurationswerte unverträglich werden kann

Antwort

282

Um zu überprüfen, ob alle Module in einem Projekt ‚alten‘ ist, sollten Sie tun:

npm outdated

‚veraltet‘ wird jedes Modul in package.json definiert prüfen und sehen, ob es eine neuere Version ist in die NPM-Registrierung.

Hier ist ein Beispiel, das zeigt, dass xml2js (das ist in node_modules/im aktuellen Verzeichnis) veraltet ist, weil eine neuere Version existiert (0.2.7):

[email protected] node_modules/xml2js current=0.2.6 

Wenn Sie für veraltete Module zu überprüfen und installieren neuere Version, dann können Sie tun: npm update (für alle Module) oder npm update xml2js (nur Schecks/Updates xml2js)

Werfen Sie einen Blick an dem NPM docs:

+2

Seien Sie vorsichtig mit 'npm update' speziell mit' npm update -g' ... es tut nicht, was die meisten peaole erwarten, dass es tut! Siehe: https://github.com/npm/npm/issues/6247 und https://gist.github.com/othiym23/4ac31155da23962afd0e – jbandi

+2

@jbandi Ab [email protected] ist 'npm -g update' sicher wieder zu verwenden. https://github.com/npm/npm/issues/6247#issuecomment-92182814 –

+0

Bitte beachten Sie, dass das npm-Update Ihre package.json-Datei nicht aktualisiert, wie in der Antwort von @Erik Olson angegeben. –

2

Bei der Installation von NPM-Pakete (global oder lokal) Sie durch die Verwendung einer bestimmten Version definieren die @version Syntax, um eine Version zu definieren, die installiert werden soll.

Mit anderen Worten, tun: npm install -g [email protected] wird sichergestellt, dass nur 0.9.2 installiert ist und nicht neu installieren, wenn es bereits existiert.

Als ein Wort eines Rates würde ich empfehlen, globale npm Installationen zu vermeiden, wo immer Sie können. Viele Leute wissen nicht, dass, wenn eine Abhängigkeit eine bin-Datei definiert, sie in ./node_modules/.bin/ installiert wird. Oft ist es sehr einfach, die lokale Version eines installierten Moduls zu verwenden, das in Ihrer package.json definiert ist. Tatsächlich fügen npm-Skripte die Datei ./node_modules/.bin Ihrem Pfad hinzu.

Als Beispiel, hier ist eine package.json, die, wenn ich npm install && npm test ausführen werde die Version von Karma in meinem Paket.json definiert installieren, und verwenden Sie diese Version von Karma (installiert bei node_modules/.bin/Karma) wenn das test Skript ausgeführt wird:

{ 
"name": "myApp", 
"main": "app.js", 
"scripts": { 
    "test": "karma test/*", 
}, 
"dependencies": {...}, 
"devDependencies": { 
    "karma": "0.9.2" 
} 
} 

Dies gibt Ihnen den nutzen Ihrer package.json die Version von Karma zu definieren, die zu verwenden und nicht auf Ihrer CI-Box, die Konfiguration global zu halten.

+0

Was ist im Test-Skript? Kannst du mir bitte einen Hinweis geben, wie du es mit einem Skript installierst? – Agzam

+0

Schauen Sie sich die package.json an. Unter der Eigenschaft "scripts" können Sie eine andere Eigenschaft definieren, "test", deren Wert ein Befehl ist, der ausgeführt werden soll, wenn Sie 'npm test' eingeben. npm docs sind ziemlich gut hier: https://npmjs.org/doc/scripts.html – addisonj

215

npm outdated identifiziert Pakete, die aktualisiert werden sollten, und npm update <package name> kann verwendet werden, um jedes Paket zu aktualisieren. Aber npm update <package name> wird die Versionen in Ihrer package.json, die ein Problem ist, nicht aktualisieren.

Der beste Workflow ist:

  1. veralten Pakete identifizieren
  2. Aktualisieren Sie die Versionen in Ihrer package.json
  3. Run npm update die neuesten Versionen jedes Paket zu installieren

Überprüfen Sie npm-check-updates, um diesen Arbeitsablauf zu unterstützen.

  • Installieren npm-check-updates
  • Run npm-check-updates aufzulisten, welche Pakete nicht mehr aktuell sind (im Grunde das Gleiche wie Laufen npm outdated)
  • Run npm-check-updates -u alle Versionen in Ihrem package.json zu aktualisieren (dies ist die Magie Sauce)
  • Run npm update wie gewohnt die neuen Versionen Ihrer Pakete auf Basis der aktualisierten package.json zu installieren
+1

das ist toll, npm-check-updates ist genau das, wonach ich gesucht habe, tahnks – Hoto

+1

'npm veraltet' zeigt ALLE Pakete .. auch innerhalb anderer Pakete .. aber diese werden nicht mit diesem Verfahren aktualisiert, so dass sie immer erscheinen .. verwenden Sie einfach 'npm-check-updates' (wie Sie es wirklich empfohlen haben), die nur Hauptpakete von' package.json' anzeigen ... das ist relevant – davidhq

+0

Es ist wirklich ein gutes Werkzeug. Vielen Dank. :) – aps120797

109

Es gibt auch eine "frische" Modul npm-check genannt:

npm-Check

prüfen veraltet, falsch, und nicht verwendete Abhängigkeiten.

enter image description here

Es bietet auch eine komfortable interaktive Art und Weise, die Abhängigkeiten zu aktualisieren.

+0

Dies ist ein großartiges Dienstprogramm.Ich benutze es die ganze Zeit! Zuverlässiger, dass npm selbst! – skiabox

+0

Es wird besser sein, wenn das Dienstprogramm Typoskript unterstützt – Charlie

32
  • Um ein einziges lokales Paket zu aktualisieren:

    1. Erste Ihre veraltete Pakete herauszufinden:

      npm outdated

    2. Dann die Pakete aktualisieren, die Sie manuell wollen:

      npm update --save package_name

Auf diese Weise ist es nicht notwendig ist Ihre lokale package.json Datei zu aktualisieren.

Beachten Sie, dass dies Ihr Paket auf die neueste Version aktualisiert.

  • Wenn Sie eine Version in Ihrer package.json Datei zu schreiben und zu tun:

    npm update package_name

    In diesem Fall, dass Sie nur die nächste stabile Version erhalten werden (wollte) in Bezug auf die Version, die Sie geschrieben haben in Ihrer package.json Datei.

Und mit npm list (package_name) können Sie die aktuelle Version Ihrer lokalen Pakete erfahren.

+2

Dies ist die perfekte Antwort. So einfach.Die Lösungen mit höheren Bewertungen empfehlen alle, ein anderes Modul zum Aktualisieren zu installieren. Das hat mir nicht gefallen. Ich habe nach dieser einfachen Lösung gesucht. Vor allem Ihre Klarstellung, dass wir die Version in der Spalte "Gesucht" von "npm veraltet" erhalten, danke! – Noitidart

10

Ein einfacher Schritt:

$ npm i -g npm-check-updates && ncu -a && npm i

Das ist alles. Alle Paketversionen in package.json werden die neuesten sein.

+8

Erklären, was diese Schritte tun, wäre gut, um Leute zu minimieren, die einfach blind kopieren und einfügen, ohne eine Ahnung zu haben, was sie tun. Versuchen Sie zu erziehen sowie anzuleiten. –

Verwandte Themen