2021 JavaScript Full-Stack Bootcamp är nu öppet för anmälningar!
Bör du lägga in mappen node_modules i Git?
Jag nämner Git, men samma sak gäller för alla versionshanteringssystem som du råkar använda
Det är en bra fråga att ställa. Det finns för- och nackdelar.
Jag föreslår att standardinställningen är att inte committa mappen node_modules och istället lägga till den i din .gitignore
-fil.
Du kanske har speciella behov som upphäver detta beslut.
Jag diskuterar ämnet så att du kan bilda dig en egen åsikt.
Här är några argument som talar för att inte committa node_modules
Du håller din Git-historik ren. När du lägger till ett nytt paket lagrar du filändringarna package.json
och package-lock.json
.När du bestämmer dig för att uppdatera paketversionen lagrar du bara filändringen package-lock.json
.
package-lock.json
är en relativt ny funktion i npm, som föråldrat kommandot shrinkwrap som användes tidigare
Du undviker att lägga in eventuellt hundratals MB beroenden i ditt arkiv, och det innebär att det med tiden kommer att bli snabbare att arbeta med. Byte av grenar och utcheckning av koden är 2 operationer som påverkas enormt av förvarets storlek.
När du arbetar med grenar kan du få sammanslagningskonflikter som sträcker sig bortom din kod, och istället involverar beroendens kod. Detta är inte trevligt att hantera och kan göra att du förlorar mycket tid. Att undvika att sätta
En pull request eller merge om man ändrar beroenden, kommer att ha mycket fler filer inblandade i processen. Verktygen blir långsammare eller bestämmer sig till och med för att inte visa hela skillnaden (GitHub, till exempel)
Native node-moduler måste kompileras om du distribuerar till en annan plattform än din utvecklingsmaskin (vanligt användningsfall: du utvecklar på Mac, distribuerar på Linux). Du måste anropa npm rebuild
, vilket gör att servern inte är synkroniserad.
När du inte lägger in node_modules innebär det att du måste lista alla dina moduler i package.json
(och package-lock.json
) som ett obligatoriskt steg. Detta är bra eftersom du kanske inte har den flit som krävs för att göra det, och vissa av npm-operationerna kan gå sönder om du inte gör det.
Tip: Det finns inget behov av att använda den specifika versionen i din
package.json
-fil, inte längre sedan införandet avpackage-lock.json
-filen.
Om du använder separata dependencies
– och devDependencies
-uppsättningar, genom att överlämna node_modules
-mappen överlämnar du i princip devDependencies
och det finns inget (enkelt) sätt för produktionsbygget att göra sig av med dem.
Grunder som kan leda till att du överlämnar node_modules och hur du kan mildra dem
Ett npm
-paket kan tas bort av sin författare från npm-registret. Det hände med den berömda left-pad
-incidenten 2016 (läs mer). Det är mycket ovanligt att detta händer för populära paket. Om detta händer kanske du inte längre har tillgång till just den delen av funktionaliteten.
Du kan också hävda att npm
inte garanterat kommer att finnas kvar på obestämd tid, det kan försvinna, så ett enkelt sätt att garantera att du har hela koden för din applikation i framtiden är att lägga in den tillsammans med din app.
Varje gång du använder ett paket, skapa en gaffel på GitHub. Varje gång du använder ett paket, håll det uppdaterat med ursprunget (kan automatiseras).
Detta är inte alltid praktiskt eftersom paket kan ha dussintals egna beroenden.
Du kan använda en privat repository-server för ditt projekt och använda den för att hysa alla dina beroenden.
Optioner inkluderar
- sinopia
- npm_lazy
- npm-lazy-mirror
- artifactory
- npm Enterprise, från npm-företaget
En annan anledning att lägga in beroendena är möjligheten att snabbt redigera koden, om du hittar ett fel eller om du vill lägga till något i ett bibliotek.
Detta är ett tveeggat svärd: om du gör det förlorar du möjligheten att uppgradera paketet om nya versioner görs, och det är bara bra för snabba, tillfälliga korrigeringar.
Den optimala lösningen är att antingen skicka in en PR som gör det du vill till originalprojektet eller gaffa det och använda din gaffel som ett beroende.
Ladda ner min kostnadsfria Node.js Handbook
The 2021 JavaScript Full-Stack Bootcamp IS NOW OPEN FOR SIGNUPS UNTIL NEXT TUESDAY! Missa inte detta tillfälle, anmäl dig redan idag!
Mer node tutorials:
- Hur man använder löften och await med Node.js callback-baserade funktioner
- The Node Core Modules
- Parsing JSON with Node.js
- Arbeta med filbeskrivare i Node
- Node.js Streams
- Hur man får fram det senast uppdaterade datumet för en fil med hjälp av Node.js
- The Pug Guide
- Hämta den aktuella mappen i Node
- Hur man använder Node.js REPL