För npm-modifiering node_modules träd eller någon åtgärd package.json genereras en package-lock.json automatiskt. Den beskriver det exakta träd som genereras så att efterföljande installationer kan generera samma träd, oavsett mellanliggande beroendeuppdateringar.
Denna fil är avsedd att skickas till källkodsarkivet och är tillgänglig för olika ändamål:
Beskriver en enda representation av beroendeträdet för att garantera att teamkamrater, distributioner och kontinuerlig integration säkerställer att exakt samma beroenden installeras.
Ge användare ett verktyg för att "avancera" till ett tidigare node_modules tillstånd utan att behöva committa katalogen själv.
Underlätta större insyn i trädändringar genom läsbara skillnader i källkontroll.
Och optimera installationsprocessen genom att låta npm hoppa över den dubbla metadata-lösningen från tidigare installerade paket.
En viktig detalj med package-lock.json är att den inte kan släppas och kommer att ignoreras om den finns utanför topppaketet. Den delar formatet med npm-shrinkwrap.json, det är i princip samma fil men tillåter publicering. Detta rekommenderas inte om du inte distribuerar ett CLI-verktyg eller på annat sätt använder releaseprocessen för att skapa ett produktionspaket.
Om både package-lock.json och npm-shrinkwrap.json finns i rotkatalogen i ett paket kommer package-lock.json att ignoreras helt.
Originallänk: https://docs.npmjs.com/files/package-lock.json
Sedan lanseringen av npm 5.x har rollen för 5.6.0-låset ändrats många gånger, och nu har många små vita texter på Internet fastnat i den tidigare dokumentöversättningen.
Jag uppdaterade från npm3.x till npm5, men upptäckte att fenomenet när man körde 'npm i' inte stämde överens med den populärvetenskapliga artikeln på internet.
Det nämns att oavsett hur package.json fil ändras, om npm i upprepade gånger körs, kommer npm att laddas ner enligt versionsinformationen som beskrivs i låsfilen.
Det nämns också att när npm i upprepas, ignorerar npm låsinformationen och laddar ner uppdateringsmodulen enligt den semantiska versionsversionen av paketet i package.json (låset verkar vara värdelöst).
**Enligt informationen har reglerna för npm i ändrats tre gånger sedan npm 5.0 släpptes. **
1. npm 5.0.x-version, oavsett hur package.json ändras, kommer npm i att laddas ner enligt låsfilen
package-lock.json fil uppdateras inte efter att package.json fil ändrats · Nummer #16866 · NPM/NPM-https://github.com/npm/npm/issues/16866 Det här problemet klagar på det här problemet, uppenbarligen ändrade jag package.json manuellt, varför ger du mig inte ett uppgraderingspaket! Och sedan leder det till frågan om 5.1.0...
2. Efter version 5.1.0 kommer npm-installationen att ignorera låsfilen för att ladda ner den senaste npm:n
Då tog någon upp frågan varför paketlås ignoreras? · Nummer #17979 · NPM/NPM-https://github.com/npm/npm/issues/17979 Klagomålet utvecklades så småningom till reglerna efter version 5.4.2.
3. Efter version 5.4.2, varför ignoreras paketlås? · Nummer #17979 · NPM/NPM-https://github.com/npm/npm/issues/17979
Grovt sett, om package.json ändras och package.json skiljer sig från låsfilen, kommer npm att ladda ner det senaste paketet enligt versionsnummer och den semantiska betydelsen av paketet när 'npm i' körs, och uppdatera det till lås.
Om båda är i samma tillstånd kommer jag att ladda ner npm enligt lås, oavsett om den faktiska paketversionen är ny eller inte.
|