2018-05-23

eslint-plugin-nodeでNode8を使いつつNode6で問題の起きないコードを書く

いや、実際にはちゃんとプロダクションコードを書いていないので、他にも気をつけるべきポイントはあると思うのですが、とりあえずついったーで「 Google Functions はなぜ未だに Node 6 なのか」みたいなを見かけて、

そういや、Node 8 LTS を基準に環境作ってて Node 6 要求されたら面倒くさいな

と気になったので調べてみました。

調べたのは二つで、

  • babel-preset-node6
  • eslint-plugin-node

です。

最初「node 8 で書きつつデプロイ時に node 6 で動くコードに変換できればいんじゃね?」と思って、それっぽい名前の babel-preset-node6 を試してみましたが、そんなことは無理でした。こいつの役割は V8 native で動くコードはそのままに、node6 で ES2015 compat じゃない部分を補うためのもので、目的は、transpile の高速化ですね。

で、変換でどうにかするのは早々に諦めて、じゃー lint だなと。

mysticatea/eslint-plugin-node: Additional ESLint's rules for Node.js

できました。

package.json で示すと以下のような感じで指定すれば ok.

{
  "engines": {
    "node": ">= 6" // <- ここで対象バージョンを指定
  },
  "devDependencies": {
    "eslint": "*",
    "eslint-plugin-node": "*"
  }
  "eslintConfig": {
    "plugins": ["node"],
    "extends": ["plugin:node/recommended"]
  }
}

これで例えば以下のように怒られます。

error  Async functions are not supported yet on Node >=6.0.0 \
node/no-unsupported-features

うんうん。

package.json の engines 指定の意味が増えるのはちょっとどうなのかなという気はするのですが1、まぁとりあえず方法は分かったのでよしとします。

  1. 例えば徐々にバージョンを上げていこうとなった場合などに 

About

例によって個人のなんちゃらです