dartsass-rails は Dart Sass のバイナリ実行ファイルを提供してくれる gem で、これのおかげで Node.js なしでも Dart Sass が使える。
ところがこの gem の v0.4.1 以前ではサポートしているプラットフォームが少なく、 私の持っている Raspberry Pi 3 では動作しなかった。
プラットフォームの判定は このファイル で行われていた。
exe_path =
case platform_string
when /aarch64-linux/ then File.join(__dir__, "aarch64-linux/sass")
when /arm(64)?-darwin/ then File.join(__dir__, "arm64-darwin/sass")
when /darwin/ then File.join(__dir__, "darwin/sass")
when /linux/ then File.join(__dir__, "linux/sass")
when /mswin|mingw|cygwin/ then File.join(__dir__, "mingw32/sass.bat")
else
STDERR.puts(<<~ERRMSG)
ERROR: dartsass-rails does not support the #{platform_string} platform
ERRMSG
exit 1
end
この platform_string
が、 Raspberry Pi 3 だと armv7l-linux-eabihf
なので、 /linux/
にマッチしていた。このとき使用される linux/sass
がどのプラットフォーム用のバイナリだったか覚えていないのだが(64 bit 用だった記憶)、 Raspebrry Pi 3 では動作しなかった。
そのため、自分で テキトーにパッチをあてて 使っていたのだが、先日の v0.5.0 のリリース で sass-embedded という gem を利用するように変更された。
これによって、各プラットフォームに対応した Dart Sass のバイナリ実行ファイルがインストールされるようになった。上記のPRのコメントにある通り、サポートしているプラットフォームの数が多い。
- arm64-darwin
- x86_64-darwin
- aarch64-linux-android
- arm-linux-androideabi
- x86-linux-android
- x86_64-linux-android
- aarch64-linux-gnu
- arm-linux-gnueabihf
- x86-linux-gnu
- x86_64-linux-gnu
- aarch64-linux-musl
- arm-linux-musleabihf
- x86-linux-musl
- x86_64-linux-musl
- x64-mingw-ucrt
- x64-mingw32
- x86-mingw32
ラズパイで dartsass-rails をアップデートしたところ、対応する sass-embedded がインストールされた。
Fetching sass-embedded 1.63.6 (arm-linux-gnueabihf)
Installing sass-embedded 1.63.6 (arm-linux-gnueabihf)
Fetching dartsass-rails 0.5.0 (was 0.4.1)
Installing dartsass-rails 0.5.0 (was 0.4.1)
Raspberry Pi 3 で Dart Sass が動いた!
$ bundle exec dartsass --version
1.63.6