[gulp] sass編
2016-08-06
gulp を使った sass→css, min.css変換
今回gulpのスクリプトで.scss
を.css
及び.min.css
に変換してみる。gulp自体の設定については下記の記事参照。
フォルダの構成
以下はあるプロジェクトフォルダである。前回の物にapp
、`src`フォルダを追加した。
project_folder
├── 📁app <--追加
│ └── 📁css
├── 📁gulp
│ ├── config.coffee
│ └── 📁tasks
│ ├── sass.coffee
│ :
├── gulpfile.coffee
├── 📁node_modules
├── package.json
└── 📁src <--追加
└── 📁scss
src/sass フォルダ
ここに、変換元となる.scss
ファイルを置いておく。なお、_
で始まるファイルは、他の.scss
から@import
で読み込まれるファイルなので、直接は変換しないものとする。
app/css フォルダ
ここに変換した.css
及び.min.css
を置く。
変換スクリプト
インストールするnpmモジュール
スクリプトの実行に必要なnpmモジュールをインストールしておく。
npm i fs gulp-sass gulp-autoprefixer gulp-cssmin gulp-rename gulp-plumber -D`
sass.coffee
gulp/tasks/sass.coffee
1fs = require('fs')
2gulp = require('gulp')
3sass = require('gulp-sass')
4autoprefixer = require('gulp-autoprefixer')
5cssmin = require('gulp-cssmin')
6rename = require('gulp-rename')
7plumber = require('gulp-plumber')
8config = require('../config')
9
10gulp.task 'sass', ->
11 sassFiles = fs.readdirSync(config.src + '/scss')
12 baseFiles = sassFiles.filter((file) ->
13 return fs.statSync(config.src + '/scss/' + file).isFile() && /.*\.scss$/.test(file) && file.charAt(0) != "_"
14 )
15 .map((file) ->
16 return config.src + '/scss/' + file
17 )
18
19 gulp.src(baseFiles)
20 .pipe(plumber({
21 errorHandler: (err) ->
22 console.log(err.messageFormatted);
23 @emit('end')
24 }))
25 .pipe(sass())
26 .pipe(autoprefixer())
27 .pipe(gulp.dest(config.dest + '/css'))
28 .pipe(cssmin())
29 .pipe(rename({
30 extname: '.min.css'
31 }))
32 .pipe(gulp.dest(config.dest + '/css'))
- 最初に
src/scss
フォルダにある、.scss
ファイルで_
から始まらないファイルの一覧を作成している。 .pipe(plumber({ ...
の部分は、sassの処理でエラーがあっても、処理を継続できるようにしてる。sass()
とautoprefixer()
(-moz-とか-webkit-とかを自動追加する処理)だけ行って、.css
を保存。- 圧縮してから、
.min.css
も保存。 - 上記の例では
.map
ファイルは作成していません。
sass実行
1$ gulp sass
2
3[hh:mm:ss] Requiring external module coffee-script/register
4(node:46893) fs: re-evaluating native module sources is not supported. If you are using the graceful-fs module, please update it to a more recent version.
5[hh:mm:ss] Using gulpfile project_folder/gulpfile.coffee
6[hh:mm:ss] Starting 'sass'...
7[hh:mm:ss] Finished 'sass' after ### ms
手元のnodeはv6.3.0ですが、fsに関するメッセージがでています。何か対処が必要かもしれませんが、sassの変換自体はこれで行えます。