前端自動化之神器 — Gulp
Nodejs不僅把Javascript帶到了服務端,也在前端掀起了自動化的浪潮,推動了前端工作的歷史性巨變,今天和大家一起學習前端自動化的神器---Gulp;
說起自動化,自然少不了Grunt,這位前輩目前社區完善,擁有幾千個現成插件,install下來參考文檔即可配置使用(參見: 前端自動化之利劍——Grunt );而Gulp的出現,希望取其精華并取代Grunt,成為最流行的Javascript構建工具,Gulp采用代碼優于配置的策略,讓簡單的事繼續簡單,讓復雜的事變得可管理;
與Grunt的不同:
- 流:Gulp是一個基于流的構建系統,使用代碼優于配置的策略。
- 插件:Gulp的插件更純粹,單一的功能,并堅持一個插件只做一件事。
- 代碼優于配置:維護Gulp更像是寫代碼,而且Gulp遵循CommonJS規范,因此跟寫Node程序沒有差別。
- 沒有產生中間文件
使用Gulp的優勢就是利用流的方式進行文件的處理,通過管道將多個任務和操作連接起來,因此只有一次I/O的過程,流程更清晰,更純粹。Gulp去除了中間文件,只將最后的輸出寫入磁盤,整個過程因此變得更快。
下面在根目錄下新建一個Gulpfile.js,我們將完成以下任務:
- 圖片的無損壓縮
- Sass文件的編譯壓縮
- JS文件的壓縮合并
- 對以上任務的實時監聽
cmd進入項目根目錄,安裝所需要的Gulp及其插件:
1 npm install gulp gulp-imagemin gulp-ruby-sass gulp-uglify gulp-cache gulp-watch --save-dev
Gulp遵循Commonjs規范,所以你可以像寫Nodejs程序一樣把插件們require進來;
1 var gulp=require('gulp');
2 var imagemin=require('gulp-imagemin');
3 var cache=require('gulp-cache');
4 var uglify=require('gulp-uglify');
5 var sass=require('gulp-ruby-sass');
6 var watch=require('gulp-watch'); 接著完成我們要完成的任務:
1 //圖片的無損壓縮
2 gulp.task('imagemin',function() {
3 return gulp.src('./dist/images/**.*')
4 .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))
5 .pipe(gulp.dest('./dist/images'));
6 });
7
8 //js的壓縮合并
9 gulp.task('uglify', function() {
10 gulp.src('./js/*.js')
11 .pipe(concat('all.js'))
12 .pipe(gulp.dest('./dist'))
13 .pipe(rename('all.min.js'))
14 .pipe(uglify())
15 .pipe(gulp.dest('./dist'));
16 });
17
18 //sass的編譯壓縮
19 gulp.task('sass',function() {
20 return sass('./dist/css/*.scss',{
21 style:'compressed',
22 loadPath:[
23 'common/vars',
24 'mixins/mixin',
25 'mixins/css3',
26 'common/reset',
27 'common/com-class',
28 'placeholders/placeholder'
29 ]
30 })
31 .pipe(gulp.dest('./dist/min'));
32 });
33
34 //實時監聽任務
35 gulp.task('watch',function() {
36 gulp.watch('./dist/css/*.scss',['sass']);
37 gulp.watch('./dist/react/main4.js',['uglify']);
38 }) 是不是很酷!各插件詳細配置,請自行github,同學們加油!
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!