牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

Emacs の Flycheck で Javascript の ESLint 設定で airbnb 使いたいのに動かない場合のメモ

問題

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-packagesadd-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))

(゚д゚)ウマー

参考メモ