Gulp前端构建让前端飞Web前端之路

用Gulp实现CSS压缩和页面自动刷新

2017-09-13  本文已影响77人  年少有van

为什么要使用Gulp?

看了两天的Gulp,目前接触到Gulp及其一些插件的功能有:

编译LESS(或Sass)、合并与压缩CSS和JS文件、在文件修改后自动刷新页面、给文件添加版本信息等。

这些功能可以让我专注于前端开发,而不用再去管文件的编译等琐事,也不用再在修改代码后手动刷新浏览器查看效果。

这些功能几乎都依赖于Gulp的插件,当然还有更多提供其他功能的插件,大家可以去探索发现。

Gulp详细入门教程

如果不知道Gulp的基础使用方法的话,可以戳下面的链接:
Gulp详细入门教程

一个使用Gulp的小demo

这个demo使用Gulp实现文件修改后的自动刷新浏览器页面编译LESS以及合并压缩CSS文件

//导入工具包 require('node_modules里对应模块')
var gulp = require('gulp'),
    less = require('gulp-less'),            
    browserSync = require('browser-sync'),  // 保存自动刷新

    cssnano = require('gulp-cssnano'),      // CSS 压缩
    rename = require('gulp-rename'),        // 重命名,其实在这个demo里没有用到
    concat = require('gulp-concat'),        // 合并文件

    //当发生异常时提示错误 确保本地安装gulp-notify和gulp-plumber
    notify = require('gulp-notify'),        // 相当于 console.log()
    plumber = require('gulp-plumber');
 
//定义一个testLess任务(自定义任务名称)
gulp.task('testLess', function () {
    gulp.src('src/less/*.less')                                                         //该任务针对的文件
        .pipe(plumber({errorHandler: notify.onError('Error: <%= error.message %>')}))   //错误处理
        .pipe(less())                                                                   //编译less
        .pipe(gulp.dest('src/css'))                                                     //将会在src/css下生成CSS文件
        .pipe(concat('index.min.css'))                                                  //合并CSS文件为index.min.css
        .pipe(cssnano())                                                                //压缩
        .pipe(gulp.dest('dist'));                                                       //输出压缩后的文件
});

gulp.task('testWatch', function () {
    browserSync.init({
        server: {
            baseDir: 'dist'                 // 在 dist 目录下启动本地服务器环境,自动启动默认浏览器
        }
    });

    gulp.watch('src/less/*.less', ['testLess']);
    gulp.watch(['dist/*']).on('change', browserSync.reload);
});

//gulp.task(name[, deps], fn) 定义任务  name:任务名称 deps:依赖任务名称 fn:回调函数
//gulp.src(globs[, options]) 执行任务处理的文件  globs:处理的文件路径(字符串或者字符串数组) 
//gulp.dest(path[, options]) 处理完后文件生成路径

解释一下代码

首先需要在命令行中执行Gulp任务:

gulp testWatch

在名为testWatch的task中,browserSync.init()启动了服务器并打开浏览器、打开了dist文件夹下的index.html页面。

其下的两个gulp.watch()方法分别监视了less文件的修改与dist文件夹下文件的修改,当less文件修改时,调用名为testLess的task,完成less文件的编译并合并压缩CSS文件;此时dist下的CSS文件被修改了,会调用browserSync.reload方法刷新页面。

下附项目目录结构:

项目目录结构

最后

这个demo中用到的插件有:

在代码的注释里面说明了它们的用途,在使用之前我们需要使用以下指令安装插件并添加到package.json文件的开发依赖中。

npm install <插件名> --save-dev

也许你不需要编译LESS的功能,也许你还需要更多其他Gulp的功能,这些通过灵活使用Gulp的插件都能够实现。

最后推荐两个我认为对学习Gulp入门有用的链接:

想了解更多关于Gulp基础API的知识,可以看gulp API 文档

再推荐一位大佬的文章,可以学到更多关于Gulp的用法:
Gulp 自动化你的前端

上一篇下一篇

猜你喜欢

热点阅读