【更新日 : 】
【Gulp】タスクランナーGulpでCompassを利用してSassファイルをコンパイルし、Autoprefixerでベンダープレフィックスを追加する。
- Category:
- Gulp
タスクランナーGulpでCompassを利用してSassファイルをコンパイルし、Autoprefixerでベンダープレフィックスを追加する方法です。少しややこしいのですが、古い案件でCompassのミックスインを利用したsassファイルにAutoprefixerでベンダープレフィックスを付け直したい事があったので実装をしてみました。
※新規で作成をするプロジェクトの場合は、Compassを利用せずGulpでSassファイルをコンパイルし 、Autoprefixerでベンダープレフィックスを追加する方法をオススメします。
GulpとCompassの設定
ベースとなる初期設定は以下ページを参考にしてください。
ベンダープレフィックスを追加するgulp-autoprefixerをインストール
GulpとCompassをインストール後、CSSのベンダープレフィックスを追加するのに利用する「gulp-autoprefixer」をインストールします。
npm install -D gulp-autoprefixer
autoprefixerの設定をプロジェクトのjsonファイルに追加
autoprefixerのバージョンアップに伴ってこれまでgulp.jsファイルに設定を書いていたものが利用できなくなりました。
以下のようなエラーが出る場合は、プロジェクトのjsonファイル(package.json)に追加する必要があります。
Replace Autoprefixer browsers option to Browserslist config.
Use browserslist key in package.json or .browserslistrc file.
Using browsers option cause some error. Browserslist config
can be used for Babel, Autoprefixer, postcss-normalize and other tools.
If you really need to use option, rename it to overrideBrowserslist.
Learn more at:
https://github.com/browserslist/browserslist#readme
https://twitter.com/browserslist
package.jsonの末尾に追加します。
"browserslist": [
"last 3 versions",
"> 5%",
"iOS >= 9.0",
"Android >= 4.1",
"ie >= 11"
]
指定バリエーションはGithubで確認できます。
Gulpを実行するためのgulpfile.jsにautoprefixerを追記
最後にgulpfile.jsにautoprefixerを追記します。
以下はGulp 4.0以降の場合です。
// 各Gulpプラグインの読み込み
var gulp = require('gulp');
var compass = require('gulp-compass');
var header = require( 'gulp-header' );
var plumber = require('gulp-plumber');
var replace = require('gulp-replace');
var autoprefixer = require('gulp-autoprefixer');
// compassを利用してSassファイルをコンパイル
gulp.task('default', function () {
// style.scssファイルを監視
return gulp.watch('sass/*.scss', function () {
// style.scssファイルを取得
return gulp.src('sass/*.scss')
.pipe(plumber())
.pipe(compass({
config_file: 'config.rb', //config.rbファイル参照ディレクトリ
comments: false,
css: 'html/common/css/',//cssファイル生成ディレクトリ
sass: 'sass/'//sassファイル参照ディレクトリ
}))
.pipe(autoprefixer({
cascade: false
}))
.pipe(replace(/@charset "UTF-8";/g, ''))
.pipe(header('@charset "UTF-8";'))
.pipe(gulp.dest('html/common/css/'));
done();
});
});
gulp-autoprefixer 7.0.0でエラーが出た場合
タスクを実行しようとしたところ、gulp-autoprefixerで以下のようなエラーが発生しました。
(発生したバージョン:gulp-autoprefixer 7.0.0)
本エラーはnode.jsのバージョンが古いと発生するようです。
node.jsを更新するか、gulp-autoprefixerの7.0.0を一度アンイストールし、一つ前のバージョン6.1.0をインストールし直す事で解決しました。
/Users/~~~/node_modules/gulp-autoprefixer/index.js:21
(async () => {
^
SyntaxError: Unexpected token (
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:511:25)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:456:32)
at tryModuleLoad (module.js:415:12)
at Function.Module._load (module.js:407:3)
at Module.require (module.js:466:17)
at require (internal/module.js:20:19)
at Object. (/Users/~~~/gulpfile.js:7:20)
at Module._compile (module.js:541:32)
gulp-autoprefixerをアンイストール
npm uninstall -D gulp-autoprefixer
gulp-autoprefixerの旧バージョンをインストール
旧バージョンをインストールしたい場合は末尾にバージョンを追加します。
npm install -D gulp-autoprefixer@6.1.0