2015-06-05 15 views
41

Quando si esegue npm install --save somepackage, di solito aggiunge qualcosa di simile in package.json:Fai `npm installare --save` aggiungere una versione rigorosa per package.json

"dependencies": { 
    "somepackage": "^2.1.0" 
} 

Poiché la versione viene anteposto con un accento circonflesso (^), questo significa che se successivamente si esegue npm install, potrebbe invece installare la versione 2.3.0. Questo può essere indesiderabile per ragioni abbastanza ovvie. npm shrinkwrap è utile, ma in realtà non risolve il problema.

Così, ho alcune domande:

  1. Quando si installa un pacchetto, è possibile specificare che si desidera che sia impostato su una versione specifica in package.json (senza accento circonflesso prima che il numero di versione) ?
  2. Quando si pubblica un pacchetto su npm, esiste un modo per impedire l'impostazione predefinita di includere il punto di inserimento prima della versione quando altri sviluppatori installano il pacchetto?

risposta

70

Per specificare di default una versione esatta, è possibile modificare la configurazione NPM con save-exact:

npm config set save-exact true

è anche possibile specificare la versione anteporre con una tilde con save-prefix

E, no non è possibile forzare l'utente ad aggiornare ad una versione minore o una patch, NPM usa semver ed è il modo consigliato di pubblicare pacchetti.

+14

Se si desidera solo fare questo per un pacchetto specifico, è possibile aggiungere '--save-exact' alla riga di comando. Ad esempio, 'npm install --save --save-exact somepackage'. – gilly3

+1

Related https://www.npmjs.com/package/strict-version –

+0

questo solo salva solo le esatte versioni dei tuoi "pacchetti di livello superiore" - quelli specificati in "pacchetto.json", ma non funzionerà per nessuno i pacchetti da cui dipendono i 'pacchetti di livello superiore'. https://yarnpkg.com/ risolvere il problema con il file 'yarn.lock' in modo da avere sempre esatte versioni di tutti i tuoi pacchetti. – Kuncevic

0

È possibile modificare il comportamento predefinito utilizzando l'opzione --save -ex.

// npm 
npm install --save --save-exact react 

// yarn 
yarn add --exact react 

ho creato un post su questo, se qualcuno è alla ricerca di questo in futuro.

https://www.dalejefferson.com/blog/how-to-save-exact-npm-package-versions/

+1

Anche se questo snippet di codice può risolvere la domanda, [compresa una spiegazione] (// meta.stackexchange.com/questions/114762/explaining-entually-code-based-answers) aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro, e queste persone potrebbero non conoscere le ragioni del tuo suggerimento sul codice. Inoltre, nel tuo caso, non dire "Ho spiegato il codice nel mio post sul blog", ma includi la maggior parte del contenuto qui, e usa il link solo come riferimento –

+0

Grazie per il feedback Umbra, I ' ho aggiunto più dettagli. –

Problemi correlati