Gulpで処理しているsassを@import
から@use
に移行する手順の覚書です。
まだ自分の環境も全て切り替えたわけではないですし、古い案件は大がかりなメンテナンスがないかぎりはそのままだと思いますが、そういうときに見返すことを目的にまとめました。
@use
から@import
へ移行する手順
移行する手順は次のようになります。
- DartSassのパッケージをインストール
gulp-sass
のコンパイラを切り替え- まとめて読み込むためのファイルを作成
- 既存のファイルの
@import
を@use
・@forward
へ書き換え
前半は環境の構築、後半はソースの修正となっています。では詳しく見ていきましょう。
DartSassのパッケージをインストール
Gulpで使っているgulp-sass
はデフォルトではnode-sass
(LibSass) を使用しています。これをDartSassに切り替えなければなりません。ということでまずはDartSassのパッケージをインストールします。注意点としてはDartSassのパッケージ名がsass
という点です。
ターミナルから次のように入力すればOKです。
npm install --save-dev sass
gulp-sassのコンパイラを切り替え
gulpfile.js
内でさきほどインストールしたsass
を指定するコードを追加すればOKです。
const sass = require('gulp-sass');
sass.compiler = require('sass');
これでDartSassが使えるようになります。
まとめて読み込むファイルを作る
@import
では一番親のファイルに書くだけでmixin
や変数をどのファイルからでも参照できましたが、@use
ではそういうことはできず、各ファイル毎に必要なファイルを@use
で読み込ませる必要があります。また、変数やmixin
の前に名前空間(デフォルトでは定義しているファイルのファイル名)を追加する必要もあります。次がその例です。
@use "mixin";
@use "color";
@use "variable";
@use "animation";
p {
font-color:color.$theme;
include mixin.mediaquery('pc'){
font-size: variable.$article_text;
}
}
この例のようにmixin
や変数の定義を複数のファイルに分けて管理している場合、毎回@use
がたくさん並ぶことになってしまいます。また、名前空間もファイル毎に使い分ける必要があるので、規模が大きくなるほど大変になりそうです。
そこで共通で使うmixin
や変数をまとめて読みこむファイル(ここではimport.scss
というファイル名とします)を一つ作り、それを各ファイルで読み込ませるという方法をとります。この章のタイトルにある「まとめて読み込むファイル」というのはそういう意味です。
注意点としてimport.scss
内では@use
ではなく@forward
を使います。@use
は読み込み元で定義されているものしか使えないという制約があるためです。
上記の例の場合、import.scss
のソースは次のようになります。
@forward "mixin";
@forward "color";
@forward "variable";
@forward "animation";
各scssファイルには次のように読み込んで使います。
@use "import";
p {
font-color:import.$theme;
include import.mediaquery('pc'){
font-size: import.$article_text;
}
}
かなりシンプルに書くことができますね。何か追加したいときもimport.scss
だけ編集すればよいのも便利です。
既存のファイルの修正
ここまでで@import
を@use
に切り替える準備ができました。あとは、既存のファイルを修正していきます。やることは次の2つです。
- ファイル冒頭に
@use "import"
を記入 - 既存の
mixin
や変数名の前に名前空間を追加
1番についてはそのままですね。2番について補足しておくと、デフォルトでは名前空間はファイル名になりますが、as
を使うことで別の名前に変更することができます。自分しか使わない場合は短い表記にしておくと書く労力が少し楽になると思います。例えば上の例で名前空間をi
とすると次のようにシンプルに書くことができます。
@use "import" as i;
p {
font-color: i.$theme;
include i.mediaquery('pc'){
font-size: i.$article_text;
}
}
実際に名前空間をつけていく作業は検索&置換で頑張りましょう。変数名の場合は$
で置換、mixin
の場合はinclude
もしくはmixin
の名前で置換となります。もし忘れていてもエラーがでるのでデバッグはしやすいと思います。
以上で@import
から@use
への移行は完了です。sassで複雑なことをしていなければ検索&置換で比較的時間をかけずに移行することができると思います。
コメント
この記事へのコメントはありません。