Sass v3.4.0.rc.1が出た。&
の扱いが拡充したこととセレクターを扱う関数の追加がトピック。他に予告されていた変数スコープの改善も思ったよりも早く導入された。後方互換性を失う変更はあるものの、大体は問題なくコンパイルされる。けどコンパイラーのオプション他に変化があったため、それらをラップするツールで不具合が起こりやすい。例えばgrunt-contrib-sassが--load-path
と--sourcemap
オプション辺りの変更に対応できておらず、例外を吐いて落ちたりする。
普通に実行する場合は問題ないが、--load-path
オプション付きで実行しようとすると以下の様にSassコンパイラーがNoMethodError
で落ち、タスクが止まってしまうことがある。
Running "sass:main" (sass) task NoMethodError: undefined method `<<' for nil:NilClass Use --trace for backtrace. Warning: Exited with error code 1 Use --force to continue.NoMethodError: Aborted due to warnings.
これはv3.4.0.rc.1でライブラリをロードするパスとして入力ファイルと同じディレクトリが含まれなくなったことに起因する問題のようだ。grunt-contrib-sass経由の場合、--load-path
が常に指定されて実行されるので起こりやすい。CHANGELOGで触れられているようにSASS_PATH
という環境変数を設定しておくと落ちなくなる。
$ export SASS_PATH=.
Bashの場合はexport
で、Windowsでコマンド・プロンプトならset
を使う。.bashrc
などには書かずにGruntを実行するターミナルなどで設定するのが良さそう。環境変数の有無が問題なような感じなので、.
じゃなくても良さそう。
Sass v3.4.0.rc.1ではSource Mapがデフォルトで出力されるようになり、それに伴ってオプションも変更になった。
--sourcemap=TYPE How link generated output to the source files. auto (default): relative paths where possible, file URIs elsewhere file: always absolute file URIs inline: include the source text in the sourcemap none: no sourcemaps
今までのような真偽値のオプションではなくなり、文字列でSource Mapの出力方法を指定するように変わっている。また他の--style
や--default-encoding
と違って、このオプションのみ=
で値を指定する必要がある。grunt-contrib-sassではこの新しい値の文字列に対応していないのみならず、内部で利用しているdargs
パッケージが=
で値を指定する方法に対応していないので、結構大胆に手をいれる必要があった。
おおまかにv3.3.xにも対応したつもりだけど、オプションを省略した時の挙動がSassのバージョンによって変わる(ためにテストが通らない)。もっとうまく書けそうだったらプル・リクエストを送るつもりだけど、テストの修正なしにはちょっと難しそう。
とりあえず手元の環境ではちゃんと動くようにできたので、今のところはまぁ良いかという感じ。--sourcemap=auto
とかへの対応はSass側で修正されそうな気がするので、焦ってプル・リクエスト送らない方が良さそうとも思ってる。
grunt-contrib-sassのv0.8.0がリリースされ、Sass v3.4.0がサポートされた。上記の問題は解決したが、代わりにv3.3.14以下でSource Mapを出力することはできなくなったことには注意が必要。