Elenco dei browser angolari: caniuse-lite è obsoleto. Si prega di eseguire il comando successivo `npm update`


11

Di recente ho iniziato a ricevere questo errore su un progetto Angular 8 (nodo v10.16.0) su cui sto lavorando. Con npm update caniuse-lite browserslist non ha fatto nulla

Quindi ho rimosso package-lock.json, rimosso node_modules ed eseguito npm install, ma il file browserlist è andato. Ancora una volta quando eseguo ng build, ricevo lo stesso messaggio: Browserslist: caniuse-lite non è aggiornato. Si prega di eseguire il comando successivonpm update

Vedo questo post sullo stesso argomento: Browserslist: caniuse-lite è obsoleto. Si prega di eseguire il comando successivo `npm update caniuse-lite browserslist` Tuttavia, parla di WebCompiler e autoprefixer e non ne ho idea. Per favore guida


D: Hai creato questo progetto Angular con Visual Studio? D: Cosa è successo quando hai semplicemente seguito le istruzioni ed eseguito npm update caniuse-lite browserslist?
FoggyDay

1
Sì, il progetto angolare utilizza Visual Studio 2017. Non è successo nulla quando utilizzo npm update caniuse-lite browserslist. Non viene installato nulla ...
SilverFish,

Dato che il file browserlist è sparito dopo aver eseguito l'installazione di npm (caniuse-lite è lì), mi consiglia di eseguire npm in browserlist?
SilverFish

ho appena avuto lo stesso problema. in phpstrom mi dice di correre, npm updatema questo non ha risolto il problema, ma ho reso la mia versione dattiloscritta troppo alta per angolare 8.
BlakkM9

1
Sto riscontrando anche lo stesso problema, Angular 8 utilizza il codice di Visual Studio anche se non sono sicuro del motivo per cui l'editor avrebbe causato questo conflitto. Qualche risposta su questo ancora? Dovremmo rilasciare un'enorme nuova funzionalità questa settimana e, naturalmente, ora la nostra app non verrà creata. Vedo molti dei nostri node_modules utilizzando la lista browser
HomeBrew

Risposte:


8

Risolto il problema obsoleto di caniuse-lite eseguendo i comandi seguenti.

npm cache clean  # optional
npm install caniuse-lite@latest --save

npm cache cleannon funziona direttamente in quanto viene gestito automaticamente da npm nelle ultime versioni. Vuoi che usiamo --force? In caso affermativo, spiega perché dovremmo nascondere la cache.
Vishnudev l'

1
npm cache clean non è richiesto uno. puoi correre direttamentenpm install caniuse-lite@latest --save
Dipten

1
L'aggiunta di caniuse-lite alla tua app (tramite package.json bloat) non è una buona idea, dal momento che non è una dipendenza della tua app - solo il tuo set di strumenti npm. Vedi la spiegazione più lunga di seguito. Anche '--save' è ridondante in quanto ora è l'azione predefinita con l'installazione.
jdh,

Questo installa caniuse-lite con successo per me, ma ho ancora lo stesso errore.
nullmn

Ho provato con il nodo 10.x ed è stato risolto. controlla la versione del tuo nodo.
Dipten

2

TLDR: (può sembrare controintuitivo senza la spiegazione)

  npm install caniuse-lite browserslist
  npm uninstall caniuse-lite browserslist

Spiegazione:

Questo messaggio di avviso ("canisuse-lite è obsoleto, per favore ....") viene emesso dagli script nell'elenco di browser durante la compilazione / avvio se rileva che la versione installata di caniuse-lite è precedente a 2 versioni dalla versione corrente. Se nulla nel tuo progetto è cambiato e all'improvviso vedi questo messaggio all'avvio o alla creazione del tuo progetto, probabilmente significa che c'è stato un recente aggiornamento della versione di caniuse-lite.

Sfortunatamente, il messaggio di testo visualizzato da Browserslist è utile solo se hai installato caniuse-lite come dipendenza del tuo progetto. Molto probabilmente non l'hai fatto. Quindi quando esegui il suggerito 'npm update caniuse-lite' o 'npm update' caniuse-lite @ latest '(o' npm install '), npm non vede quel pacchetto elencato nelle tue dipendenze package.json, quindi ignora la richiesta.

In che modo allora quei pacchetti sono diventati dipendenze? Quando il tuo progetto è stato creato (magari con l'app angularapp o create -eagire-app o simile per il tuo framework), npm ha installato il browser come una dipendenza dei suoi strumenti necessari, non come una delle dipendenze del tuo progetto. Allo stesso tempo, caniuse-lite è stato installato come dipendenza dall'elenco di browser. Successivamente, quando il progetto è stato aggiornato, è stato creato un file package-lock.json che blocca tutte le dipendenze su una versione specifica.

Se fosse possibile aggiornare le informazioni sulla versione nell'elenco delle dipendenze in package-lock.json, l'esecuzione di 'npm install' aggiornerebbe questi pacchetti in node_modules. Non è necessario modificare manualmente package-lock.json. Invece, il modo migliore per farlo è:

  1. Rendi temporaneamente questi pacchetti una dipendenza del tuo progetto:

    npm installa l'elenco di browser caniuse-lite

    Oltre ad aggiornare il pacchetto all'ultima versione, questo aggiorna l'elenco delle dipendenze sia in package.json sia (soprattutto, in package-lock.json).

  2. Rimuovi questi pacchetti come dipendenze dirette del tuo progetto:

    npm disinstalla la lista dei browser di caniuse-lite

    Poiché questi pacchetti sono utilizzati da altre dipendenze, non vengono rimossi da node_modules. Solo package.json viene aggiornato per rimuoverli come dipendenza del progetto.

  3. Commit package-lock.json. Chiunque altro ora può semplicemente eseguire 'npm install' per ottenere i due pacchetti aggiornati dall'elenco delle dipendenze secondarie in package-lock.json e interrompere l'avviso msg.


Ho provato la tua soluzione ma ho ancora un avvertimento con questo messaggio (Browserslist: caniuse-lite non è aggiornato. Esegui il comando successivo npm update) e con una configurazione angolare pulita.
Alexander Kushnir,

@AlexanderKushir - dopo aver eseguito l'installazione nel passaggio 1, cercare node_modules per browserslist e caniuse-lite per verificare se la loro versione nel loro pacchetto individuale.json è stata aggiornata (dovrebbe essere 1.0.30001019 per caniuselite e 4.8.3 per browser, come di oggi). La nuova versione di browserlist (4.8.3) dovrebbe lamentarsi solo se canisuelite non è stato aggiornato. È possibile avere un server di cache impostato in .npmrc che non aggiorna questi due pacchetti? (Se sì, prova a rinominare temporaneamente .npmrc prima di eseguire l'installazione?)
jdh

Ho dovuto solo fare tutto questo caniuse-litee il messaggio è sparito
MoonStom l'

@MoonStom - se installi solo caniuse-lite, lo stai aggiungendo come dipendenza della tua app, il che non è accurato. Il problema è in npm e browserslist. Una volta risolti, l'app non dovrebbe dipendere da caniuse-lite.
jdh,
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.