Gulp壓縮前端CS,JS,圖片文件
Gulp 基于Node.js的前端構建工具,Gulp有許多插件( 這里是插件 ),使用Gulp可以實現前端代碼的編譯(sass、less)、壓縮、圖片的壓縮等,當然主要是前端工程化,不過我目前只是需要壓縮文件就,至于Grunt,相比于Gulp太慢了, Gulp API ;
假如有個本地目錄,如下圖:
環境:
Windows,安裝Node https://nodejs.org/en/
安裝Gulp:
1,全局安裝,執行:npm install gulp -g
2,本地目錄安裝,cmd 到你的項目根目錄,執行: npm install gulp --save-dev
安裝插件:
- 自動添加css前綴( gulp-autoprefixer )
- 壓縮css( gulp-minify-css )
- js代碼校驗( gulp-jshint )
- 合并js文件( gulp-concat )
- 壓縮js代碼( gulp-uglify )
- 壓縮圖片( gulp-imagemin )
- 自動刷新頁面( gulp-livereload )
- 圖片緩存,只有圖片替換了才壓縮( gulp-cache )
- 更改提醒( gulp-notify )
- 清除文件( del )
執行:npm install gulp-autoprefixer gulp-minify-css gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-notify gulp-rename gulp-livereload gulp-cache del --save-dev
加載插件:
在根目錄創建 gulpfile.js
// 引入 gulp及組件 var gulp = require('gulp'), autoprefixer = require('gulp-autoprefixer'), minifycss = require('gulp-minify-css'), //壓縮css jshint = require('gulp-jshint'), //js代碼校驗 uglify = require('gulp-uglify'), //壓縮JS imagemin = require('gulp-imagemin'), //壓縮圖片 rename = require('gulp-rename'), //合并js文件 concat = require('gulp-concat'), notify = require('gulp-notify'), cache = require('gulp-cache'), livereload = require('gulp-livereload'), del = require('del');
建立任務:
// Styles gulp.task('styles', function() { return gulp.src('src/styles/*.css') .pipe(rename({ suffix: '.min' })) .pipe(minifycss()) .pipe(gulp.dest('dist/styles')) .pipe(notify({ message: 'Styles task complete' })); }); // Scripts gulp.task('scripts', function() { return gulp.src('src/scripts/**/*.js') .pipe(jshint('.jshintrc')) .pipe(jshint.reporter('default')) .pipe(concat('main.js')) .pipe(rename({ suffix: '.min' })) .pipe(uglify()) .pipe(gulp.dest('dist/scripts')) .pipe(notify({ message: 'Scripts task complete' })); }); // Images gulp.task('images', function() { return gulp.src('src/images/**/*') .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true }))) .pipe(gulp.dest('dist/images')) .pipe(notify({ message: 'Images task complete' })); }); // Clean 任務執行前,先清除之前生成的文件 gulp.task('clean', function(cb) { del(['dist/assets/css', 'dist/assets/js', 'dist/assets/img'], cb) }); // Default task 設置默認任務 gulp.task('default', ['clean'], function() { gulp.start('styles', 'scripts', 'images'); });
監聽文件:
// Watch gulp.task('watch', function() { // Watch .scss files gulp.watch('src/styles/**/*.css', ['styles']); // Watch .js files gulp.watch('src/scripts/**/*.js', ['scripts']); // Watch image files gulp.watch('src/images/**/*', ['images']); // Create LiveReload server livereload.listen(); // Watch any files in dist/, reload on change gulp.watch(['dist/**']).on('change', livereload.changed); });
然后在 cdm執行任務就可以了,例如:壓縮css執行 [ gulp styles ],等待執行完成,你就可以在dist目錄下找到壓縮好了的文件,如下圖
看看壓縮后和壓縮前的大小:
還是很給力的吧。
windows 下刪除 node_modules 文件夾會提示源路徑太長無法刪除什么的,找到個方法
在gulpDemo 下新建個空文件夾,隨便命名:r
然后cmd 進入gulpDemo,輸入命令: Robocopy /MIR r node_modules
等待命令執行完,時間可能有點長,然后刪除空文件夾即可。
demo的源碼來了: https://github.com/jreey/LearningDemo/tree/master/gulpDemo