前端自动化工具之--gulp
前端构建工具——实现前端代码的编译(sass、less)、压缩、测试;图片的压缩以及浏览器自动刷新等等功能。 Gulp 基于Node.js的前端构建工具,Gulp有许多插件( 这里是插件 ),使用Gulp可以实现前端代码的编译(sass、less)、压缩、图片的压缩等,当然主要是前端工程化,不过我目前只是需要压缩文件,至于Grunt,相比于Gulp太慢了,当然还有现在流行的webpack也是很强大的自动化工具,今天我们来了解一下,gulp 如何实现自动化: 假如有个本地目录如下图:
当然 你也可以是其他文件夹,需要和下面代码对应,可以自己修改。
接下来,我们安装配置相关工具:
环境:
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 (当然也可以单个安装,需要那个装那个)
// 引入 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 压缩CSS gulp.task('styles', function() { return gulp.src('src/css/*.css') //压缩的文件路径 .pipe(rename({ suffix: '.min' })) .pipe(minifycss()) .pipe(gulp.dest('dist/css')) //生成文件位置 .pipe(notify({ message: 'Styles task complete' })); }); // Scripts 压缩JS gulp.task('scripts', function() { return gulp.src('src/js/**/*.js') //压缩的文件路径 *代表压缩文件夹中的所有文件,你可以指定某一个 .pipe(jshint('.jshintrc')) .pipe(jshint.reporter('default')) .pipe(concat('main.js')) //压缩的文件 .pipe(rename({ suffix: '.min' })) //压缩后名字 .pipe(uglify()) .pipe(gulp.dest('dist/js')) //生成文件位置 .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/css/**/*.css', ['styles']); // Watch .js files gulp.watch('src/js/**/*.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); });
// 引入 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 压缩CSS
gulp.task('styles', function() {
return gulp.src('src/css/*.css') //压缩的文件路径
.pipe(rename({ suffix: '.min' }))
.pipe(minifycss())
.pipe(gulp.dest('dist/css')) //生成文件位置
.pipe(notify({ message: 'Styles task complete' }));
});
// Scripts 压缩JS
gulp.task('scripts', function() {
return gulp.src('src/js/**/*.js') //压缩的文件路径 *代表压缩文件夹中的所有文件,你可以指定某一个
.pipe(jshint('.jshintrc'))
.pipe(jshint.reporter('default'))
.pipe(concat('main.js')) //压缩的文件
.pipe(rename({ suffix: '.min' })) //压缩后名字
.pipe(uglify())
.pipe(gulp.dest('dist/js')) //生成文件位置
.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/css/**/*.css', ['styles']);
// Watch .js files
gulp.watch('src/js/**/*.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
等待命令执行完,时间可能有点长,然后删除空文件夹即可。
可能遇到的问题:
报错
解决办法:npm install --save-dev jshint gulp-jshint
参考:http://stackoverflow.com/questions/33984558/gulp-error-cannot-find-module-jshint-src-cli