Come aggiorno ogni dipendenza in package.json all'ultima versione?


2013

Ho copiato package.json da un altro progetto e ora voglio trasferire tutte le dipendenze alle loro ultime versioni poiché si tratta di un progetto nuovo e non mi dispiace riparare qualcosa se si rompe.

Qual è il modo più semplice per farlo?

Il modo migliore che conosco ora è eseguire npm info express versionquindi aggiornare package.json manualmente per ognuno. Deve esserci un modo migliore.

{
  "name": "myproject",
  "description": "my node project",
  "version": "1.0.0",
  "engines": {
    "node": "0.8.4",
    "npm": "1.1.65"
  },
  "private": true,
  "dependencies": {
    "express": "~3.0.3", // how do I get these bumped to latest?
    "mongodb": "~1.2.5",
    "underscore": "~1.4.2",
    "rjs": "~2.9.0",
    "jade": "~0.27.2",
    "async": "~0.1.22"
  }
}

AGGIORNAMENTO 5/1/19 : Sei anni dopo e sto ancora mantenendo npm-check-updates come soluzione completa a questo problema. Godere!


2
Fantastico vedere un altro approccio a questo problema. Mi piace molto l'output di Salita. Alcune belle funzionalità a cui lo strumento a cui contribuisco ora, github.com/tjunnone/npm-check-updates, sono la conservazione della semantica del versioning (come 1.xo> 2.1.0) e il filtraggio solo per nome / regex / devDeps.
Raine Revere,

1
Devono esserci risposte migliori qui. Ovviamente con la risoluzione delle dipendenze, non puoi sempre avere l'ultima versione di tutto. Massimizzare il maggior numero di ultime versioni dei moduli è proprio questo, una sorta di problema di ottimizzazione. Ma NPM non sa quali moduli vuoi essere più recenti di altri. Sarebbe bello se ci fosse qualcosa del genere: npm update --latest xyz, dove xyz sono i moduli che vuoi essere il più recenti possibile e tutti gli altri moduli seguiranno con la loro versione compatibile più recente.
Alexander Mills,

2
npm gestirà correttamente i conflitti di versione tra dipendenze condivise scaricando quella corretta per ciascuna. Pertanto, se Dep A dipende da Dep C v1.0.0 e Dep B dipende da Dep C v2.0.0, ciascuno verrà installato e utilizzato in modo appropriato. Pertanto, sei libero di installare l'ultimo dei pacchetti che desideri.
Raine Revere,

Prova questo per forzare l'aggiornamento:npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
miorey,

Controllo sempre questa risposta. Ma vedo che è scivolato nei risultati di Google. Spero che questo commento possa aiutare a risalire alla sua pertinenza !!
Zach Smith,

Risposte:


2393

Sembra che npm-check-updates sia l'unico modo per farlo accadere ora.

npm i -g npm-check-updates
ncu -u
npm install

Su npm <3.11:

Cambia semplicemente la versione di ogni dipendenza in *, quindi esegui npm update --save. ( Nota: rotto nelle recenti (3.11) versioni di npm ).

Prima:

  "dependencies": {
    "express": "*",
    "mongodb": "*",
    "underscore": "*",
    "rjs": "*",
    "jade": "*",
    "async": "*"
  }

Dopo:

  "dependencies": {
    "express": "~3.2.0",
    "mongodb": "~1.2.14",
    "underscore": "~1.4.4",
    "rjs": "~2.10.0",
    "jade": "~0.29.0",
    "async": "~0.2.7"
  }

Naturalmente, questo è il martello contundente dell'aggiornamento delle dipendenze. Va bene se, come hai detto, il progetto è vuoto e nulla può rompersi.

D'altra parte, se stai lavorando a un progetto più maturo, probabilmente vorrai verificare che non vi siano cambiamenti di rottura nelle dipendenze prima dell'aggiornamento.

Per vedere quali moduli sono obsoleti, basta eseguire npm outdated. Elencherà tutte le dipendenze installate con versioni più recenti disponibili.


13
@thefourtheye: generalmente non dovresti lasciarlo * in package.json poiché potresti finire con l'installazione automatica di una nuova versione del modulo con modifiche che interrompono l'app. Dal momento che stiamo usando --savequi, il *viene sostituito con la versione corrente di ogni pacchetto.
josh3736,

50
Non riesco a farlo funzionare. È cambiato qualcosa con npm da quando è stata pubblicata questa risposta? Quando utilizzo il carattere jolly e quindi npm install --saveil carattere jolly viene lasciato nel mio package.json.
davidtheclark,

15
Sfortunatamente, l'uso updatenon funziona neanche per me. Sono ancora rimasto con i caratteri jolly. C'è qualche documentazione su questo che conosci o altre risorse che potrei consultare?
davidtheclark,

120
Un po 'vecchio ma ciò potrebbe aiutare altre persone: github.com/tjunnone/npm-check-updates | Utilizzare npm install -g npm-check-updatesper installare, quindi npm-check-updatesper verificare se le dipendenze dispongono di aggiornamenti e npm-check-updates -uper aggiornare le versioni package.json. Quindi è solo npm installe scaricherà nuove versioni.
RaphaelDDL

5
Il problema deriva probabilmente dal fatto che si tenta di aggiornare i pacchetti di sviluppo digitando npm update --saveinvece di npm update --save-dev.
adriendenat,

1035

npm-check-updates è un'utilità che regola automaticamente un package.json con l'ultima versione di tutte le dipendenze

vedi https://www.npmjs.org/package/npm-check-updates

$ npm install -g npm-check-updates
$ ncu -u
$ npm install 

[EDIT] Un modo leggermente meno invadente (evita un'installazione globale) di farlo se hai una versione moderna di npmè:

$ npx npm-check-updates -u
$ npm install 

135
Questo dovrebbe essere disponibile in modo nativo tramite il comando npm stesso, anzi la soluzione migliore finora per aggiornare le dipendenze.
Mohammad Arif,

7
Dovrebbe far parte di npm in modo nativo, pienamente d'accordo. Tuttavia, non lo è e questa soluzione arriva come un gioco da ragazzi. Grazie.
Stefan,

2
suppongo che voi ragazzi stiate spingendo [HARD] per ottenere questo nel core npm?
enorl76,

3
@Batman Sì, se non l'hai mai installato prima. Altrimenti usa npm update. ncu aggiorna solo package.json. Non installa o aggiorna "node_modules".
Muzaffer,

1
pacchetto inutile, aggiornando solo una parte dei pacchetti con ncu -a, non aggiornando anche package.json.
Alexander Kim,

385

Aggiornato per l'ultimo NPM

npm 2+ (nodo 0.12+):


npm outdated
npm update
git commit package-lock.json

Ancient npm (circa 2014):

npm install -g npm-check-updates
npm-check-updates
npm shrinkwrap
git commit package-lock.json

Assicurati di restringere le deps, altrimenti potresti finire con un progetto morto. L'altro giorno ho tirato fuori un progetto e non sarebbe stato eseguito perché i miei deps erano tutti obsoleti / aggiornati / un casino. Se avessi fatto un restringimento, npm avrebbe installato esattamente ciò di cui avevo bisogno.


Dettagli

Per i curiosi che arrivano così lontano, ecco cosa consiglio:

Utilizzare npm-check-updateso npm outdatedper suggerire le ultime versioni.

# `outdated` is part of newer npm versions (2+)
$ npm outdated
# If you agree, update.  
$ npm update

#       OR

# Install and use the `npm-check-updates` package.
$ npm install -g npm-check-updates
# Then check your project
$ npm-check-updates
# If you agree, update package.json.
$ npm-check-updates -u

Quindi esegui un'installazione pulita (senza l'rm ho ricevuto alcuni avvisi di dipendenza)

$ rm -rf node_modules
$ npm install 

Infine, salva le versioni esatte in npm-shrinkwrap.jsonconnpm shrinkwrap

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

Ora, npm installora utilizzerà le versioni esatte innpm-shrinkwrap.json

Se npm-shrinkwrap.jsonesegui il check- in in Git, tutte le installazioni utilizzeranno le stesse versioni esatte.

Questo è un modo per passare dallo sviluppo (tutti gli aggiornamenti, sempre) alla produzione (nessuno tocca nulla).

ps Yarn sta inviando il tuo elenco di pacchetti a Facebook .


13
questa è la vera risposta corretta. con dozzine di deps installati, questo è sicuramente un modo migliore
Angel S. Moreno,

6
Per esperienza, i consigli per aggiornare sempre tutti i pacchetti contemporaneamente possono essere pericolosi.
alphadogg,

1
Di sicuro. Se crei e utilizzi l' npm-shrinkwrap.jsonorigine e esegui il commit ogni volta che esegui l'aggiornamento, puoi sempre "tornare al punto in cui ti trovavi". Ho ignorato la funzione di restringimento quando ho iniziato.
Michael Cole,

21
questo non risponde alla domanda. La domanda è come aggiornare l' ultima versione. npm updateaggiorna solo la versione semver, non l'ultima.
Gman,

1
Puoi rispondere se esiste un'alternativa a yarn upgrade package@version?
Ben Sinclair,

201

Per aggiornare una dipendenza alla sua ultima versione senza dover aprire manualmente package.jsone modificarla, è possibile eseguire

npm install {package-name}@* {save flags?}

vale a dire

npm install express@* --save

Per riferimento, npm-install


Come notato dall'utente Vespakoen su una modifica rifiutata, è anche possibile aggiornare più pacchetti contemporaneamente in questo modo:

npm install --save package-nave@* other-package@* whatever-thing@*

Apporta anche un one-liner per la shell basato su npm outdated. Vedi la modifica per il codice e la spiegazione.


PS: odio anche dover modificare manualmente package.jsoncose del genere;)


8
Questa soluzione è fantastica. Modo rapido e semplice per aggiornare esplicitamente un singolo pacchetto all'ultima versione senza installare nuovi moduli. Mi piace npm-check-updates, ma afaik cerca di mantenere tutti i pacchetti aggiornati, che non è sempre quello che vuoi.
Chev,

questo non funziona per menpm install react-native-image-picker@* --save
Harry Moreno il

1
@Chev: ncu può facilmente scegliere come target uno o più pacchetti con ncu express mocha chai. Puoi anche escludere i pacchetti con ncu -x mocha. Sono d'accordo che quanto sopra è la soluzione più semplice per l'aggiornamento di un singolo pacchetto.
Raine Revere,

2
Ho appena usato qualcosa di simile che ha funzionato, da documenti forse più recenti ... usa "latest" invece di "*"npm install {package-name}@latest {save flags}
Drew Thomas,

1
Mille grazie, questa soluzione è fantastica ed è esattamente quello che sto cercando. Ti consente di aggiornare un determinato pacchetto senza la necessità di aggiornare ogni altra dipendenza che può portare a problemi imprevisti!
Dany Wehbe,

90

Se usi Visual Studio Code come IDE, questa è una piccola estensione divertente per rendere l'aggiornamento package.jsonun processo con un clic.

Versione Lens

inserisci qui la descrizione dell'immagine


2
C'è una versione 3 del testo sublime qui: github.com/yavorsky/Bump , anche se un po 'lento.
Alexander Kim,

4
Funzionava magnificamente, nel caso in cui non fosse chiaro a nessuno, questo controlla semplicemente le versioni nel tuo package.json rispetto alle ultime versioni del repository npm e ti consente di fare clic su una versione per aggiornare il contenuto del testo in package.json. È quindi necessario eseguire "npm update" per dire a npm di installare le nuove versioni.
MattG

2
Si noti che è già possibile visualizzare la versione più recente delle dipendenze del pacchetto con una breve descrizione nel codice Visual Studio incorporato
passando

1
Si noti che non installa automaticamente i pacchetti quando si fa clic su un collegamento dell'obiettivo di codice! Aggiorna semplicemente il testo della versione package.json.
RA.

59

Funziona a partire da npm 1.3.15.

"dependencies": {
  "foo": "latest"
}

10
Buono a sapersi. La mia ipotesi è che questa sarebbe generalmente una cattiva pratica su qualsiasi sito di produzione perché si aggiornerà automaticamente a versioni potenzialmente incompatibili con le versioni precedenti. La sintassi '~ 2' ti blocca in un determinato numero di versione principale, che in seguito semver sarà retrocompatibile.
Raine Revere

1
Puoi sempre congelare i deps su prod. C'è un comando per quello. -2 suona bene.
Tobiasz Cudnik,

5
Mi piace usarlo insieme npm shrinkwrapper congelare i deps.
daniellmb,

Se lo facciamo, allora come facciamo a sapere la versione attuale di quel pacchetto? Supponiamo di avere una voce chiamata "react": "16.9.0"e poi l'ho aggiunta l'ultima ed eseguita npm i, dopo questa operazione come trovo quale versione di reazione è ora nel mio progetto? poiché "react":"latest"è ciò che è rimasto nel mio pacchetto.json, non un numero anche dopo che l'ho fattonpm i
programmatore

52
  1. Utilizzare *come versione per le ultime versioni, incluso unstable
  2. Utilizzare latestcome definizione della versione per l'ultima versione stabile
  3. Modificare package.json con esattamente l'ultimo numero di versione stabile usando LatestStablePackages

Ecco un esempio:

"dependencies": {
        "express": "latest"  // using the latest STABLE version
    ,   "node-gyp": "latest"    
    ,   "jade": "latest"
    ,   "mongoose": "*" // using the newest version, may involve the unstable releases
    ,   "cookie-parser": "latest"
    ,   "express-session": "latest"
    ,   "body-parser": "latest"
    ,   "nodemailer":"latest"
    ,   "validator": "latest"
    ,   "bcrypt": "latest"
    ,   "formidable": "latest"
    ,   "path": "latest"
    ,   "fs-extra": "latest"
    ,   "moment": "latest"
    ,   "express-device": "latest"
},

2
Questa è la risposta migliore
Peza,

1
questa avrebbe dovuto essere la risposta accettata
EigenFool del

ancora l'approccio più sicuro da adottare. Buona risposta.
Klewis,

43

L'unica avvertenza che ho trovato con la migliore risposta sopra è che aggiorna i moduli all'ultima versione. Ciò significa che potrebbe essere aggiornato a una build alpha instabile.

Vorrei usare quell'utilità npm-check-updates. Il mio gruppo ha utilizzato questo strumento e ha funzionato in modo efficace installando gli aggiornamenti stabili.

Come Etienne ha affermato sopra: installa ed esegui con questo:

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 

3
rm -rf node_modulesprima mi npm installsono sbarazzato di alcuni avvisi di dipendenza per me.
Michael Cole,

1
Nel caso abbiate "*" in package.json, cambiatelo semplicemente in "0" o "0.0" o "0.0.0" prima di eseguire npm-check-updates.
igorpavlov,

Questo è il modo più semplice per farlo. Nessuna seccatura, nessuna rassicurazione. Funziona come un fascino. Tutti i tuoi dipartimenti vengono aggiornati e installati correttamente. Thx
Yoraco Gonzales

38

Per vedere quali pacchetti hanno versioni più recenti disponibili, quindi utilizzare il seguente comando:

npm outdated

per aggiornare solo una dipendenza basta usare il seguente comando:

npm install yourPackage@latest --save

Per esempio:

Il mio package.jsonfile ha dipendenza:

"@progress/kendo-angular-dateinputs": "^1.3.1",

allora dovrei scrivere:

npm install @progress/kendo-angular-dateinputs@latest --save

Bello ma sembra che --save (o --save-dev) non sia obbligatorio per l'aggiornamento.
Burrich,

35

Mi piace molto come funziona npm-upgrade . È una semplice utility da riga di comando che passa attraverso tutte le tue dipendenze e ti consente di vedere la versione corrente rispetto all'ultima versione e di aggiornarla se lo desideri.

Ecco uno screenshot di ciò che accade dopo l'esecuzione npm-upgradenella radice del progetto (accanto al package.jsonfile):

Esempio di aggiornamento di npm

Per ogni dipendenza è possibile scegliere di aggiornare, ignorare, visualizzare il log delle modifiche o terminare il processo. Finora ha funzionato benissimo per me.

EDIT: per essere chiari questo è un pacchetto di terze parti che deve essere installato prima che il comando funzioni. Non viene fornito con npm stesso:

npm install -g npm-upgrade

Quindi dalla radice di un progetto che ha un file package.json:

npm-upgrade

Guardando i documenti sembra che sia stato costruito solo per funzionare con dipendenze locali
manncito,

2
sì, appena menzionato ad altri. Nessun reclamo contro la risposta :)
Martin Schneider,

2
Hmm, npm-upgradenon ha funzionato per me, ma npm upgradeha funzionato e ha aggiornato il mio file package.json che era esattamente quello che stavo cercando.
Grandizer,

Hmm interessante, c'è stato un errore? L'idea alla base dell'utilizzo npm-upgradeè quella di vedere esattamente cosa viene aggiornato e scegliere e scegliere quali vengono aggiornati. npm upgradepuò funzionare bene per la maggior parte delle persone, ma a volte è necessario avere un po 'più di controllo durante l'aggiornamento.
manncito,

1
Puoi anche usarlo con npx: npx npm-upgrade- abbastanza bello! :)
radiografia il

22

Ecco una regex di base per abbinare i numeri di versione semantici in modo da poterli sostituire rapidamente tutti con un asterisco.

Versione semantica Regex

([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)

Come usare

Seleziona le versioni del pacchetto che desideri sostituire nel file JSON.

screenshot: seleziona il testo che desideri sostituire

Inserisci la regex sopra e verifica che corrisponda al testo corretto.

screenshot: inserisci la regex semver sopra

Sostituisci tutte le partite con un asterisco.

screenshot: sostituisci le versioni del pacchetto con un asterisco

Correre npm update --save


no quando c'è un numero nel nome di un pacchetto. cioè: babel-preset-es2015, babel-preset-stage-0, hex2rgba. Forse cerca una citazione / una doppia citazione all'inizio:('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
rofrol,

1
su qualsiasi editor che supporti più punti di inserimento (ej Sublime Text) puoi selezionare il primo :e premere ctrl+dpiù volte fino a quando non li selezioni tutti, quindi vai al numero di versione (premi la freccia destra 2 volte) e premi ctrl spazio, quindi scrivi"*"
Ivan Castellanos

15

Di recente ho dovuto aggiornare diversi progetti che utilizzavano npm e package.json per la loro magia gruntfile.js. Il seguente comando bash (comando multilinea) ha funzionato bene per me:

npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install $1 --save-dev

L'idea qui: npm outdatedper jq
convogliare l' output come json, a (jq è un parser / query tool della riga di comando json)
(si noti l'uso --depthdell'argomento per npm outdated)
jq spoglia l'output solo al nome del pacchetto di livello superiore.
infine xargs inserisce ciascun LIBRARYNAME uno alla volta in un npm install LIBRARYNAME --save-devcomando

Quanto sopra è ciò che ha funzionato per me su una macchina in esecuzione: nodo = v0.11.10 osx = 10.9.2 npm = 1.3.24

questo ha richiesto:
xargs http://en.wikipedia.org/wiki/Xargs (credo nella mia macchina credo)
e
jq http://stedolan.github.io/jq/ (l'ho installato con brew install jq)

Nota: salvo solo salvare le librerie aggiornate in package.json all'interno della chiave json devDependanciesusando --save-dev, questo era un requisito per i miei progetti, molto probabilmente non per i vostri.

Successivamente controllo che tutto sia sugo con un semplice

npm outdated --depth=0

Inoltre, è possibile controllare le versioni correnti della libreria installata a livello superiore con

npm list --depth=0

Adoro jq e lo uso quasi ogni giorno, ma a questo scopo uso awkinvece semplice :npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
Qorbani,

1
Sto usandocat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
Richard Ayotte il

15

Se si desidera utilizzare un approccio delicato tramite una bellissima interfaccia di reporting interattivo (per terminale), suggerirei di utilizzare npm-check .

È meno di un martello e ti dà una maggiore conoscenza consequenziale e controllo sugli aggiornamenti delle dipendenze.

Per darti un assaggio di ciò che ti aspetta, ecco uno screenshot (estratto dalla pagina git per npm-check):

inserisci qui la descrizione dell'immagine


14

Questa funzione è stata introdotta in npm v5. aggiornare a npm usando npm install -g npm@lateste

aggiornare package.json

  1. elimina /node_modulesepackage-lock.json (if you have any)

  2. corri npm update. questo aggiornerà le dipendenze package.json alla versione più recente, basata su semver .

per aggiornare all'ultima versione. puoi andare connpm-check-updates


13

Se usi il filo, il seguente comando aggiorna tutti i pacchetti alla loro ultima versione:

yarn upgrade --latest

Dai loro documenti :

Il upgrade --latestcomando aggiorna i pacchetti allo stesso modo del comando upgrade, ma ignora l'intervallo di versioni specificato in package.json. Invece, verrà utilizzata la versione specificata dall'ultimo tag (potenzialmente aggiornando i pacchetti tra le versioni principali).


1
Non aggiorna le dipendenze in package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh

13

A partire da npm versione 5.2.0, esiste un modo per eseguirlo su una sola riga senza installare pacchetti aggiuntivi nel registro npm globale né localmente nell'applicazione. Questo può essere fatto sfruttando la nuova npxutility in bundle con npm. ( Clicca qui per saperne di più. )

Esegui il comando seguente nella radice del tuo progetto:

npx npm-check-updates -u && npm i

Ho appena provato questo e funziona ... tranne che dovevo correre npm installper scaricare effettivamente le nuove dipendenze. Quindi suppongo che questo aggiorni solo il package.json a meno che non mi manchi qualcosa
owsega

@owsega, hai assolutamente ragione, grazie! Ho modificato la mia risposta per eseguire anche npm installdopo che le dipendenze sono state aggiornate.
ilyakam,

13

Uso npm-checkper raggiungere questo obiettivo.

npm i -g npm npm-check
npm-check -ug #to update globals
npm-check -u #to update locals

inserisci qui la descrizione dell'immagine

Un altro utile elenco di comandi che conserverà i numeri esatti di versione package.json

npm cache clean
rm -rf node_modules/
npm i -g npm npm-check-updates
ncu -g #update globals
ncu -ua #update locals
npm i

È ncu -ue non ncu -uanella seconda ultima riga. Non riesco a modificare perché non è consentito un cambio di carattere. Molto utile a proposito.
Sohail Ahmed,

10

Updtr!

Basato su npm obsoleto, updtr installa l'ultima versione ed esegue il test npm per ogni dipendenza. Se il test ha esito positivo, updtr salva il nuovo numero di versione su package.json. Se il test fallisce, tuttavia, updtr ripristina le sue modifiche.

https://github.com/peerigon/updtr


9

Comandi che ho dovuto usare per aggiornare package.jsonper NPM 3.10.10:

npm install -g npm-check-updates
ncu -a
npm install

Sfondo:

Stavo usando l'ultimo comando da @ josh3736 ma il mio package.jsonnon è stato aggiornato. Ho quindi notato il testo della descrizione durante l'esecuzione npm-check-updates -u:

La seguente dipendenza è soddisfatta dal suo intervallo di versioni dichiarato, ma la versione installata è indietro. È possibile installare la versione più recente senza modificare il file del pacchetto utilizzando npm update. Se si desidera aggiornare comunque la dipendenza nel file del pacchetto, eseguire ncu -a.

Leggendo la documentazione per npm-check-updates puoi vedere la differenza:

https://www.npmjs.com/package/npm-check-updates

-u, --upgrade: sovrascrive il file del pacchetto

-a, --upgradeAll: include anche quelle dipendenze la cui ultima versione soddisfa la dipendenza semver dichiarata

ncu è un alias per npm-check-updatescome visto nel messaggio quando si digita npm-check-updates -u:

[INFO]: You can also use ncu as an alias

In npm-check-updates v3 -aè il comportamento predefinito e la sovrascrittura di package.json è lasciata solo -uall'opzione.
Raine Revere

8

Se si utilizza yarn, yarn upgrade-interactiveè uno strumento davvero elegante che può consentire di visualizzare le dipendenze obsolete e quindi selezionare quelle che si desidera aggiornare.

Altri motivi per usare il filato sopra npm. Eh.


Il filato si sta muovendo velocemente, ha già colpito un 1.0 ed è un piacere dannatamente piacevole da usare. Questa dovrebbe essere la nuova risposta selezionata.
Josh Habdas,

1
Non aggiorna le dipendenze in package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh

5

I comandi sopra riportati non sono sicuri perché potresti cambiare il modulo quando cambi versione. Invece raccomando quanto segue

  • Impostare la versione attuale dei moduli del nodo corrente in package.json usando il npm shrinkwrapcomando.
  • Aggiorna ogni dipendenza all'ultima versione SE NON VIENE INTERROTTO I TEST utilizzando lo strumento da riga di comando https://github.com/bahmutov/next-update
npm install -g prossimo aggiornamento
// dal tuo pacco
successivo aggiornamento

1
Le modifiche incompatibili con le versioni precedenti devono essere protette da progetti attivi. L'OP è più interessato all'avvio di un nuovo progetto in cui si desidera rompere le cose ora anziché in seguito e disporre delle ultime versioni su cui lavorare.
Raine Revere,

3

Prova a seguire il comando se usi npm 5 e il nodo 8

npm update --save


2
Il updatecomando non sembra superare le dipendenze oltre la definizione originale. Se package.jsondichiara "1.2.3"esattamente che non otterrai 1.2.4. Può essere buono o cattivo :)
Álvaro González,

3

Il seguente codice (che è stato accettato) mi ha scritto qualcosa del tipo "ci vuole troppo tempo blah-blah" e non ha fatto nulla. Probabilmente usare il flag globale era il problema, idk.

npm i -g npm-check-updates
ncu -u
npm install

Ho deciso di utilizzare il mio editor di testo e seguire invece un approccio semi-manuale.

Ho copiato un elenco come questo (solo molto più a lungo) dalle dipendenze dev del mio package.jsonnell'editor di testo notepad ++:

"browserify": "10.2.6",
"expect.js": "^0.3.1",
"karma": "^0.13.22",
"karma-browserify": "^5.2.0",

Ho impostato la modalità di ricerca su espressione regolare, ho usato il ^\s*"([^"]+)".*$modello per ottenere il nome del pacchetto e lo ho sostituito npm uninstall \1 --save-dev \nnpm install \1 --save-dev. Fare clic su "Sostituisci tutto". L'ottput era questo:

npm uninstall browserify --save-dev 
npm install browserify --save-dev
npm uninstall expect.js --save-dev 
npm install expect.js --save-dev
npm uninstall karma --save-dev 
npm install karma --save-dev
npm uninstall karma-browserify --save-dev 
npm install karma-browserify --save-dev

L'ho copiato di nuovo per colpire e premere invio. Tutto è stato aggiornato e funzionava bene. È tutto.

"browserify": "^16.1.0",
"expect.js": "^0.3.1",
"karma": "^2.0.0",
"karma-browserify": "^5.2.0",

Non penso che sia un grosso problema, dal momento che devi farlo solo di tanto in tanto, ma puoi facilmente scrivere uno script, che analizza package.jsone aggiorna i tuoi pacchetti. Penso che sia meglio così, perché puoi modificare la tua lista se hai bisogno di qualcosa di speciale, ad esempio mantenendo la versione corrente di una libreria.


1
Con npm-check-updates, il terminale sospeso è un problema noto su Windows. Prova ad aggiungere in --packageFile package.jsonmodo che sappia non aspettare lo stdin.
Raine Revere

@RaineRevere Grazie!
inf3rno,

3

Ho risolto questo problema consultando le istruzioni da https://github.com/tjunnone/npm-check-updates

$ npm install -g npm-check-updates
$ ncu
$ ncu -u # to update all the dependencies to latest
$ ncu -u "specific module name"  #in case you want to update specific dependencies to latest

3

Ho trovato un'altra soluzione per la versione recente di NPM. Quello che voglio fare è sostituire tutte le dipendenze "*" con il numero esplicito dell'ultima versione. Nessuno dei metodi discussi ha funzionato per me.

Cosa ho fatto:

  1. Sostituisci tutto "*" con "^ 0.0.0"
  2. Correre npm-check-updates -u

Tutto in package.json ora viene aggiornato all'ultima versione.


3

Se non desideri installare npm-check-updates globali, puoi semplicemente eseguirlo:

node -e "const pk = JSON.parse(require('fs').readFileSync('package.json', 'utf-8'));require('child_process').spawn('npm', ['install', ...Object.keys(Object.assign({},pk.dependencies, pk.devDependencies)).map(a=>a+'@latest')]).stdout.on('data', d=>console.log(d.toString()))"

2

L'alternativa è

"dependencies":{
    "foo" : ">=1.4.5"
}

ogni volta che usi npm update, si aggiorna automaticamente all'ultima versione. Per ulteriori sintassi della versione, è possibile controllare qui: https://www.npmjs.org/doc/misc/semver.html


Uno dei motivi del controllo delle versioni è impedire modifiche incompatibili con le versioni precedenti più recenti. Vorrei raccomandare contro questo o '*' numeri di versione. L'OP è correlato all'agevolazione del processo mantenendo il controllo su quando si verifica.
Raine Revere,

2

Soluzione senza pacchetti aggiuntivi

Cambia la versione di ogni dipendenza in *:

"dependencies": {
    "react": "*",
    "react-google-maps": "*"
  }

Quindi corri npm update --save.

Alcuni dei tuoi pacchetti sono stati aggiornati, ma altri no?

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "*"
  }

Questa è la parte difficile, significa che la tua versione locale di "reagire" era inferiore a quella più recente. In questo caso npm ha scaricato e aggiornato il pacchetto "reagire". Tuttavia la tua versione locale di "reazioni-google-maps" è la stessa della più recente.

Se vuoi ancora "aggiornare" invariato *, devi eliminare questi moduli dalla node_modulescartella.

es node_modules/react-google-maps. cancella .

Finalmente corri di nuovo npm update --save.

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "^4.10.1"
  }

Non dimenticare di eseguire npm update --save-devse desideri aggiornare le dipendenze di sviluppo.


1

Greenkeeper se stai usando Github. https://greenkeeper.io/

È un'integrazione di Github ed è incredibilmente facile da configurare. Una volta installato, crea automaticamente richieste pull nei repository che specifichi (o tutti se lo desideri) e mantiene il tuo codice sempre aggiornato, senza forzarti a fare nulla manualmente. Le PR dovrebbero quindi innescare un build su un servizio di elementi della configurazione e, a seconda di un controllo riuscito o non riuscito, è possibile continuare a capire cosa sta innescando il problema o quando i passaggi degli elementi della configurazione semplicemente uniscono il PR.

greenkeeper PR 1 greenkeeper PR 2

In fondo, puoi vedere che la prima build non è riuscita all'inizio e dopo un commit ("upgrade to node v6.9") i test passano in modo da poter finalmente unire il PR. Viene fornito anche con molte emoji.

Un'altra alternativa sarebbe https://dependencyci.com/ , tuttavia non l'ho provato intensamente. Dopo una prima occhiata, Greenkeeper ha un aspetto migliore in generale IMO e ha una migliore integrazione.


1
  • npm obsoleto
  • aggiornamento npm

Dovresti procurarti le ultime versioni desiderate compatibili per la tua app. Ma non le ultime versioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.