Dela via


Package.json-konfiguration

Om du utvecklar en Node.js app med många npm-paket är det inte ovanligt att stöta på varningar eller fel när du skapar projektet om ett eller flera paket har uppdaterats. Ibland uppstår en versionskonflikt eller så har en paketversion blivit inaktuell. Här följer några snabba tips som hjälper dig att konfigurera din package.json-fil och förstå vad som händer när du ser varningar eller fel. Det här är inte en fullständig guide till package.json och fokuserar bara på versionshantering av npm-paket.

Versionssystemet för npm-paket har strikta regler. Versionsformatet följer här:

[major].[minor].[patch]

Anta att du har ett paket i din app med en version av 5.2.1. Huvudversionen är 5, delversionen är 2 och korrigeringen är 1.

  • I en större versionsuppdatering innehåller paketet nya funktioner som inte är bakåtkompatibla, dvs. icke-bakåtkompatibla ändringar.
  • I en delversionsuppdatering har nya funktioner lagts till i paketet som är bakåtkompatibla med tidigare paketversioner.
  • I en korrigeringsuppdatering ingår en eller flera felkorrigeringar. Felkorrigeringar är alltid bakåtkompatibla.

Det är värt att notera att vissa npm-paketfunktioner har beroenden. Om du till exempel vill använda en ny funktion i TypeScript-kompilatorpaketet (ts-loader) med webpack är det möjligt att du också skulle behöva uppdatera webpack-npm-paketet och webpack-cli-paketet.

För att hantera paketversioner stöder npm flera noteringar som du kan använda i package.json. Du kan använda dessa noteringar för att styra vilken typ av paketuppdateringar som du vill godkänna i din app.

Låt oss säga att du använder React och behöver inkludera react och react-dom npm-paketet. Du kan ange det på flera sätt i dinpackage.json-fil . Du kan till exempel ange användning av den exakta versionen av ett paket på följande sätt.

"dependencies": {
  "react": "16.4.2",
  "react-dom": "16.4.2",
},

Med föregående notation får npm alltid den exakta version som angetts, 16.4.2.

Du kan använda en särskild notation för att begränsa uppdateringar till patchuppdateringar (felkorrigeringar). I det här exemplet:

"dependencies": {
  "react": "~16.4.2",
  "react-dom": "~16.4.2",
},

du använder tilde-tecknet (~) för att tala om för npm att endast uppdatera ett paket när det korrigeras. Npm kan därför uppdatera react 16.4.2 till 16.4.3 (eller 16.4.4 osv.), men den accepterar inte en uppdatering av huvudversionen eller delversionen. Därför uppdateras inte 16.4.2 till 16.5.0.

Du kan också använda symbolen caret (^) för att ange att npm kan uppdatera delversionsnumret.

"dependencies": {
  "react": "^16.4.2",
  "react-dom": "^16.4.2",
},

Med den här notationen kan npm uppdatera react 16.4.2 till 16.5.0 (eller 16.5.1, 16.6.0 osv.), men den accepterar inte en uppdatering av huvudversionen. Därför uppdateras inte 16.4.2 till 17.0.0.

När npm uppdaterar paket genereras en package-lock.json fil som visar de faktiska npm-paketversionerna som används i din app, inklusive alla kapslade paket. Även om package.json styr direkta beroenden för din app, styr den inte kapslade beroenden (andra npm-paket som krävs av ett visst npm-paket). Du kan använda package-lock.json-filen i utvecklingscykeln om du behöver se till att andra utvecklare och testare använder de exakta paket som du använder, inklusive kapslade paket. Mer information finns i package-lock.json i npm-dokumentationen.

För Visual Studio läggs inte filenpackage-lock.json till i projektet, men du hittar den i projektmappen.