2015-06-05 11 views
41

Wenn Sie npm install --save somepackage laufen, ist es in der Regel so etwas wie dies in package.json fügt hinzu:Make `npm installieren --save` eine strenge Version in den package.json

"dependencies": { 
    "somepackage": "^2.1.0" 
} 

Da die Version mit einem caret vorangestellt (^), wenn Sie später npm install ausführen, wird stattdessen Version 2.3.0 installiert. Dies kann aus offensichtlichen Gründen unerwünscht sein. npm shrinkwrap ist nützlich, aber löst das Problem nicht wirklich.

Also, ich habe einige Fragen:

  1. Wenn ein Paket installiert, ist es möglich, festzulegen, dass Sie es auf eine bestimmte Version in package.json gesetzt werden sollen (keine caret vor der Versionsnummer) ?
  2. Gibt es bei der Veröffentlichung eines Pakets in npm eine Möglichkeit, den Standard zu verhindern, dass das Caret vor der Version eingeschlossen wird, wenn andere Entwickler Ihr Paket installieren?

    npm config set save-exact true

    Sie können auch mit save-prefix

    Und die prepend Version mit einer Tilde angeben:

Antwort

70

Um standardmäßig eine genaue Version angeben, können Sie Ihre npm Config mit save-exact ändern Nein, Sie können den Benutzer nicht zwingen, auf eine Minor- oder Patch-Version zu aktualisieren. NPM verwendet semver und empfiehlt die Veröffentlichung von Paketen.

+14

Wenn Sie nur diese für ein bestimmtes Paket tun möchten, können Sie fügen Sie '--save-exact' auf der Kommandozeile. ZB 'npm install --save --save-exact somepackage'. – gilly3

+1

In Verbindung stehende https://www.npmjs.com/package/strict-version –

+0

dies nur speichern Sie nur die genauen Versionen Ihrer 'Top-Level-Packges" - diejenigen, die in 'package.json' angegeben, aber nicht für alle arbeiten Pakete, die "Top-Level-Pakete" sind, hängt davon ab. https://yarnpkg.com/ Lösen dieses Problem mit 'gam.lock' Datei, so dass Sie immer genaue Versionen aller Ihrer Pakete haben. – Kuncevic

0

Sie können das Standardverhalten mithilfe der Option --save-exact ändern.

Ich habe einen Blogpost darüber erstellt, wenn jemand in Zukunft danach suchen wird.

https://www.dalejefferson.com/blog/how-to-save-exact-npm-package-versions/

+1

Während dieses Code-Snippet die Frage lösen kann, hilft [einschließlich einer Erklärung] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) wirklich, die Qualität Ihres Posts zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. Zusätzlich, in Ihrem Fall, sagen Sie nicht "Ich habe den Code in meinem Blog-Post erklärt", sondern die Mehrheit der Inhalte hier, und verwenden Sie den Link nur als Referenz –

+0

Danke für die Rückmeldung Chade, I ' habe mehr Details hinzugefügt. –