一、gulp的安装
- 全局安装gulp
cnpm install gulp@3 -g
cnpm install gulp@3 -D
- 检查gulp版本
gulp --version
- 创建配置文件
在项目根目录下创建一个名为 gulpfile.js 的文件,内容如下
var gulp = require('gulp'); //告知Node去node_modules中查找gulp包
gulp.task('default', function() {
// 要执行的默认任务代码
console.log('gulp启动成功');//测试gulp是否启动
});
- 运行gulp
在项目根目录下执行 gulp命令即可执行任务名为default
的默认任务。
二、gulp的使用
gulp.task(),gulp.src(),gulp.dest(),gulp.watch(),
- gulp.task()方法,用来定义任务,即你要使用gulp做什么
- gulp.src()方法, 用来获取流,即读取你需要操作的文件。
gulp.src().pipe()方法,用来把流导入到你想要的地方
- gulp.dest() 方法是用来写文件,比如合并/压缩/转译后的文件生成到哪里。
- 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"]); });