之前寫了一篇在ruby環境下如何編譯sass的文章:《css預處理器sass使用教程(多圖預警)》,隨着現在前端構建工具的興起,也學着使用這些工具來編譯sass。webpack存在一個CSS的處理平台-PostCSS,它可以幫助你的CSS實現更多的功能,安裝了postcss-loader 和 autoprefixer插件之后,配置相關的loaders就可以編譯使用了。我這里想介紹一下使用gulp編譯sass的方法。
node裝好之后,可以新建一個叫gulp的文件夾,在這個文件夾下面打開命令行窗口,先執行npm init的命令配置好package.json,然后再在當前目錄下本地安裝gulp,執行命令npm install gulp --save-dev(我通常安裝淘寶鏡像,所以執行cnpm install gulp --save-dev),安裝好gulp之后繼續安裝gulp-sass插件:npm install gulp-sass --save-dev(都是局部安裝的,方便require引入),到這,相關前期准備就算好了,你會看到package.json格式是這樣的:
{ "name": "gulp", "version": "1.0.0", "description": "", "main": "index.js", "dependencies": {}, "devDependencies": { "gulp": "^3.9.1", "gulp-sass": "^3.1.0" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
上面出現了2個devDependencies,接下來簡單說下gulp是怎么運行的:
1、首先要創建一個gulp的配置文件,文件名叫gulpfile.js
2、通過require導入依賴包,這就是我們剛剛本地安裝的原因
3、編寫gulp的task方法
4、當前文件夾下,命令行運行該方法即可:gulp 方法名
我們試着執行一個HelloWorld的方法
gulpfile.js
gulp.task('HelloWorld', function() { console.log('HelloWorld'); });
下面運行編譯sass
首先在glup文件夾下面新建一個app文件夾,在app文件夾下面新建一個scss文件夾,scss下面新建2個scss后綴的文件,分別是style.scss和index.scss
index.scss
$background: red; div{ background:$background; }
style.scss
$width:100px; div{ width:$width; }
編寫glup方法
var gulp = require('gulp'); var sass = require('gulp-sass'); gulp.task('sass111', function(){ return gulp.src('app/scss/index.scss') .pipe(sass()) .pipe(gulp.dest('app/css')) });
gulp.src()下是待處理文件,調用sass方法,輸出到gulp.dest()下的文件夾(同名輸出,文件夾會自動創建),執行sass111方法后
結果如下:
可是我們剛剛建的是2個scss文件,能否全部編譯,答案是肯定的,只需做一些細小的修改
var gulp = require('gulp'); var sass = require('gulp-sass'); gulp.task('sass111', function(){ return gulp.src('app/scss/**/*.scss') .pipe(sass()) .pipe(gulp.dest('app/css')) });
*.scss 匹配當前目錄下所有以.scss結尾的文件
**/*.scss 匹配前目錄及所有子目錄下,所有以.scss結尾的文件
!not-me.scss不包含名為not-me.scss文件
*.+(scss|sass) 匹配當前目錄下所有以.scss或者.sass結尾的文件
執行后:
2個都編譯了,如果想監聽修改編譯,只需要增加wacth就可以了:
var gulp = require('gulp'); var sass = require('gulp-sass'); gulp.task('sass111', function(){ return gulp.src('app/scss/**/*.scss') .pipe(sass()) .pipe(gulp.dest('app/css')) }); gulp.watch('app/scss/**/*.scss', ['sass111']);
sass默認輸出的樣式風格是嵌套輸出的方式,如下圖:
同時還有其他方式:
嵌套輸出方式 nested
展開輸出方式 expanded
緊湊輸出方式 compact
壓縮輸出方式 compressed
可以在調用sass方法那里修改輸出格式:sass({outputStyle: 'expanded'}).on('error', sass.logError)
本文練習最終代碼:
var gulp = require('gulp'); var sass = require('gulp-sass'); gulp.task('HelloWorld', function() { console.log('HelloWorld'); }); gulp.task('sass111', function(){ return gulp.src('app/scss/**/*.scss') .pipe(sass({outputStyle: 'expanded'}).on('error', sass.logError)) .pipe(gulp.dest('app/css')) }); gulp.watch('app/scss/**/*.scss', ['sass111']);
分享完畢!