問題
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))
(゚д゚)ウマー