2015-09-20 8 views
8

Ich versuche ESLint in mein Projekt zu integrieren und ich laufe in den Fehler finden: „nicht-Modul‚eslint-plugin-Winkel‘gefunden“ wenn ich $ eslint *.js laufen .kann nicht Modul ‚eslint-plugin-Winkel‘

Die einzige Möglichkeit, dies zu erreichen, ist die Installation von eslint-plugin-angular global, aber das scheint falsch (es sei denn, ich vermisse etwas ??).

Ich bin mit:

  • Knoten v0.12.7
  • npm 3.3.4
  • eslint v1.5.0
  • eslint-plugin-Winkel 0.12.0

ESLint wird global installiert.

Meine package.json Datei hat die folgenden Einträge:

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

Ich habe $ rm -rf node_modules und erneut ausgeführt $ npm install, um sicherzustellen, gab es keine Art von NPM Abhängigkeitsproblem oder Korruption. Ich verifizierte auch die Verzeichnisberechtigungen in node_modules, um sicherzustellen, dass der Zugriff möglich ist.

Mein .eslintrc enthält:

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

Was soll ich hier fehlt? Danke! ps. Ich habe ein Ticket auf github geöffnet: https://github.com/Gillespie59/eslint-plugin-angular/issues/222 - ich frage mich nur, ob jemand in der Stack-Community darauf gestoßen ist.

Antwort

16

hier die Antwort gefunden: http://eslint.org/docs/user-guide/configuring#configuring-plugins

„. Hinweis: Eine global installierte Instanz von ESLint nur global installierten ESLint Plugins verwenden können, eine lokal installierte ESLint sicher sowohl lokal machen und globally- ESLint installiert Plugins."

Dies fällt unter lesen Sie das Kleingedruckte in der Dokumentation. :/

Es gibt zwei Möglichkeiten, damit umzugehen:

(1) Installieren Sie das Plugin (s) global. Ich bin kein besonderer Fan von diesem, weil ich mehrere Client-Projekte habe, die sich auf verschiedenen Versionen von Abhängigkeiten befinden, und ich kann nicht unbedingt alle auf die gleiche Version stoßen. Installieren

(2) das Plugin (n) lokal und fügen Sie ein Skript auf Ihre package.json Datei:

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

(Wenn Sie ganz neu in diesem sind, nur im Kopf behalten, dass ... other stuff ist nicht das, was Sie möchten eigentlich in Ihrem Paket.json Datei ...)

Mit diesem Setup kann ich npm run eslint verwenden, um eslint zu verwenden, und ich verwende npm run lint, um tatsächlich mein Projekt zu flintieren.

Sie können Dokumentation auf dem scripts Feld für die package.json Datei finden Sie hier: https://docs.npmjs.com/misc/scripts

+1

d. H. Installieren Sie 'eslint-plugin-angular' global – boldnik

1

Sie sind ziemlich garantiert in dieses Problem laufen, wenn Sie einen Führer folgen, der Ihnen sagt npm install -g eslint zu verwenden, die die empfohlene Methode ist Um ESLint zu installieren, werden Sie sofort aufgefordert, eslint --init zu verwenden, um eine Konfiguration für Ihr Projekt zu erstellen. Das Problem ist, dass eslint --initwird installieren Sie die Pakete, die Sie benötigen, aber es installiert sie lokal, auch wenn es von einem global installierten eslint ausgeführt wird. Ich war so klug wie zuvor, bis ich eine Datei in Emacs versucht, Bearbeitung und flycheck meldete einen Fehler von 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) 
[...] 

ich sowohl eine globale Installation und eine lokale ermöglichen möchten. Ich könnte den globalen Code für experimentellen Code verwenden, den ich noch überprüfen möchte, der aber keinem bestimmten Projekt angehört, und lokale Installationen mit spezifischeren Anforderungen. Also habe ich ein Skript erstellt als ~/bin/eslint gespeichert. Da ~/bin meine früh PATH ist, wird dieses Skript anstelle von jedem global installieren eslint verwendet:

#!/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]" 

(Für diejenigen, die nicht wissen, exec ist endgültig Wenn die erste exec, nachdem es dann nichts mehr ausgeführt wird. wird ausgeführt.)

Dieses Skript geht von einer Projektstruktur aus, die für npm geeignet ist (dh es gibt eine package.json, die npm prefix finden kann). Es müsste an andere Situationen angepasst werden.

Meine globale eslint ist an einem ungewöhnlichen Ort, passen Sie das Skript an, um es dorthin zu zeigen, wo Sie es installiert haben.