Qual è la differenza tra –save e –save-dev?

Qual è la differenza tra:

npm install [nome_pacchetto] –save

e

npm install [nome_pacchetto] –save-dev

Cosa significa questo?

    • --save-dev è usato per salvare il pacchetto a scopo di sviluppo. Esempio: unit test, minification ..
    • --save viene utilizzato per salvare il pacchetto richiesto per l’esecuzione dell’applicazione.

    La differenza tra --save e --save-dev potrebbe non essere immediatamente notabile se li hai provati entrambi sui tuoi progetti. Quindi ecco alcuni esempi …

    Diciamo che stavi costruendo un’app che usava il pacchetto del momento per analizzare e visualizzare le date. La tua app è uno scheduler quindi ha davvero bisogno di questo pacchetto per funzionare, come in: non può funzionare senza di esso . In questo caso useresti

     npm install moment --save 

    Questo creerebbe un nuovo valore nel pacchetto package.json

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

    Quando si sta sviluppando, è davvero utile utilizzare strumenti come le suite di test e potrebbe essere necessario il core del jasmine e il karma . In questo caso useresti

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

    Questo creerebbe anche un nuovo valore nel pacchetto package.json

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

    Non hai bisogno della suite di test per eseguire l’app nel suo stato normale, quindi è una dipendenza di tipo --save-dev , niente di più. Puoi vedere come se non capisci cosa sta realmente accadendo, è un po ‘difficile da immaginare.

    Preso direttamente dalle dipendenze di # documenti docs NPM

    dipendenze

    Le dipendenze sono specificate in un object semplice che associa il nome di un pacchetto a un intervallo di versioni. L’intervallo di versione è una stringa che ha uno o più descrittori separati dallo spazio. Le dipendenze possono anche essere identificate con un tarball o git URL.

    Si prega di non inserire cablaggi di prova o transpilers nell’object delle dipendenze. Vedi devDependencies , sotto.

    Anche nei documenti, ti chiede di usare –save-dev per moduli come i cablaggi di prova.

    Spero che questo aiuti ed è chiaro.

    Di default, NPM installa semplicemente un pacchetto sotto node_modules. Quando stai provando ad installare le dipendenze per la tua app / modulo, dovresti prima installarle e poi aggiungerle alla sezione delle dependencies del tuo package.json .

    --save-dev aggiunge il pacchetto di terze parti alle dipendenze di sviluppo del pacchetto. Non verrà installato quando qualcuno installa il pacchetto. Solitamente è installato solo se qualcuno clona il repository di origine e esegue npm install al suo interno.

    --save aggiunge il pacchetto di terze parti alle dipendenze del pacchetto. Verrà installato insieme al pacchetto ogni volta che qualcuno esegue il npm install package .

    Le dipendenze degli sviluppatori sono quelle dipendenze che sono necessarie solo per lo sviluppo del pacchetto. Ciò può includere i test runner, i compilatori, i packager, ecc. Entrambi i tipi di dipendenze sono memorizzati nel file package.json del pacchetto. --save aggiunge alle dependencies , --save-dev aggiunge a devDependencies

    la documentazione di installazione di npm può essere consultata qui.

    Come suggerito da @ andreas-hultgren in questa risposta e secondo i documenti di npm :

    Se qualcuno sta pianificando di scaricare e utilizzare il modulo nel proprio programma, probabilmente non vorranno né dovranno scaricare e creare il test esterno o il framework della documentazione che si utilizza.

    Tuttavia, per lo sviluppo di webapp, Yeoman (uno strumento di impalcatura che installa tra l’altro un file package.json con peer-review, pre-scritto) inserisce tutti i pacchetti in devDependencies e nulla nelle dipendenze, quindi sembra che l’uso di --save-dev è una scommessa sicura nello sviluppo webapp , almeno.

    Un perfetto esempio di questo è:

     $ npm install typescript --save-dev 

    In questo caso, vorrai avere Typescript (un linguaggio di codifica javascript-parseable) disponibile per lo sviluppo, ma una volta che l’app è stata distribuita, non è più necessaria, poiché tutto il codice è stato trasposto in javascript. In quanto tale, non avrebbe senso includerlo nell’app pubblicata. In effetti, occuperebbe solo spazio e aumenterebbe i tempi di download.

    --save-dev salva le specifiche semere nell’array “devDependencies” nel file del descrittore del pacchetto, --save salva in “dipendenze”.

    –save-dev viene utilizzato per i moduli utilizzati nello sviluppo dell’applicazione, non richiede durante l’esecuzione in ambiente di produzione –save viene utilizzato per aggiungerlo in package.json ed è necessario per l’esecuzione dell’applicazione.

    Esempio: express, body-parser, lodash, helmet, mysql tutti questi sono usati durante l’esecuzione dell’applicazione –salva per mettere dipendenze mentre mocha, istanbul, chai, sonarqube-scanner sono tutti usati durante lo sviluppo, quindi metti quelli in dev -dipendenze.

    npm link o npm install installerà anche i moduli dev-dependency insieme ai moduli dependency nella cartella del progetto

    In genere non si desidera aumentare il pacchetto di produzione con le cose che si intende utilizzare solo a fini di sviluppo. Quindi usa l’opzione –save-dev (o -D) per separare quei pacchetti come watcher (nodemon), framework unit test (jest, jasmine, mocha, chai etc.etc.)

    È necessario installare qualsiasi altro pacchetto di libreria necessario per il funzionamento dell’app utilizzando –save (o -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 

    Se apri il file package.json, vedrai queste voci elencate in due sezioni diverse:

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

    Risposte chiare sono già fornite. Ma vale la pena ricordare come devDependencies influenzi l’installazione dei pacchetti:

    Per impostazione predefinita, l’installazione di npm installerà tutti i moduli elencati come dipendenze in package.json. Con il flag –production (o quando la variabile di ambiente NODE_ENV è impostata su production), npm non installerà i moduli elencati in devDependencies.

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