2021.03.20

Node.js

gulp-postcssでautoprefixerを実行

gulp-postcssはgulp上でPostCSSが実行できます。PostCSSはポストプロセッサーとして、コンパイル後のCSSに対して整形等の後処理ができます。autoprefixerはPostCSSのプラグインで、CSSに自動でベンダープレフィックスを付与します。

gulp-postcssとautoprefixerを、それぞれバージョンを指定してインストールします。バージョンを指定しなければ最新バージョンがインストールされますが、最新バージョン通しの組み合わせではエラーが発生する場合があります。

//gulp-postcssバージョン8.0.0とautoprefixerバージョン9.8.6のインストール
npm install gulp-postcss@8.0.0 autoprefixer@9.8.6

gulpfile.jsにautoprefixerの処理を追加します。gulp-postcss及びautoprefixerの実行はgulp-sass実行の後にする必要があります。

autoprefixerのオプションoverrideBrowserslistは、対象ブラウザを2つ前のバージョン、IE11以上、Android4.3以上、safari9以上にしています。grid: trueはCSSのdisplay: grid;に対してベンダープレフィックスを付与、cascade: falseはソース上ベンダープレフィックスのインデントをなしにします。

//gulpfile.js
const gulp = require('gulp');
const sass = require('gulp-sass');
const autoprefixer = require('autoprefixer');  //autoprefixerの読み込み
const postcss = require('gulp-postcss');  //gulp-postcssの読み込み

function styles() {
  return gulp
    .src('./src/scss/**/*.scss')
    .pipe(
      sass({
        outputStyle: 'expanded'
      })
    )
    .pipe(postcss([  //gulp-postcssの実行
      autoprefixer({  //autoprefixerの実行
        overrideBrowserslist: [
          "last 2 versions",
          "ie >= 11",
          "Android >= 4.3",
          "ios_saf >= 9"
        ],
        grid: true,
        cascade: false
      })
    ]))
    .pipe(
      gulp
        .dest('../assets/css')
    );
}

gulp.task('default', styles);

これでautoprefixerが利用できるようになりました。gulpでsassをコンパイルすると、以下のようにlayout.cssにベンダープレフィックスが付与されます。

//layout.css
@charset "UTF-8";

.p-access {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  background: -webkit-gradient(linear, left top, left bottom, from(white), to(black));
  background: -webkit-linear-gradient(top, white, black);
  background: linear-gradient(to bottom, white, black);
}

ベンダープレフィックスのインデントが必要な場合はautoprefixerのオプションで指定したcascade: falseを削除します。cascadeの初期値はtrueです。コンパイル後のCSSは以下になります。

//layout.css
@charset "UTF-8";

.p-access {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  background: -webkit-gradient(linear, left top, left bottom, from(white), to(black));
  background: -webkit-linear-gradient(top, white, black);
  background: linear-gradient(to bottom, white, black);
}

関連記事

2021.10.10

Node.js

gulpでbrowser-syncを実行

gulpにbrowser-syncを組み込んで、gulp起動時にブラウザが立ち上がるようにします。以下のコマンドでbrowser-syncをインストールします。…

2021.03.21

Node.js

gulp-postcssでpostcss-sortingを実行

gulp-postcssはgulp上でPostCSSが実行できます。postcss-sortingはPostCSSのプラグインで、CSSプロパティの記述順を並べ…

2021.10.09

Node.js

gulp-sass 5.0について

2021年7月にgulp-sassのメジャーバージョンが4から5にアップデートされました。gulp-sass 5.0の動作要件はnode.jsバージョン12以上…

2021.03.19

Node.js

gulp-sass実行時のエラー対処法

Node.jsのメジャーバージョンが異なる環境の場合、gulp-sass実行時にnode-sassで以下のようなエラーが発生する場合があります。 npm ls …

2021.01.10

Node.js

npxでgulpを実行

npmはNode.jsインストール時に付属するパッケージ管理マネージャで、Node.jsのパッケージの管理や実行を取り扱うものです。Node.jsをインストール…

上に戻る