L'installazione di npm di Windows a livello globale genera npm ERR! estraneo


121

Sono nuovo a grugnire e npm. Quindi sto provando alcuni "esempi di libri di cucina" sul sito " http://tech.pro/tutorial/1190/package-managers-an-introductory-guide-for-the-uninitiated-front-end-developer#front_end_developers " . Non dovresti guardare lì ora, ma ho pensato che potesse essere utile condividere il sito. Fin qui tutto bene, fino a quando non si tratta dell'installazione globale. (Ok, ho dovuto risolvere alcuni errori, ma ora ho npm funzionante).

Quando si tratta di provare a installare qualcosa a livello globale, rimango bloccato.

Quello che ho fatto finora per testare l'installazione globale di alcuni pacchetti:

  1. Directory di test creata grunttest

  2. All'interno di quella directory:

    npm install -g jshint

Output posso vedere:

 npm http GET https://registry.npmjs.org/jshint
 npm http 304 https://registry.npmjs.org/jshint
 ...
 npm http 304 https://registry.npmjs.org/string_decoder
 C:\Program Files\nodejs\node_modules\npm\jshint -> C:\Program Files\nodejs\node_modules\npm\node_modules\jshinnt
 jshint@2.4.4 C:\Program Files\nodejs\node_modules\npm\node_modules\jshint
 ├── console-browserify@0.1.6
 ├── exit@0.1.2
 ├── underscore@1.4.4
 ├── shelljs@0.1.4
 ├── minimatch@0.2.14 (sigmund@1.0.0, lru-cache@2.5.0)
 ├── cli@0.4.5 (glob@3.2.9)
 └── htmlparser2@3.3.0 (domelementtype@1.1.1, domutils@1.1.6, domhandler@2.1.0, readable-stream@1.0.26-2)

Mi rendo solo conto del 304, che dovrebbe essere ok, perché dice che la risorsa non è stata modificata dall'ultima installazione (pochi minuti prima).

Verifica se il jshint esiste con:

`npm -global list`

Produzione:

npm@1.4.3 C:\Program Files\nodejs\node_modules\npm
├── abbrev@1.0.4
├── ansi@0.2.1
├─...
├──
├── graceful-fs@2.0.2
├── inherits@2.0.1
├── ini@1.1.0
├─┬ init-package-json@0.0.14
│ └── promzard@0.2.1
├─┬ jshint@2.4.4 extraneous
│ ├─┬ cli@0.4.5
│ │ └─┬ glob@3.2.9
│ │   └── inherits@2.0.1
│ ├── console-browserify@0.1.6
│ ├── exit@0.1.2
│ ├─┬ htmlparser2@3.3.0
│ │ ├── domelementtype@1.1.1
│ │ ├── domhandler@2.1.0
│ │ ├── domutils@1.1.6
│ │ └─┬ readable-stream@1.0.26-2
│ │   └─... ├── text-table@0.2.0
├── uid-number@0.0.3
└── which@1.0.5

**npm ERR! extraneous: jshint@2.4.4 C:\Program Files\nodejs\node_modules\npm\node_modules\jshint npm**

Domande:

  1. Perché ottengo npm ERR! estraneo ...?
  2. Cosa significa?
  3. Come posso risolvere questo problema?

Informazione:

Sono su una macchina Windows Windows 7, utilizzando Cygwin come shell. provare a usare solo jshint ( jshint someTestfile.js) ovviamente non funziona.

Grazie in anticipo, Meru

Risposte:


208

npm ERR! extraneoussignifica che un pacchetto è installato ma non è elencato nel tuo progetto package.json.

Dal momento che stai elencando pacchetti che sono stati installati a livello globale, ti daranno molti errori estranei che possono essere semplicemente ignorati perché la maggior parte delle cose installate a livello globale non saranno nel tuo progetto package.json.


1
Ciao! Grazie per la risposta. Questo significa anche che dovrei essere in grado di eseguire "jshint", corretto?
Meru

Corretta. L'esecuzione jshint myfile.jsdovrebbe eseguire jshint su myfile.js.
Kyle Robinson Young

1
Ah capisco. Con Grunt, tutto passa attraverso i compiti. Caricheresti e configurerai l' grunt-contrib-jshintattività nel tuo file Gruntfile.js. L'unica cosa che installi a livello globale è npm i grunt-cli -gche ti dà accesso per eseguire il gruntcomando per eseguire un file Gruntfile.js. Consulta questa guida per maggiori informazioni: gruntjs.com/getting-started
Kyle Robinson Young

8
Se hai librerie estranee salvate localmente (non globalmente) puoi correre npm pruneper sbarazzartene.
krx

2
@KyleRobinsonYoung: Che ne dici di menzionarlo in risposta. Puoi rimuovere tutti i pacchetti inutilizzati usandonpm prune --your-env
geek_guy

21

1 e 2: Significa che non hai il jshint elencato nel file package.json del tuo progetto ma che è installato globalmente. Quindi non è un grosso problema.

3: Per evitare questo errore estraneo , puoi eseguire o rieseguire l'installazione con l'opzione --save. Questo aggiornerà automaticamente il file package.json:

npm install -g jshint --save

O è necessario aggiornare manualmente il file package.json con l'estensione "dependencies": {...}


in ma casi funziona solo con locale senza duplicato globale
BG BRUNO

2
--savenon funziona insieme a -g. L'elenco globale dei pacchetti non ha un package.json.
Guido Bouman

5

L'ho risolto facendo un npm updatenella cartella del pacchetto padre che ha rimosso alcuni dei pacchetti estranei dall'elenco e poi ha fatto npm uninstall <package>per i pochi rimanenti.

Sembra che abbia funzionato, poiché non ricevo errori dopo averlo fatto.


3

L'ho risolto combinando tutte le risposte. All'inizio ho installato il pacchetto a livello globale.

npm install -g packagename --save

Poiché npm ha installato anche questo pacchetto a livello globale ma non l'ha aggiunto al file package.json locale, ho dovuto fare qualcosa al riguardo.

Scelgo, la soluzione per rimuovere quella locale e poi installarla globalmente.

npm uninstall packagename
npm install -g packagename

In questo modo non ho più avvisi e non rovino il file package.json.


Più 100. Ho dovuto disinstallare localmente e installare a livello globale.
Collin Peters,

1

Nel mio caso, ho visto questo 'npm ERR! messaggio estraneo 'nel mio terminale cygwin quando ho eseguito un' npm ls '. Ho pensato che fosse una sorta di configurazione corrotta a livello globale dopo aver lavorato molto. Imparo le seguenti osservazioni qui:

  • "npm ls" fornisce output diversi a seconda della posizione della cartella corrente.
  • "npm ls" cerca di rilevare la presenza di una cartella "node_modules" nella posizione della cartella corrente ed elenca tali contenuti. NON quelli globali!
  • Inoltre, se la cartella corrente contenente "node_modules" ha anche un file package.json contenente meno moduli elencati qui, viene visualizzato l'errore.

"Rm package.json" e "npm ls" non mostrano più messaggi di errore. Quindi dico, controlla sempre la posizione corrente per la presenza della cartella 'node_modules' e del file package.json perché questi hanno la priorità per primi nel controllo e se questi mancano, il controllo continua alla cartella principale e così via, e se hai armeggiato un sacco di frammenti di codice, potresti aver sparso in giro un sacco di cartelle node_modules e file package.json. Niente è veramente danneggiato qui, a differenza di quelle esperienze che abbiamo durante lo sviluppo J2EE Java / eclipse IDE o durante i giorni in cui dobbiamo usare regedit per modificare le impostazioni in Windows.


1

Nel mio caso era perché il nome del pacchetto nel suo package.jsonfile non era lo stesso del nome package.jsondella dipendenza elencato nel modulo dipendente. Errore mio, visto che è un nuovo modulo che ho creato, ma difficile da individuare, dato che npm non darà alcun indizio.

Questo accadeva quando si utilizzava la dependencies: { "my-module": "file:local-modules/mymodule" }sintassi, con un errore di battitura nel nome "my-module".


0

Ciò è dovuto al fatto che il tuo pacchetto non è nel tuo package.json. Se lo aggiungi, il problema sarà risolto, guarda l'immagine qui sotto:

inserisci qui la descrizione dell'immagine

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.