【Rails5】Autoprefixer doesn’t support Node v4.8.2. というエラーへの対処法
Rails5での開発中に
Autoprefixer doesn’t support Node v4.8.2.
というエラーに遭遇しました. (少なくとも私の環境では解決した)対処法をまとめました.
環境
対処法
検索してみると, Stack Overflowで質問されているのが見つかりました.
この解答の通り, mini_racer
というGemを追加したら直りました.
結局どんなエラーだったの?
経験が浅いなりに調べてみました. 結局どうしてmini_racer
を導入するとエラーが解消されたかははっきりわかっていません. しかし原因を調べていく上で自分にとって新しい知識が得られたのでまとめておきます. エラーが解消された理由を推測することはできるかもしれません.
Vender Prefixes とは
CSSにはVender Prefixesというものがありまして, これについては以下のブログにとてもわかりやすく書かれていました.
まだベンダープレフィックスで消耗してるの? – ysklog
少し引用しておきましょう.
「ベンダープレフィックス」とは、主に、CSS3で採用予定(草案段階)の機能を各ブラウザが先行的に実装し、その先行実装した機能を有効化させるために必要な各ブラウザ毎の「-moz-」や「-webkit-」という接頭辞のことをいいます。
つまり, 機能によってはブラウザごとに書かなくてはならない面倒なもの, ということですね.
Autoprefixerとは
面倒なVender Prefixesを自動でつけてくれるのが, Autoprefixer
というGemです. エラー文にも登場していますね.
ExecJSとは
ExecJSというGemにより, JavaScriptで書かれたコードをRubyから実行することができるようになります. ExecJSがサポートしているruntime
として, 以下などが挙げられています.
- therubyracer
- Node.js
- mini_racer
mini_racerとは
これはGitHubのReadmeを読んでもらうのが良いかと. GitHub - discourse/mini_racer: Minimal embedded v8
こちらも少し抜粋しておきましょう.
MiniRacer provides a minimal two way bridge between the V8 JavaScript engine and Ruby.
It was created as an alternative to the excellent therubyracer. Unlike therubyracer, mini_racer only implements a minimal bridge. This reduces the surface area making upgrading v8 much simpler and exhaustive testing simpler.
JavaScriptエンジンのV8とRubyの橋渡しをするものだそうですね. ExecJSはmini_racer
のようなものを使って, RubyからJavaScriptを実行するということなのでしょう.
エラーが解消された理由
すでに述べましたが, 正直よくわかっていません.
mini_racer
を導入することで, ExecJSはNode.js
ではなくmini_racer
を使うようになった, ということでしょうか.