Wat is het verschil tussen –save en –save-dev?

Wat is het verschil tussen:

npm install [package_name]

en:

npm install [package_name] --save

en:

npm install [package_name] --save-dev

Wat betekent dit? En wat is het effect van de zoekwoorden --saveen -dev?


Antwoord 1, autoriteit 100%

  • --save-devwordt gebruikt om het pakket op te slaan voor ontwikkelingsdoeleinden.
    Voorbeeld: unit tests, minificatie..
  • --savewordt gebruikt om de
    pakket dat nodig is om de toepassing te laten werken.

Antwoord 2, autoriteit 99%

Het verschil tussen --saveen --save-devis misschien niet meteen merkbaar als je ze allebei in je eigen projecten hebt geprobeerd. Dus hier zijn een paar voorbeelden…

Stel dat u een app aan het bouwen was die gebruikmaakte van het momentpakket om datums te ontleden en weer te geven. Je app is een planner, dus het heeft dit pakket echt nodig om te kunnen werken, zoals in: kan niet draaien zonder. In dit geval gebruikt u

npm install moment --save

Dit zou een nieuwe waarde creëren in uw package.json

"dependencies": {
   ...
   "moment": "^2.17.1"
}

Wanneer u zich ontwikkelt, helpt het echt om tools zoals testsuites te gebruiken en mogelijk jasmijn- Core en karma . In dit geval zou u

gebruiken

npm install jasmine-core --save-dev
npm install karma --save-dev

Dit zou ook een nieuwe waarde in uw pakket maken.json

"devDependencies": {
    ...
    "jasmine-core": "^2.5.2",
    "karma": "^1.4.1",
}

U doet niet nodig De testsuite om de app in zijn normale toestand uit te voeren, dus het is een --save-devType afhankelijkheid, niets meer. Je kunt zien hoe je niet begrijpt wat echt gebeurt, het een beetje moeilijk voorstelt.

rechtstreeks genomen van NPM DOCS DOCKS # afhankelijkheden

afhankelijkheden

Afhankelijkheden zijn opgegeven in een eenvoudig object dat een pakketnaam kaarten
naar een versiebereik. Het versiegebied is een tekenreeks met één of
meer ruimte-gescheiden descriptoren. Afhankelijkheden kunnen ook worden geïdentificeerd
met een Tarball of Git-URL.

Plaats geen testharnesses of transpilers in uw afhankelijkheden
object. Zie DevDePendencies
, hieronder.

Zelfs in de Documenten, vraagt ​​het u om –Save-Dev voor modules zoals Test Harnesses te gebruiken.

Ik hoop dat dit helpt en duidelijk is.


3, Autoriteit 24%

NPM installeert standaard een pakket onder node_modules. Als u afhankelijkheden voor uw app/module probeert te installeren, moet u deze eerst installeren en vervolgens toevoegen aan de sectie dependenciesvan uw package.json.

--save-devvoegt het pakket van derden toe aan de ontwikkelingsafhankelijkheden van het pakket. Het wordt niet geïnstalleerd wanneer iemand npm installrechtstreeks uitvoert om uw pakket te installeren. Het wordt meestal alleen geïnstalleerd als iemand uw bronrepository eerst klonenen vervolgens npm installerin uitvoert.

--savevoegt het pakket van derden toe aan de afhankelijkheden van het pakket. Het wordt samen met het pakket geïnstalleerd wanneer iemand npm install packageuitvoert.

Dev-afhankelijkheden zijn die afhankelijkheden die alleen nodig zijn voor het ontwikkelen van het pakket. Dat kunnen testrunners, compilers, packagers, etc. zijn.
Beide soorten afhankelijkheden worden opgeslagen in het bestand package.jsonvan het pakket. --savevoegt toe aan dependencies, --save-devvoegt toe aan devDependencies

npm install-documentatie kan hier worden geraadpleegd.

Houd er rekening meedat --savenu de standaardoptie is, sinds NPM 5. Daarom is het niet meer expliciet nodig. Het is mogelijk om npm installuit te voeren zonder de --saveom hetzelfde resultaat te bereiken.


Antwoord 4, autoriteit 15%

Laat me je een voorbeeld geven,

  • U bent een ontwikkelaar van een zeer SERIOUS npm-bibliotheekdie verschillende testbibliotheken gebruikt om het pakket te testen.
  • Gebruikers downloaden uw bibliotheek en willen deze in hun code gebruiken. Moeten ze ook uw testbibliotheken downloaden? Misschien gebruik je jestom te testen en gebruiken zij mocha. Wil je dat ze ook jestinstalleren? Alleenom je bibliotheek te beheren?

Nee. Rechtsaf? Daarom staan ze in devDependencies.

Als iemand dat doet, npm i yourPackageworden alleen de bibliotheken geïnstalleerd die nodig zijn om uw bibliotheek UITVOERENte installeren. Andere bibliotheken waarmee je je code hebt gebundeld of waarmee je hebt getest en gespot, worden niet geïnstalleerd omdat je ze in devDependencieshebt geplaatst. Best netjes toch?

Dus Waarommoeten de ontwikkelaars de devDependancesblootleggen?

Stel dat uw pakket een open-sourcepakket is en dat honderden mensen pull-verzoeken naar uw pakket sturen. Hoe zullen ze het pakket dan testen? Ze zullen uw repo git cloneen wanneer ze een npm izouden doen, de afhankelijkhedenevenals devDependencies.
Omdat ze je pakket niet gebruiken. Ze ontwikkelen het pakket verder, dus om uw pakket te testen, moeten ze de bestaande testcases doorstaan en ook nieuwe schrijven. Ze moeten dus uw devDependenciesgebruiken die alle test-/bouw-/spotbibliotheken bevatten die JIJ hebt gebruikt.


Antwoord 5, autoriteit 9%

Een perfect voorbeeld hiervan is:

$ npm install typescript --save-dev

In dit geval zou je Typescript (een door javascript parseeerbare codeertaal) beschikbaar willen hebben voor ontwikkeling, maar als de app eenmaal is geïmplementeerd, is dit niet langer nodig, omdat alle code is omgezet naar javascript. Als zodanig zou het geen zin hebben om het in de gepubliceerde app op te nemen. Het zou inderdaad alleen maar ruimte in beslag nemen en de downloadtijden verhogen.


Antwoord 6, autoriteit 5%

Zoals gesuggereerd door @andreas-hultgren in dit antwoorden volgens de npm docs:

Als iemand van plan is uw module in zijn programma te downloaden en te gebruiken, dan willen of hoeven ze waarschijnlijk niet het externe test- of documentatieraamwerk dat u gebruikt te downloaden en te bouwen.

Echter, voor webapp-ontwikkeling, Yeoman(een steigertool die een peer-reviewed, vooraf geschreven pakket installeert. json-bestand onder andere) plaatst alle pakketten in devDependencies en niets in afhankelijkheden, dus het lijkt erop dat het gebruik van --save-deveen veilige gok is in de ontwikkeling van webapp, tenminste.


Antwoord 7, autoriteit 3%

--save-devslaat semver spec op in “devDependencies” array in uw pakketdescriptorbestand, --saveslaat het in plaats daarvan op in “dependencies”.


Antwoord 8, autoriteit 2%

–save-devwordt gebruikt voor modules die worden gebruikt bij de ontwikkeling van de applicatie, niet vereist tijdens het draaien in een productieomgeving
–savewordt gebruikt om het toe te voegen in package.json en is vereist voor het uitvoeren van de applicatie.

Voorbeeld: express,body-parser,lodash,helm,mysql al deze worden gebruikt tijdens het uitvoeren van de toepassing gebruik –save om afhankelijkheden in te voeren terwijl mokka,istanbul,chai,sonarqube-scanner allemaal worden gebruikt tijdens de ontwikkeling, dus zet degenen die afhankelijk zijn van ontwikkelaars .

npm link of npm install installeert ook de dev-dependency-modules samen met de dependency-modules in uw projectmap


Antwoord 9, autoriteit 2%

Er zijn al duidelijke antwoorden gegeven. Maar het is de moeite waard om te vermelden hoe devDependenciesvan invloed is op het installeren van pakketten:

Npm install zal standaard alle modules installeren die als afhankelijkheden worden vermeld in package.json . Met de –production vlag (of wanneer de NODE_ENV omgevingsvariabele is ingesteld op production ), zal npm geen modules installeren die worden vermeld in devDependencies .

Zie: https://docs.npmjs.com/cli/install


Antwoord 10

Alle uitleg hier is geweldig, maar er ontbreekt een heel belangrijk ding: hoe installeer je alleen productie-afhankelijkheden? (zonder de ontwikkelingsafhankelijkheden).
We scheiden dependenciesvan devDependenciesdoor --saveof --save-devte gebruiken.
Om alles wat we gebruiken te installeren:

npm i

Om alleen productiepakketten te installeren, moeten we het volgende gebruiken:

npm i --only=production

Antwoord 11

Over het algemeen wil je het productiepakket niet opblazen met dingen die je alleen voor ontwikkelingsdoeleinden wilt gebruiken.

Gebruik de optie --save-dev(of -D) om pakketten zoals Unit Test-frameworks (gras, jasmijn, mokka, chai, enz.) te scheiden.

Andere pakketten die uw app nodig heeft voor productie, moeten worden geïnstalleerd met --save(of -S).

npm install --save lodash       //prod dependency
npm install -S moment           // "       "
npm install -S opentracing      // "       "
npm install -D jest                 //dev only dependency
npm install --save-dev typescript   //dev only dependency

Als u het bestand package.jsonopent, ziet u deze vermeldingen in twee verschillende secties:

"dependencies": {
  "lodash": "4.x",
  "moment": "2.x",
  "opentracing": "^0.14.1"
},
"devDependencies": {
    "jest": "22.x",
    "typescript": "^2.8.3"
},

Antwoord 12

  1. –save-dev (alleen gebruikt bij de ontwikkeling, niet bij de productie)

  2. –save (productie-afhankelijkheden)

  3. –global of -g (globaal gebruikt, d.w.z. kan overal in ons lokale systeem worden gebruikt)


Antwoord 13

Als je een npm-pakket installeert met npm install , installeer je het als een afhankelijkheid.

Het pakket wordt automatisch vermeld in het bestand package.json, onder de lijst met afhankelijkheden (vanaf npm 5: voordat u –save handmatig moest opgeven).
ex. npm installeer lodash
Nadat je op enter hebt gedrukt, controleer je je package.json-bestand.

“afhankelijkheden”: {
“lodash”: “4.x”,
},

Als u de vlag -D of –save-dev toevoegt, installeert u deze als een ontwikkelingsafhankelijkheid, waardoor deze wordt toegevoegd aan de devDependencies-lijst.

bijv. npm install –save-dev lite-server
Nadat u op enter heeft gedrukt, controleert u uw package.json-bestand

“devDependencies”: {
“lite-server”: “^2.6.1”
}

Ontwikkelingsafhankelijkheden zijn bedoeld als pakketten voor alleen ontwikkeling, die niet nodig zijn in productie. Bijvoorbeeld het testen van pakketten, webpack of Babel.

Als je in productie gaat en je typt npm install en de map bevat een package.json-bestand, worden ze geïnstalleerd, aangezien npm ervan uitgaat dat dit een ontwikkelingsimplementatie is.

U moet de vlag –production instellen (npm install –production) om te voorkomen dat deze ontwikkelingsafhankelijkheden worden geïnstalleerd.


14

Mensen gebruiken NPM op de productie om Wicked Cool Thums te doen, Node.js is hiervan een voorbeeld, zodat u niet wilt dat al uw Dev-gereedschappen worden uitgevoerd.

Als u Slok (of vergelijkbaar) gebruikt om build-bestanden te maken om op uw server te zetten, dan maakt het niet echt uit.


15

In principe schrijven we

npm install package_name

Maar speciaal voor het testen van het doel hoeven we geen pakket uit te voeren terwijl de toepassing in de normale toestand wordt uitgevoerd, zodat knooppunt een goede manier introduceert om dit probleem op te lossen. Wanneer we schrijven

npm install package_name --save-dev

Op dat moment is dit pakket alleen geïnstalleerd voor ontwikkelingsdoelstelling.

Other episodes