現象
Sublime Text 3のパッケージ、SublimeLinter-jshintを使っていて、急に動かなくなった(原因はあった)ので、その解消方法を共有。
環境
- Mac
- Sublime Text 3
- SublimeLinter
- SublimeLinter-jshint
- Homebrew
- zsh by homebrew
- oh-my-zsh
- nodebrew by homebrew
- node by nodebrew
- jshint by nodebrew
動かなくなるまで
gulpなどいじっていて、npm周りを触っていたところ、急にSublime Text 3のjshintが動かなくなった。
これがないとJavaScript初心者には辛い。。。
Sublime Text 3のパッケージ全部消しても、環境にあげたもの全て再インストールしても直らない。
最後にはOS再インストールしたのに直らない。。。
試しに入れたSublimeLinter-html-tidyは動いたので、(tidy
は入れてた)nodeかnpm周りのエラーと断定。
ちなhtml-tidyは厳しすぎて消しました。
原因究明まで
同じころに、nodeのバージョン管理マネージャーのnodebrew
を入れたので、たぶんそれが原因かな。。。と薄々思いながら、Google dig。
ここに、困ったらSublimeTextのコンソール開けと言ってたので、開いてみると
SublimeLinter: WARNING: jshint deactivated, cannot locate 'jshint'
jshintねぇよとおっしゃっておる。
確かにnpm install -g jshint
でグローバルに入れてるのに。。。
ターミナルからもjshintコマンドは使える。何故。
原因
nodebrewでnodeのバージョン管理と、npmのパッケージを管理していたためでした。
nodebrew
は、npmグローバルインストールしても自動で~/.nodebrew
に振ってくれるありがたいものです。
nvm
などと同じようなものですが、nvm
はbash
最適化されているので、zsh
使いはnodebrew
がベターな模様。
nodebrewはインストール時に、.zshrc
か.bashrc
にパスを通せと言われるので、
export PATH=$HOME/.nodebrew/current/bin:$PATH
を.zshrc
に追記します。
つまり、/usr/
以下にnode
やnpm
を入れるのではなく、~/.nodebrew/current/bin/
で一元管理されてるということ。
これでターミナルからはパスが通るのですが、SublimeLinterには通らない模様。
If you are using
nvm
andzsh
, ensure that the line to loadnvm
is in.zshenv
and not.zshrc
.
nvm
とzsh
を使っている場合、nvm
は.zshenv
は読むけど.zshrc
は読まないとという意味っぽい。
.zshenv
に
export PATH=$HOME/.nodebrew/current/bin:$PATH
を追記。
動いた!
結果
パッケージ管理系は大変使いやすく、有り難いものですが、パスの通し方には気をつけましょうというお話でした。
解明に1日かかった。。。
他のnode.js
を使っているSublimeTextのパッケージでも、デフォルトでは大体/usr/local/bin
あたりを探すので、注意が必要です。
ちな
jslint
If you are using
zsh
andoh-my-zsh
, do not load thenvm
plugin foroh-my-zsh
.
jslintだとさらに注意書きが増え、oh-my-zsh
のnvm
プラグインは読まないらしい。
jshintにも影響があるかどうかはnvm
使ってないので未調査です。
HTML-CSS-Prettify
こちらもnode.js
を使っているので、パス指定をしなければいけません。
Preferences > Package Settings > HTML/CSS/JS Prettify > set node path
の8行目を、
"osx": "$HOME/.nodebrew/current/bin/node"
に変更。