2015-09-20 36 views
8

Sto cercando di integrare ESLint nel mio progetto e sto riscontrando l'errore: "Impossibile trovare il modulo 'eslint-plugin-angular'" quando eseguo $ eslint *.js .Impossibile trovare il modulo 'eslint-plugin-angular'

L'unico modo in cui posso farlo funzionare installando eslint-plugin-angular globalmente, ma ciò sembra sbagliato (a meno che manchi qualcosa ??).

sto correndo:

  • nodo v0.12.7
  • npm 3.3.4
  • eslint v1.5.0
  • eslint-plugin-angolare 0.12.0

ESLint è installato a livello globale.

Il mio file package.json ha le seguenti voci:

  • "eslint": "^ 1.5.0",
  • "eslint-plugin-angolare": "^ 0.12.0",

Ho $ rm -rf node_modules e rieseguo $ npm install per assicurarsi che non ci fosse un qualche tipo di problema di dipendenza npm o danneggiamento. Ho anche verificato i permessi della directory in node_modules per assicurarmi che l'accesso sia possibile.

mio .eslintrc contiene:

{ 
    "plugins": [ 
     "angular" 
    ], 
    "rules": { 
    "angular/ng_controller_name": [ 
     2, 
     "/[A-Z].*Controller$/" 
    ], 
    "quotes": [ 
     2, 
     "single" 
    ] 
    }, 
     "globals": { 
     "angular": true 
    } 
} 

Che cosa mi manca qui? Grazie! ps. Ho aperto un ticket su github: https://github.com/Gillespie59/eslint-plugin-angular/issues/222 - mi chiedevo solo se qualcuno della community Stack si è imbattuto in questo.

risposta

16

trovato la risposta qui: http://eslint.org/docs/user-guide/configuring#configuring-plugins

". Nota: Un esempio a livello globale installata di ESLint può utilizzare solo i plugin ESLint globalmente installato un ESLint localmente installato può assicurarsi che sia di livello locale- ea livello mondiale, installato ESLint plugins ".

Questo cade sotto leggere la stampa fine nella documentazione. :/

Ci sono due modi per affrontare questo:

(1) installare il plugin (s) a livello globale. Non sono un fan particolare di questo perché ho più progetti client che sono su diverse versioni di dipendenze e non posso necessariamente solo metterli tutti sulla stessa versione.

(2) Installare il plugin (s) a livello locale e aggiungere uno script al vostro file di package.json:

{ 
    ... other stuff 
    "scripts": { 
     "eslint": "eslint", 
     "lint": "eslint. " 
    } 
    ... other stuff 
} 

(Se siete completamente nuovo a questo, basta tenere a mente che non è quello che è ... other stuff lo vorrai nel tuo file package.json ...)

Con questa configurazione, sono in grado di utilizzare npm run eslint per utilizzare eslint e io uso npm run lint per fare in realtà il mio progetto.

È possibile trovare la documentazione sul campo scripts per il file package.json qui: https://docs.npmjs.com/misc/scripts

+1

Ad esempio, installare 'eslint-plugin-angular' a livello globale – boldnik

1

Vi sono praticamente garantiti per incorrere in questo problema se si segue una guida che ti dice di usare npm install -g eslint, che è il modo consigliato per installare ESLint, quindi procedere immediatamente a dirti di usare eslint --init per creare una configurazione per il tuo progetto. Il problema è che eslint --initsarà installare i pacchetti necessari, ma li installerà localmente, anche se viene eseguito da uno eslint installato a livello globale. Io ero mai saputo fino a quando ho provato a modificare un file in Emacs e flycheck segnalato un errore dal ESLint:

Error: Failed to load plugin react: Cannot find module 'eslint-plugin-react' 
    at Function.Module._resolveFilename (module.js:325:15) 
    at Function.Module._load (module.js:276:25) 
[...] 

mi piace per consentire sia un'installazione globale e una locale. Potrei usare quello globale per codice sperimentale che voglio ancora controllare, ma non appartiene a nessun progetto specifico, e installazioni locali con esigenze più specifiche. Così ho creato uno script memorizzato come ~/bin/eslint. Dal momento che ~/bin è presto sul mio PATH, questo script viene utilizzato al posto di qualsiasi installazione a livello globale eslint:

#!/bin/sh 

# Find the top of the code hierarchy, and move there. 
prefix=`npm prefix` 
[ -n $prefix ] && cd $prefix 

# Execute the local eslint if it exists.  
local_eslint=./node_modules/.bin/eslint 
[ -x $local_eslint ] && exec $local_eslint "[email protected]" 

# If not, execute the global one. 
exec /path/to/global/eslint "[email protected]" 

(Per chi non lo sapesse, è exec finale Se il primo exec viene eseguita poi più nulla dopo di esso. verrà eseguito.)

Questo script presuppone una struttura di progetto idonea per npm (ad esempio, c'è unche può trovare npm prefix). Dovrebbe essere adattato ad altre situazioni.

Il mio globale eslint si trova in una posizione insolita, adattare lo script in modo che indichi dove è stato installato.

Problemi correlati