Gulp自动化流程

一、gulp的安装

  • 全局安装gulp

cnpm install gulp@3 -g 

cnpm install gulp@3 -D

  • 检查gulp版本

 gulp --version

  • 创建配置文件

 在项目根目录下创建一个名为 gulpfile.js 的文件,内容如下

var gulp = require('gulp'); //告知Nodenode_modules中查找gulp

gulp.task('default', function() {

  // 要执行的默认任务代码

console.log('gulp启动成功');//测试gulp是否启动

});

  • 运行gulp

在项目根目录下执行 gulp命令即可执行任务名为default的默认任务。

二、gulp的使用

gulp.task(),gulp.src(),gulp.dest(),gulp.watch(),

  1. gulp.task()方法,用来定义任务,即你要使用gulp做什么
  2. gulp.src()方法, 用来获取流,即读取你需要操作的文件。

gulp.src().pipe()方法,用来把流导入到你想要的地方

  1. gulp.dest() 方法是用来写文件,比如合并/压缩/转译后的文件生成到哪里。
  2. gulp.watch()方法,用来监视文件的变化,当文件发生变化后,我们可以利用它来执行相应的任务,例如文件压缩等
    var gulp = require('gulp');//导入gulp模块
    var webpack = require('webpack-stream'); //导入js打包模块(webpack)
    var $ = require('gulp-load-plugins')();
    
    //对首页进行全套转译和打包
    gulp.task("index", () => {
        //创建压缩参数对象
        var options = {
            removeComments: true,//清除HTML注释
            collapseWhitespace: true,//压缩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
        };
        //首页html文件
        gulp.src('src/index.html')
            .pipe($.htmlmin(options))
            .pipe(gulp.dest('dist/'));
        //详情页html文件
        gulp.src('src/index/other.html')
            .pipe($.htmlmin(options))
            .pipe(gulp.dest('dist/pages'));
    
        //首页less文件
        gulp.src('src/index.less') // 该任务针对的文件
            .pipe($.less()) // 转义less
            .pipe($.cleanCss()) // 压缩css
            .pipe(gulp.dest('dist/css')); // 将会在dist/css下生成test.css
        //详情页less文件
        gulp.src('src/index/other.less') // 该任务针对的文件
            .pipe($.less()) // 转义less
            .pipe($.cleanCss()) // 压缩css
            .pipe(gulp.dest('dist/css')); // 将会在dist/css下生成test.css
    
        gulp.src("src/index.js")// ES6 源码存放的路径
            .pipe(webpack({
                // 这里写webpack的配置
                mode: "development", //以开发模式进行打包(如果以生成模式进行打包就会自动的压缩)development(开发) production(生产)
                //多入口文件导入
                entry: {
                    index: './src/index.js',
                    other: './src/index/other.js'
                },
                output: {
                    filename: '[name].js' //打包输出的文件名
                },
                module: {
                    rules: [
                        { test: /\.js$/, use: ['babel-loader'] }, //使用webpack的加载器来转译js语法
                    ]
                },
            }))
            .pipe(gulp.dest('dist/js')) //生成经过插件处理后的文件
    
        gulp.src("src/index/images/*.*")
            .pipe($.imagemin({ progressive: true }))
            .pipe(gulp.dest("dist/images/index"))
    });
    
    //后台管理页面进行全套转译和打包
    gulp.task('backstage', () => {
        //创建压缩参数对象
        var options = {
            removeComments: true,//清除HTML注释
            collapseWhitespace: true,//压缩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('src/backstage/backstage.html')
            .pipe($.htmlmin(options))
            .pipe(gulp.dest('dist/pages'));
    
        gulp.src('src/backstage/backstage.less') // 该任务针对的文件
            .pipe($.less()) // 转义less
            .pipe($.cleanCss()) // 压缩css
            .pipe(gulp.dest('dist/css')); // 将会在dist/css下生成test.css
    
        gulp.src("src/backstage/backstage.js")// ES6 源码存放的路径
            .pipe(webpack({
                // 这里写webpack的配置
                mode: "development", //以开发模式进行打包(如果以生成模式进行打包就会自动的压缩)development(开发) production(生产)
                //多入口文件导入
                entry: {
                    backstage: './src/backstage/backstage.js'
                },
                output: {
                    filename: '[name].js' //打包输出的文件名
                },
                module: {
                    rules: [
                        { test: /\.js$/, use: ['babel-loader'] }, //使用webpack的加载器来转译js语法
                    ]
                },
            }))
            .pipe(gulp.dest('dist/js')) //生成经过插件处理后的文件
    
        gulp.src("src/backstage/images/*.*")
            .pipe($.imagemin({ progressive: true }))
            .pipe(gulp.dest("dist/images/backstage"))
    });
    
    //家长端页面进行全套转译和打包
    gulp.task("parent", () => {
        //创建压缩参数对象
        var options = {
            removeComments: true,//清除HTML注释
            collapseWhitespace: true,//压缩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('src/parent/parent.html')
            .pipe($.htmlmin(options))
            .pipe(gulp.dest('dist/pages'));
    
        gulp.src('src/parent/parent.less') // 该任务针对的文件
            .pipe($.less()) // 转义less
            .pipe($.cleanCss()) // 压缩css
            .pipe(gulp.dest('dist/css')); // 将会在dist/css下生成test.css
    
        gulp.src("src/parent/parent.js")// ES6 源码存放的路径
            .pipe(webpack({
                // 这里写webpack的配置
                mode: "development", //以开发模式进行打包(如果以生成模式进行打包就会自动的压缩)development(开发) production(生产)
                //多入口文件导入
                entry: {
                    parent: './src/parent/parent.js'
                },
                output: {
                    filename: '[name].js' //打包输出的文件名
                },
                module: {
                    rules: [
                        { test: /\.js$/, use: ['babel-loader'] }, //使用webpack的加载器来转译js语法
                    ]
                },
            }))
            .pipe(gulp.dest('dist/js')) //生成经过插件处理后的文件
    
        gulp.src("src/parent/images/*.*")
            .pipe($.imagemin({ progressive: true }))
            .pipe(gulp.dest("dist/images/parent"))
    })
    
    //学校端页面进行全套转译和打包
    gulp.task("school", () => {
        //创建压缩参数对象
        var options = {
            removeComments: true,//清除HTML注释
            collapseWhitespace: true,//压缩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('src/school/school.html')
            .pipe($.htmlmin(options))
            .pipe(gulp.dest('dist/pages'));
    
        gulp.src('src/school/school.less') // 该任务针对的文件
            .pipe($.less()) // 转义less
            .pipe($.cleanCss()) // 压缩css
            .pipe(gulp.dest('dist/css')); // 将会在dist/css下生成test.css
    
        gulp.src("src/school/school.js")// ES6 源码存放的路径
            .pipe(webpack({
                // 这里写webpack的配置
                mode: "development", //以开发模式进行打包(如果以生成模式进行打包就会自动的压缩)development(开发) production(生产)
                //多入口文件导入
                entry: {
                    school: './src/school/school.js'
                },
                output: {
                    filename: '[name].js' //打包输出的文件名
                },
                module: {
                    rules: [
                        { test: /\.js$/, use: ['babel-loader'] }, //使用webpack的加载器来转译js语法
                    ]
                },
            }))
            .pipe(gulp.dest('dist/js')) //生成经过插件处理后的文件
    
        gulp.src("src/school/images/*.*")
            .pipe($.imagemin({ progressive: true }))
            .pipe(gulp.dest("dist/images/school"))
    })
    
    //教师端页面进行全套转译和打包
    gulp.task("teacher", () => {
        //创建压缩参数对象
        var options = {
            removeComments: true,//清除HTML注释
            collapseWhitespace: true,//压缩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('src/teacher/teacher.html')
            .pipe($.htmlmin(options))
            .pipe(gulp.dest('dist/pages'));
    
        gulp.src('src/teacher/teacher.less') // 该任务针对的文件
            .pipe($.less()) // 转义less
            .pipe($.cleanCss()) // 压缩css
            .pipe(gulp.dest('dist/css')); // 将会在dist/css下生成test.css
    
        gulp.src("src/teacher/teacher.js")// ES6 源码存放的路径
            .pipe(webpack({
                // 这里写webpack的配置
                mode: "development", //以开发模式进行打包(如果以生成模式进行打包就会自动的压缩)development(开发) production(生产)
                //多入口文件导入
                entry: {
                    teacher: './src/teacher/teacher.js'
                },
                output: {
                    filename: '[name].js' //打包输出的文件名
                },
                module: {
                    rules: [
                        { test: /\.js$/, use: ['babel-loader'] }, //使用webpack的加载器来转译js语法
                    ]
                },
            }))
            .pipe(gulp.dest('dist/js')) //生成经过插件处理后的文件
    
        gulp.src("src/teacher/images/*.*")
            .pipe($.imagemin({ progressive: true }))
            .pipe(gulp.dest("dist/images/teacher"))
    })
    
    //第三方全套转译和打包
    gulp.task("lib", () => {
        gulp.src('src/lib/bootstrap/*.*') // 该任务针对的文件
            .pipe(gulp.dest('dist/lib/bootstrap')) //生成经过插件处理后的文件
    
        gulp.src('src/lib/jquery/*.*') // 该任务针对的文件
            .pipe(gulp.dest('dist/lib/jquery')) //生成经过插件处理后的文件
    
        gulp.src('src/lib/layui/**/*') // 该任务针对的文件
            .pipe(gulp.dest('dist/lib/layui')) //生成经过插件处理后的文件
    
        gulp.src('src/lib/echarts/*.*') // 该任务针对的文件
            .pipe(gulp.dest('dist/lib/echarts')) //生成经过插件处理后的文件
    
        gulp.src('src/lib/jigsaw/*.*') // 该任务针对的文件
            .pipe(gulp.dest('dist/lib/jigsaw')) //生成经过插件处理后的文件
    })
    
    gulp.task('default', () => {
        gulp.start("index", "backstage", "parent", "school", "teacher", "lib")
        // 首页执行的默认任务代码
        gulp.watch("src/*.*", ["index"]);
        gulp.watch("src/index/*.*", ["index"]);
        gulp.watch("src/index/*/*.*", ["index"]);
    
        // 后台管理页面执行的默认任务代码
        gulp.watch("src/backstage/*.*", ["backstage"]);
        gulp.watch("src/backstage/*/*.*", ["backstage"]);
    
        // 家长端页面执行的默认任务代码
        gulp.watch("src/parent/*.*", ["parent"]);
        gulp.watch("src/parent/*/*.*", ["parent"]);
    
        // 学校端页面执行的默认任务代码
        gulp.watch("src/school/*.*", ["school"]);
        gulp.watch("src/school/*/*.*", ["school"]);
    
        // 教师端页面执行的默认任务代码
        gulp.watch("src/teacher/*.*", ["teacher"]);
        gulp.watch("src/teacher/*/*.*", ["teacher"]);
    });
    
    

     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值