Edited at

SublimeText+jshint+nodebrewで動かなかった話

More than 5 years have passed since last update.


現象

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。

http://www.sublimelinter.com/en/latest/troubleshooting.html#the-linter-doesnt-work

ここに、困ったらSublimeTextのコンソール開けと言ってたので、開いてみると

SublimeLinter: WARNING: jshint deactivated, cannot locate 'jshint'

jshintねぇよとおっしゃっておる。

確かにnpm install -g jshintでグローバルに入れてるのに。。。

ターミナルからもjshintコマンドは使える。何故。


原因

nodebrewでnodeのバージョン管理と、npmのパッケージを管理していたためでした。

nodebrewは、npmグローバルインストールしても自動で~/.nodebrewに振ってくれるありがたいものです。

nvmなどと同じようなものですが、nvmbash最適化されているので、zsh使いはnodebrewがベターな模様。

nodebrewはインストール時に、.zshrc.bashrcにパスを通せと言われるので、

export PATH=$HOME/.nodebrew/current/bin:$PATH

.zshrcに追記します。

つまり、/usr/以下にnodenpmを入れるのではなく、~/.nodebrew/current/bin/で一元管理されてるということ。

これでターミナルからはパスが通るのですが、SublimeLinterには通らない模様。

https://github.com/SublimeLinter/SublimeLinter-jshint#linter-installation


If you are using nvm and zsh, ensure that the line to load nvm is in .zshenv and not .zshrc.


nvmzshを使っている場合、nvm.zshenvは読むけど.zshrcは読まないとという意味っぽい。

.zshenv

export PATH=$HOME/.nodebrew/current/bin:$PATH

を追記。

動いた!


結果

パッケージ管理系は大変使いやすく、有り難いものですが、パスの通し方には気をつけましょうというお話でした。

解明に1日かかった。。。

他のnode.jsを使っているSublimeTextのパッケージでも、デフォルトでは大体/usr/local/binあたりを探すので、注意が必要です。


ちな


jslint

https://github.com/devdoc/SublimeLinter-jslint#linter-installation


If you are using zsh and oh-my-zsh, do not load the nvm plugin for oh-my-zsh.


jslintだとさらに注意書きが増え、oh-my-zshnvmプラグインは読まないらしい。

jshintにも影響があるかどうかはnvm使ってないので未調査です。


HTML-CSS-Prettify

こちらもnode.jsを使っているので、パス指定をしなければいけません。

Preferences > Package Settings > HTML/CSS/JS Prettify > set node path

の8行目を、

"osx": "$HOME/.nodebrew/current/bin/node"

に変更。