zoukankan      html  css  js  c++  java
  • gulp教程

    最近项目中用到前端构建工具gulp,特意总结一下:

    gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器;她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用她,我们不仅可以很愉快的编写代码,而且大大提高我们的工作效率。

    gulp是基于Nodejs的自动任务运行器, 她能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。在实现上,她借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单。通过本文,我们将学习如何使用Gulp来改变开发流程,从而使开发更加快速高效(拷贝)。比如:

     

    1.安装

      直接用nodejs安装即可,在项目里面新建一个gulpfile.js文件,然后就可以在项目下面使用gulp命令根据gulpfile.js里面的内容对项目进行构建。

      预览:

      

    2.gulp介绍,主要看配置文件。

    //导入工具包 require('node_modules里对应模块')
    var gulp = require('gulp'),
        // 获取 uglify 模块(用于压缩 JS)
        uglify = require('gulp-uglify'),
        less = require('gulp-less'),
        //获取 clean-css模块(用于压缩css)
        cleancss = require('gulp-clean-css'),
        //获取imagemin模块(用于压缩图片)
        imagemin = require('gulp-imagemin'),
        // 获取autoprefixer模块(用于添加浏览器前缀)
        autoprefixer = require('gulp-autoprefixer'),
        // JS代码检查工具,可以检测JavaScript中错误和潜在问题
        jshint = require('gulp-jshint'),
        // html清理
        htmlmin = require('gulp-htmlmin'),
        //重命名
        rename = require('gulp-rename'),
        //目标目录清理,在用于gulp任务执行前清空目标目录
        clean = require('gulp-clean'),
        //文件拼接,可用于多个CSS文件或多个JS文件的合并
        concat = require('gulp-concat'),
        //任务通知,可用于某项任务执行完成的在控制台输出通知
        notify = require('gulp-notify'),
        //资源缓存处理,可用于缓存已压缩过的资源,如:图片
        cache = require('gulp-cache'),
        //实时更新
        livereload = require('gulp-livereload'),
        // 浏览器同步刷新,借助node模块Browsersync 
        browserSync = require('browser-sync').create(),
        pump = require('pump'),
        //页面重新加载
        reload = browserSync.reload;
    //gulp.task(name[, deps], fn) 定义任务  name:任务名称 deps:依赖任务名称 fn:回调函数
    //gulp.src(globs[, options]) 执行任务处理的文件  globs:处理的文件路径(字符串或者字符串数组) 
    //gulp.dest(path[, options]) 处理完后文件生成路径

    /**build**/
    // 复制不需要编译的资源
    gulp.task('copy'function() {
        gulp.src('static/fonts/*')
            .pipe(gulp.dest('dist/static/fonts'))
    });
    //html
    gulp.task('htmls'function() {
        var options = {
            removeComments: true//清除HTML注释
            collapseWhitespace: false//压缩HTML
            collapseBooleanAttributes: true//省略布尔属性的值 <input checked="true"/> ==> <input />
            removeEmptyAttributes: true//删除所有空格作属性值 <input id="" /> ==> <input />
            removeScriptTypeAttributes: true//删除<script>的type="text/javascript"
            removeStyleLinkTypeAttributes: true//删除<style>和<link>的type="text/css"
            // minifyJS: true,//压缩页面JS
            // minifyCSS: true//压缩页面CSS
        };
        gulp.src('./*.html')
            .pipe(htmlmin(options))
            .pipe(gulp.dest('dist'));
    });

    gulp.task('autopre'function() {
        gulp.src('src/css/index.css')
            .pipe(autoprefixer({
                browsers: ['last 2 versions''ios 7''Android >= 4.0'],
                cascade: true//是否美化属性值 默认:true 像这样:
                //-webkit-transform: rotate(45deg);
                //        transform: rotate(45deg);
                remove: true //是否去掉不必要的前缀 默认:true 
            }))
            .pipe(gulp.dest('dist/css'));
    });


    // 样式处理任务
    gulp.task('styles'function() {
        return gulp.src('src/css/*.css'//引入所有CSS
            .pipe(concat('index.css')) //合并CSS文件
            .pipe(autoprefixer('last 2 version''ios 6''android >= 4'))
            .pipe(rename({ suffix: '.min' })) //文件重命名
            // .pipe(cleancss())                  //CSS压缩
            .pipe(gulp.dest('dist/static/css')) //压缩版输出
            // .pipe(notify({ message: '样式文件处理完成' }));
    });

    // JS处理任务
    gulp.task('jsmin'function(cb) {
        pump([
            gulp.src('src/js/*.js'), //多个文件以数组形式传入
            uglify(),
            gulp.dest('dist/js')
        ], cb)
    });

    gulp.task('jsconcat'function() {
        // gulp.src(['static/js/libs/layer.js', 'static/js/libs/index.min.js']) //多个文件以数组形式传入
        gulp.src(['src/js/a.js''src/js/b.js''src/js/c.js']) //多个文件以数组形式传入
            .pipe(concat('abc.js'))
            .pipe(gulp.dest('dist/js'));
    });


    gulp.task('scripts'function() {
        return gulp.src('src/js/*.js'//引入所有需处理的JSs
            .pipe(jshint.reporter('default')) //S代码检查
            .pipe(concat('index.js')) //合并JS文件
            .pipe(rename({ suffix: '.min' })) //重命名
            .pipe(uglify()) //压缩JS
            .pipe(gulp.dest('dist/js')) //压缩版输出
            // .pipe(notify({ message: 'JS文件处理完成' }));
    });

    // 图片处理任务
    gulp.task('images'function() {
        return gulp.src('static/images/*'//引入所有需处理的image
            .pipe(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })) //压缩图片
            // 如果想对变动过的文件进行压缩,则使用下面一句代码
            // .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true }))) 
            .pipe(gulp.dest('dist/static/images'))
            // .pipe(notify({ message: '图片处理完成' }));
    });

    // 目标目录清理
    gulp.task('clean'function() {
        return gulp.src(['dist/static/css''dist/static/js''dist/static/images'], { read: false })
            .pipe(clean());
    });

    // 预设任务,执行清理后build
    gulp.task('build', ['clean'], function() {
        gulp.start('copy''htmls''styles''scripts''images');
    });
    //把less文件编译成css
    gulp.task('less'function() {
        gulp.src('src/css/*.less')
            .pipe(less())
            .pipe(gulp.dest('src/css')); //将会在src/css下生成index.css
    });
    //browser-sync初始化,创建静态服务器
    gulp.task('browser-sync'function() {
        browserSync.init({
            server: {
                baseDir: "./"
            }
        });
        gulp.watch(["src/css/*.css""src/html/*.html"]).on('change', reload);
    });
    //监听修改,当less文件发生变化的时候,执行less任务
    gulp.task('watch'function() {
        livereload.listen();
        gulp.watch('src/css/*.less', ['less']);
    });
     

    3.注意,在执行jsmin的时候,发现错误。然后到github上看是借用了pump模块,借用pump模块,把gulp流放在回调函数里能更详细的看出问题所在:

     4.完整项目见github:

      https://github.com/LeaderAndMaster/gulpdemo

     

  • 相关阅读:
    Ubuntu
    VSCode
    VSCode
    Astyle
    Qt
    待办
    Qt
    Qt
    Qt
    python pip常用命令、配置pip源
  • 原文地址:https://www.cnblogs.com/lvhw/p/6583096.html
Copyright © 2011-2022 走看看