現象
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
nvmandzsh, ensure that the line to loadnvmis in.zshenvand 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
zshandoh-my-zsh, do not load thenvmplugin 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"
に変更。