2015-09-20 27 views
8

Próbuję zintegrować ESLint do mojego projektu i biegnę do błędu: „Nie można odnaleźć modułu«eslint-plugin-kanciasty»” kiedy biegnę $ eslint *.js .Nie można odnaleźć modułu „eslint-plugin-kanciasty”

Jedynym sposobem, w jaki mogę to uruchomić, jest zainstalowanie globalnej wtyczki eslint-plugin-kątowej, ale wydaje mi się, że jest ona błędna (chyba że czegoś mi brakuje?).

biegnę:

  • węzeł v0.12.7
  • npm 3.3.4
  • eslint v1.5.0
  • eslint-plugin-kątowej 0.12.0

ESLint jest instalowany globalnie.

Mój plik package.json posiada następujące pozycje:

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

Mam $ rm -rf node_modules i ponownie wykonuję numer $ npm install, aby upewnić się, że nie wystąpił problem z zależnością npm lub uszkodzenie. Sprawdziłem również uprawnienia do katalogów w node_modules, aby upewnić się, że dostęp jest możliwy.

My .eslintrc zawiera:

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

Co ja tu brakuje? Dzięki! ps. Otworzyłem bilet na github: https://github.com/Gillespie59/eslint-plugin-angular/issues/222 - zastanawiałem się tylko, czy ktoś w społeczności Stack nie ma na to ochoty.

Odpowiedz

16

Okazało się, że odpowiedź tutaj: http://eslint.org/docs/user-guide/configuring#configuring-plugins

„Uwaga: a. Globalnie zainstalowana instancja ESLint mogą korzystać tylko globalnie zainstalowanych wtyczek ESLint lokalnie zainstalowanego ESLint może upewnić się zarówno lokalnie zainstalowany i globalnie zainstalowany ESLint wtyczki. "

To podlega drobnemu drukowi w dokumentacji. :/

Istnieją dwa sposoby radzenia sobie z tym:

(1) zainstalować wtyczkę (y) na całym świecie. Nie jestem szczególnym fanem tego, ponieważ mam wiele projektów klienckich, które są w różnych wersjach zależności i niekoniecznie po prostu uderzę je wszystkie do tej samej wersji.

(2) Zainstaluj wtyczkę (y) lokalnie i dodać skrypt do pliku package.json:

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

(Jeśli jesteś zupełnie nowy w tym, po prostu pamiętać, że to, co jest nie ... other stuff faktycznie chcesz w pliku package.json ...)

Dzięki tej konfiguracji mogę używać npm run eslint do korzystania z eslint i używam npm run lint, aby właściwie lintować mój projekt.

można znaleźć dokumentację na polu scripts dla pliku package.json tutaj: https://docs.npmjs.com/misc/scripts

+1

tj. Zainstaluj 'eslint-plugin-angleular' na całym świecie – boldnik

1

masz prawie gwarantowane do przedostania się do tego problemu, jeśli się przewodnik, który mówi do korzystania npm install -g eslint, który jest zalecany sposób zainstalować program ESLint, a następnie natychmiast poinformować, aby użyć eslint --init do utworzenia konfiguracji dla projektu. Problem polega na tym, że trzeba zainstalować potrzebne pakiety, ale zainstaluje je lokalnie, nawet jeśli jest uruchamiany z globalnie zainstalowanego eslint. I był nikt mądrzejszy aż Próbowałem edytować plik w Emacs i flycheck zgłosił błąd z 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) 
[...] 

Chciałbym, aby umożliwić zarówno globalną instalację i lokalny. Mogę użyć kodu globalnego do eksperymentalnego kodu, który wciąż chcę sprawdzić, ale nie należy do żadnego konkretnego projektu i lokalnych instalacji o bardziej specyficznych potrzebach. Stworzyłem więc skrypt zapisany jako ~/bin/eslint. Od ~/bin jest wcześnie na mój PATH skrypt ten jest używany w miejscu którejkolwiek globalnie zainstalować 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]" 

(Dla tych, którzy nie wiedzą, exec jest ostateczna Jeśli po nim pierwszy exec jest wykonywany wtedy nic. zostanie wykonany.)

Ten skrypt zakłada strukturę projektu odpowiednią dla npm (tj. istnieje, którą może znaleźć npm prefix). Musiałby zostać dostosowany do innych sytuacji.

Mój globalny eslint znajduje się w nietypowej lokalizacji, dostosuj skrypt tak, aby wskazywał lokalizację, w której jest zainstalowany.

Powiązane problemy