nanoc で、SCSSファイルのコンパイルもまとめてできることを知ったので、やろうとしたのだけど、Windows特有のエラーが発生して上手く行かなかった話。
目次
SCSSの使い方(基本)
Nanoc4では、最初からfilterが用意されている。
compile '/**/*.scss' do filter :sass, syntax: :scss write item.identifier.without_ext + '.css' end
上記で良いっぽい?
今回は、複数ファイルに分割(複数の_*.scssを作成)してimportするようにしていたので、下記記事を参考に
Rulesファイルはこんな↓感じにして、_で始まるファイルをスルーするように
compile '/stylesheets/**/_*' do # do not compile end compile '/stylesheets/**/*' do filter :sass, syntax: :scss end … route '/stylesheets/**/_*' do nil end route '/stylesheets/**/*' do item.identifier.chop + '.css' end
発生したエラー
nanocを実行すると下記のエラーが発生した。
Error: Invalid Windows-31J character “\xXX”
ってやつ。
原因がよくわからなかったので、sassを直接叩いてみたのだけど、同じエラーが。
さらに後述の方法で、一部のファイルは問題が解消したと思ったら、今度はSyntaxエラーが発生した。(MacOSX環境下でgulp-sass (内部でlibsassを呼び出す)なら問題のないコード)
Windows環境でよく起きるらしい文字エンコーディング問題
昔からよくある話らしく、原因と対策がいろいろな場所で解説されている。
- Windows上のSASS(SCSS)でUTF-8を使う方法(Invalid Windows-31J characterエラーが出る場合の対処) | TeraDas-テラダス
- Windows環境でSassコンパイルしようとしたらInvalid Windows-31J character “\xE3″ってエラーが出て困った件 – output.space
- Windows環境でSassのコンパイルをした際に発生する「Invalid Windows-31J character」の解決方法 | blog.thegrid.jp
巷で出回っている解決策
- scssファイルの先頭に@charset “UTF-8”;を指定
- sassコマンド呼び出し時に -Eutf-8 オプションを指定
- もしくは環境変数にRUBYOPTを追加。コマンドラインからなら set RUBYOPT=-EUTF-8
- Compassを用いて、configファイルに Encoding.default_external = ‘utf-8’を記載
- set LANG=ja_JP.UTF-8を指定
今回は、いずれも効果が無かった。
原因は不明。