Lassen Sie `npm install --save` eine strikte Version zu package.json hinzufügen

74

Wenn Sie ausführen npm install --save somepackage, wird normalerweise so etwas in package.json hinzugefügt:

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

Da der Version ein Caret (^) vorangestellt ist, bedeutet dies, dass bei einer späteren Ausführung npm installmöglicherweise stattdessen Version 2.3.0 installiert wird. Dies kann aus ziemlich offensichtlichen Gründen unerwünscht sein. npm shrinkwrapist nützlich, löst das Problem aber nicht wirklich.

Ich habe also mehrere Fragen:

  1. Kann bei der Installation eines Pakets angegeben werden, dass es in package.json auf eine bestimmte Version festgelegt werden soll (kein Caret vor der Versionsnummer)?
  2. Gibt es eine Möglichkeit, beim Veröffentlichen eines Pakets auf npm zu verhindern, dass das Caret standardmäßig vor der Version eingefügt wird, wenn andere Entwickler Ihr Paket installieren?
twiz
quelle

Antworten:

118

Um standardmäßig eine genaue Version anzugeben, können Sie Ihre npm-Konfiguration ändern mit save-exact:

npm config set save-exact true

Sie können auch die vorangestellte Version mit einer Tilde mit angeben save-prefix.

Und nein, Sie können den Benutzer nicht zwingen, auf eine Minor- oder Patch-Version zu aktualisieren. NPM verwendet Semver und ist die empfohlene Methode zum Veröffentlichen von Paketen.

Pierre Inglebert
quelle
24
Wenn Sie dies nur für ein bestimmtes Paket tun möchten, können Sie --save-exactes der Befehlszeile hinzufügen . ZB , npm install --save --save-exact somepackage.
Gilly3
1
Dies speichert nur die genauen Versionen Ihrer top level packges- die in angegebenen package.json, funktioniert jedoch nicht für Pakete, von top level packagesdenen abhängig ist. yarnpkg.com löst dieses Problem mit der yarn.lockDatei, sodass Sie immer genaue Versionen aller Ihrer Pakete haben.
kuncevic.dev
10

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

// npm
npm install --save --save-exact react

// yarn
yarn add --exact react

Ich habe einen Blog-Beitrag darüber erstellt, wenn jemand in Zukunft danach sucht.

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

Dale Jefferson
quelle
1
Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich dabei, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage in Zukunft für Leser beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen. Sagen Sie in Ihrem Fall außerdem nicht "Ich habe den Code in meinem Blog-Beitrag erklärt", sondern
fügen Sie
Vielen Dank für das Feedback Chade, ich habe mehr Details hinzugefügt.
Dale Jefferson
3

Lauf:

npm install --save --save-exact my-module@my-specific-version

Hinzufügen einer Antwort, um diesen Rat leichter verständlich zu machen .

Zanon
quelle