Versiuni semver (^, ~, >=) în Node.js

npm și pachete Toate versiunile npm

Cum citește npm versiunile MAJOR.MINOR.PATCH și intervalele ^, ~, >=, x din package.json.

Sintaxă
MAJOR.MINOR.PATCH
^1.2.3   ~1.2.3   >=1.2.0 <2.0.0   1.x   1.2.3

Ce face Versiuni semver (^, ~, >=)

Pachetele npm folosesc versionarea semantică (semver): MAJOR.MINOR.PATCH. PATCH crește la corecturi, MINOR la funcții noi compatibile, MAJOR la schimbări care pot strica codul celor care folosesc pachetul. Versiunile cu -beta.0, -rc.1 sunt versiuni de test.

În package.json nu scrii de obicei o versiune exactă, ci un interval: ce versiuni accepți la instalare și la npm update. npm install scrie implicit intervalul cu ^.

Interval Acceptă Exemplu
1.2.3 Doar versiunea exactă 1.2.3
^1.2.3 Aceeași versiune majoră >=1.2.3 <2.0.0
~1.2.3 Aceeași versiune minoră >=1.2.3 <1.3.0
^0.2.3 Sub 1.0, ^ blochează minora >=0.2.3 <0.3.0
1.x sau 1 Orice 1.*.* >=1.0.0 <2.0.0
>=1.2.0 <2.0.0 Interval explicit 1.2.0 … 1.99.99
* sau latest Orice versiune (de evitat)

Exemple

Exemplul 1: Ce versiuni acceptă ^ și ~

Pachetul semver (același pe care îl folosește npm intern) primește un interval cu -r și o listă de versiuni și le afișează doar pe cele acceptate.

npx --yes semver -r "^1.2.0" 1.1.9 1.2.0 1.2.7 1.9.0 2.0.0
npx --yes semver -r "~1.2.0" 1.2.0 1.2.7 1.3.0

Ieșire în terminal

1.2.0
1.2.7
1.9.0
1.2.0
1.2.7

Exemplul 2: Versiuni 0.x, intervale explicite și x

Sub 1.0.0, ^0.2.3 nu acceptă 0.3.0: la pachetele încă instabile orice minoră nouă poate aduce schimbări incompatibile.

npx --yes semver -r "^0.2.3" 0.2.3 0.2.9 0.3.0
npx --yes semver -r ">=1.2.0 <2.0.0" 1.1.0 1.5.0 2.0.0
npx --yes semver -r "1.x" 1.0.0 1.9.9 2.0.0

Ieșire în terminal

0.2.3
0.2.9
1.5.0
1.0.0
1.9.9

Exemplul 3: Următoarea versiune

Ce ar face npm version minor pe un proiect la 1.4.2.

npx --yes semver -i minor 1.4.2

Ieșire în terminal

1.5.0

Greșeli frecvente

  • Crezi că ^1.2.3 instalează fix 1.2.3: instalează cea mai nouă 1.x disponibilă. Versiunea exactă instalată o fixează package-lock.json.
  • Folosești * sau latest ca interval: o versiune majoră nouă intră în proiect fără să observi.
  • Te aștepți ca ^0.2.3 să accepte 0.3.0, ca la versiunile 1.x: pentru 0.x, ^ se comportă ca ~.

Comenzi înrudite

  • npm install: Instalează pachete din registrul npm în node_modules și le trece în package.json și package-lock.json.
  • npm update / npm outdated: npm outdated arată pachetele rămase în urmă; npm update le aduce la cea mai nouă versiune permisă de intervalul din package.json.
  • npm version: Crește versiunea din package.json după regulile semver și, într-un depozit Git, face commit și etichetă vX.Y.Z.
  • package-lock.json: Fișierul în care npm notează versiunea exactă a fiecărui pachet instalat, ca toată lumea să primească același node_modules.
  • package.json: Fișierul de configurare al unui proiect Node.js: nume, versiune, tipul modulelor, scripturi, dependențe și versiunea Node cerută.