長い間、CSSを書く時はSCSS記法のSASSと、SASSのフレームワーク「Compass」を使ってきた。
しかしプロジェクトが大きくなっていくにつれて、SASSのコンパイル速度が遅くなってきた。
今ではコンパイルにかかる時間はおよそ5秒ほどかかっている。
これでは仕事にならない。
そこで何か対策はないかと調べたところ、どうやらSASSにもRuby製やLibSass、DartSassなど、色々と種類があるようで、これまで使ってきたRuby製は既にサポートが打ち切られているようだ。
今もっともメジャーなのが「LibSass」とのことなので、自環境でも使えるように環境構築をしてみた。
LibSassの使い方
LibSassは素のままでは、ファイルを監視して変更があったらコンパイルする、というようなことができないので、Gulpを介してLibSassを使うことにした。
npm i gulp-sass --save-dev
gulpfile.jsの設定
SCSSファイル監視用のタスクを書いてみた。
const gulp = require('gulp');
const sass = require('gulp-sass');
const plumber = require("gulp-plumber");
const autoprefixer = require('gulp-autoprefixer');
//gulpコマンドの省略
const { watch, series, task, src, dest, parallel } = require('gulp');
//Sass
task('sass', function() {
return (
src('./sass/style.scss')
.pipe(plumber())
.pipe(sass({
outputStyle: 'compressed'
}))
.pipe(autoprefixer({
overrideBrowserslist: [
'ie >= 11'
]
}))
.pipe(dest('./css/'))
);
});
//watch
task('watch', (done) => {
watch(['./sass/**/*.scss'], series('sass'));
done();
});
gulpfile.jsを作成したら、タスクを実行してみよう。
gulp watch
監視状態に入り、SCSSファイルを保存すると自動的にコンパイルされるはずだ。
コンパイル速度も大幅に改善された。
Compassも合わせて使いたい場合
既存のファイルでCompassのライブラリを多用している場合など、Compass離れをすることで大幅なコード修正が入ることがある。
この場合、LibSassを使いながら、別の方法でCompassを利用することもできる。
まず、npmでCompassをインストールする。
npm i compass-mixins --save-dev
インストールが完了すると、node_modules/compass-mixinsというフォルダが作成される。
その中に「lib」というフォルダがあるので、これを作業ディレクトリへコピーする。
cp node_modules/compass-mixins/lib sass/lib
最後にSCSSファイル内のimport文のパスを修正する。
@import "compass";
@import "compass/reset";
↓
@import "./lib/compass";
@import "./lib/compass/reset";
これで、Gulp + LibSass + Compassの環境が整った。
Gulpのタスクを実行すると、Ruby Compassでは5秒かかっていたコンパイルが1秒未満で完了した。