2013-04-04 18 views
146

Vorrei utilizzare il pacchetto NPM grunt-contrib-jasmine. Ha varie dipendenze. Parte del grafico di dipendenza simile a questo:Come sovrascrivere le versioni di dipendenze NPM annidate?

─┬ [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 

Purtroppo, c'è un bug in questa versione phantomjs che le impedisce di corretta installazione su Mac OS X. Questo è stato risolto nella versione più recente.

Come è possibile ottenere grunt-lib-phantomjs per utilizzare una versione più recente di phantomjs?

Alcuni contesto aggiuntivo:

+0

Solo modulo 'git clone' o fork richiesto. Puoi anche rimuovere manualmente 'phantomjs' nidificati. – elmigranto

+0

['grunt-contrib-jasmine'] (https://npmjs.org/package/grunt-contrib-jasmine) è su 0.5.1, che usa' grunt-lib-phantomjs @ 0.3.1', che usa ' phantomjs @ 1.9.1-0' :) – gustavohenke

risposta

167

Probabilmente hai già trovato una soluzione per questo.

In ogni caso, è possibile utilizzare la funzionalità npm shrinkwrap per sostituire qualsiasi dipendenza o subdipendenza.

Ho appena fatto questo in un nostro progetto. Avevamo bisogno di una versione più recente di connessione, dal 2.7.3. stava causando problemi per noi. Così ho creato un file chiamato NPM-shrinkwrap.json:

{ 
    "dependencies": { 
    "grunt-contrib-connect": { 
     "version": "0.3.0", 
     "from": "[email protected]", 
     "dependencies": { 
     "connect": { 
      "version": "2.8.1", 
      "from": "[email protected]~2.7.3" 
     } 
     } 
    } 
    } 
} 

npm dovrebbe raccogliere automaticamente in su mentre si fa l'installazione per il progetto.

(Vedi: https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/)

+2

Grazie! Questo è esattamente il tipo di cosa che stavo cercando. – georgebrock

+0

Bello e semplice! Ma non hai davvero bisogno di "da". Perché lo aggiungi? – Domi

+6

Quando faccio questo, solo la dipendenza 'grunt-contrib-connect' e i suoi figli sono installati. Tutte le altre dipendenze in package.json non sono installate. – iDVB

4

Per chi dal 2018 e oltre, utilizzando NPM versione 5 o successiva: modificare il package-lock.json: rimuovere la libreria da "requires" sezione e aggiungerlo sotto "dipendenze".

Ad esempio, si desidera il pacchetto deglob per utilizzare la versione del pacchetto glob anziché anziché quella corrente. Si apre package-lock.json e vedete:

"deglob": { 
    "version": "2.1.0", 
    "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz", 
    "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=", 
    "requires": { 
    "find-root": "1.1.0", 
    "glob": "7.1.2", 
    "ignore": "3.3.5", 
    "pkg-config": "1.1.1", 
    "run-parallel": "1.1.6", 
    "uniq": "1.0.1" 
    } 
}, 

Rimuovere "glob": "7.1.2", da "requires", aggiungere "dependencies" con la versione corretta:

"deglob": { 
    "version": "2.1.0", 
    "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz", 
    "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=", 
    "requires": { 
    "find-root": "1.1.0", 
    "ignore": "3.3.5", 
    "pkg-config": "1.1.1", 
    "run-parallel": "1.1.6", 
    "uniq": "1.0.1" 
    }, 
    "dependencies": { 
    "glob": { 
     "version": "3.2.11" 
    } 
    } 
}, 

Ora rimuovere la cartella node_modules, eseguire npm install e si aggiungerà parti mancanti alla sezione "dependencies".

+0

Questo è bello, a patto che' npm install' venga eseguito una volta. Nel mio caso le modifiche sono necessarie in quanto il dep nested sta causando un errore. – ppasler

+0

questo sarà rimosso ogni volta che si esegue 'npm i' invece di modificare il pacchetto-lock.json e aggiungendo la dipendenza figlio a" dipendenze ", aggiungere la dipendenza figlio alla sezione" dipendenze "di package.json – trickpatty

Problemi correlati