問題
eslint-config-airbnb のパッケージをインストールして.eslintrc に "extends": ["airbnb"], 入れるとjsファイルを開いても Flycheck が動かなくなる。
原因
node パッケージの依存関係でなるっぽい
eslintは現状最新 v5.1.0 だけど4系じゃないと入らないっぽい
"devDependencies": {
"eslint": "^4.19.1",
"eslint-config-airbnb": "^17.0.0",
"eslint-plugin-import": "^2.13.0",
"eslint-plugin-jsx-a11y": "^6.1.1",
"eslint-plugin-react": "^7.10.0"
}
ESLint5系を入れると古いバージョン外入ってしまう eslint-config-airbnb-base の index.js が deprecated のやつを使っててパースがおかしくなって flycheck が正常に動作しなくなるっぽい
Emacsでnode_packages/.binのパスをうまく読み込まない
面倒なのでグローバルにひつようなjsのパッケージを入れちゃう
(インストール済みなのはuninstallしておく)
$ npm -g install eslint@4.19.1
$ npm info "eslint-config-airbnb-base@latest" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install -g "eslint-config-airbnb-base@latest"
$ npm install -g eslint-plugin-jsx-a11y eslint-plugin-import eslint-plugin-react
とりあえず Emacsで シンタックスチェックできるようになった。
追記: add-node-modules-path 使うのが簡単
やっぱりグローバルにインストールするのはよろしくないので add-node-modules-path 使うことにした
M-x package-list-packagesでadd-node-modules-pathをインストール- init.el に設定追加
(eval-after-load 'js2-mode '(add-hook 'js2-mode-hook #'add-node-modules-path)) (eval-after-load 'js2-jsx-mode '(add-hook 'js2-jsx-mode-hook #'add-node-modules-path)) (eval-after-load 'web-mode '(add-hook 'web-mode-hook #'add-node-modules-path))
(゚д゚)ウマー