移动端开发使用gulp自动化构建工具的详细步骤全解

介绍

基于流,强调开发流程
移动端开发使用gulp自动化构建工具的详细步骤全解_第1张图片
image
功能
  1. 把一个文件拷贝到另一个位置
  2. 把多个js或css文件合并成一个文件,以减少网络请求数
  3. 对js文件和css文件进行压缩合并 以减少网络流量
  4. 把sess或less文件编译成css
  5. 压缩图像文件,以减少网络流量
  6. 创建一个可以实时刷新页面内容和本地服务器等等
安装gulp
  1. 新建项目文件夹
  2. 进入文件夹 npm init初始化
  3. 完善package.json
  4. npm install gulp--save-dev在node module下安装本地gulp(开发阶段使用)
  5. 并配置到package.json文件里面
gulp命令行(感觉用处不大)
 --gulpfile手动指定一个gulpfile的路径,这在你有很多个gulpfile的时候使用 这也会将cwd设置到该gulpfile所在目录
eg:--gulpfile gulpfile1

--cwd dirpath手动指定cwd(当前工作目录)  定义gulpfile的查找位置,此外,所有的相应的依赖(require)会从这里开始计算相对路径
eg: gulp hello1 --cwd history

-T或--task会显示所指定gulpfile的task依赖树
-tasks-simple会以纯文本的方式显示所载入的gulpfile中task列表

gulp的工作方式

gulp的使用流程一般是:首先通过gulp.src()方法获取到想要处理的文件流
然后把文件流通过pipe方法导入到gulp的插件中
最后把经过插件处理后的流在通过pipe方法导入到gulp.dest()中
gulp.desk()方法则把流中的内容写入到文件中。

例如
    var gulp=require('gulp');
    gulp.src('script/src.js')//获取文件的流的api
            .pipe(gulp.dest)//写文件的api

gulp.src()入口文件路径

gulp.src(globs,[,options]);

参数

  • globs参数是文件匹配模式(类似正则表达式),用来匹配文件路径(包括文件名),当然这里也可以直接指定某个具体的文件路径。当有多个匹配模式时,该参数可以为一个数组
  • options为可选参数。通常情况下我们不需要用到
  • {base:***}//基准路径 默认值为通配符开始出现之那部分路径
    目标路径怎么决定
  • dist路径加上原始路径减去base路径

globs语法

匹配符                             说明
      *                               匹配文件路径中的0个或多个字符,但不会匹配路径分割符,
                                      除非分隔符出现在末尾

      **                              匹配路径的0个会多个目录 及子目录 需要单独出现,
                                      即他左右不能有其他的东西了如果出现在末尾,也能匹配文件

      ?                              匹配文件路径中的一个字符(不能匹配路径分割符/)

      [...]                           匹配方括号中 出现字符的任意一个,当方括号中第一个字符为^或!时,
                                      则表示不匹配方括号中出现字符中的任意一个,
                                      类似于js中正则表达式中的用法

      !(pattern|pattern|pattern)      匹配任何与括号中给定的任意模式都不匹配
      ?(pattern|pattern|pattern)     匹配括号中给定的任意模式0次或1次
      +(pattern|pattern|pattern)      匹配括号中的至少一次
      *(pattern|pattern|pattern)      匹配括号中给定的任意模式0次或多次
      @(pattern|pattern|pattern)      匹配括号中 给定的任意模式一次

    eg:glob 匹配
      |能匹配 a.js,x.y,abc,abc/,但不能匹配a/b.js|
      |.*   a.js,style.css,a.b,x.y
      //*.js    能匹配 a/b/c.js,x/y/z.js,不能匹配a/b.js,a/b/c/d.js
      **    能匹配 abc,a/b.js,a/b/c.js,x/y/z,x/y/z/a.b,能用来匹配所有的目录和文件
      a/**/z    能匹配 a/z,a/b/z,a/b/c/z,a/d/g/h/j/k/z
      a/**b/z   能匹配 a/b/z,a/sb/z,但不能匹配a/x/sb/z,因为只有单**单独出现才能匹配多级目录
      ?.js  能匹配 a.js,b.js,c.js
      a??   能匹配 a.b,abc,但不能匹配ab/,因为它不会匹配路径分隔符
      [xyz].js  只能匹配 x.js,y.js,z.js,不会匹配xy.js,xyz.js等,整个中括号只代表一个字符
      [^xyz].js 能匹配 a.js,b.js,c.js等,不能匹配x.js,y.js,z.js

gulp.dest(); 用来写入文件的,
 gulp.dest(path,[,options]);
    //path为文件路径
    //options为一个 可选对象,通常不需要用到

gulp.watch()

用来监视文件的变化,当文件发生变化后,我们可以利用它来执行相应的任务,例如文件压缩等。

    gulp.watch(globs[,opts],tasks);
    //glob为要见识的文件匹配模式 ,规则和用法与gulp.src方法中的glob相同
    //opts为一个可配置对象 通常不需要用到
    //tasks为文件变化后要执行的任务,为一个数组

插件

移动端开发使用gulp自动化构建工具的详细步骤全解_第2张图片
image
使用插件
npm install XX --save-dev 安装插件到当前的项目dev
在gulpfile.js顶部引入此插件
在创建任务的时候使用此插件

gulp-load-plugins这个插件会自动帮你加载package.json文件里的gulp插件
  • 编译Sass: gulp-sass
gulp.task('default',function(){//js文件合并
   gulp.src('app/sass/!*.sass').pipe($.sass()).pipe(gulp.dest('dist/css'));
})

  • 编译less: gulp-less
gulp.task('default',function(){//js文件合并
   gulp.src('app/less/!*.less').pipe($.less()).pipe(gulp.dest('dist/css'));
})

  • 合并文件: gulp-concat
gulp.task('default',function(){
    gulp.src('app/!*.js').pipe($.concat('all.js')).pipe(gulp.dest('dist'));
})

  • 压缩js文件: gulp-uglify
gulp.task('default',function(){
   gulp.src(['app/js/*.js']).pipe($.uglify()).pipe(gulp.dest('dist/js'))录下
})

  • 重命名js文件: gulp-rename
gulp.task('default',function(){
   gulp.src(['app/js/*.js']).pipe($.rename('app.min.js')).pipe(gulp.dest('dist/js'))
})

  • 优化图像大小: gulp-imagemin
gulp.task('default',function(){
   gulp.src('app/images/*.{jpg,png,JPG,PNG}').pipe($.imagemin()).pipe(gulp.dest('dist/images'))
})

  • 压缩css文件: gulp-minify-css
gulp.task('default',function(){
   gulp.src'app/css/*.css').pipe($.minifyCss()).pipe(gulp.dest('dist/css'))
})

  • 创建本地服务器: gulp-connect
gulp.task('server',function(){
    $.connect.server({
        root:'dist',//服务器的根目录
        port:8080, //服务器的地址,没有此配置项默认也是 8080
        livereload:true//启用实时刷新的功能
    });
});

  • 实时预览: gulp-connect
gulp.task('copy-html',function(){
    gulp.src('app/index.html')//指定源文件
        .pipe(gulp.dest('dist'))//拷贝到dist目录
        .pipe($.connect.reload());//通知浏览器重启
});

代码检查 jshint
gulp.task('jsLint', function () {
    gulp.src('app/!*.js')
        .pipe(jshint()) //进行代码检查
        .pipe(jshint.reporter()); // 输出检查结果
});

gulpfile.js配置文件

移动端开发使用gulp自动化构建工具的详细步骤全解_第3张图片
image

可用于一般文件压缩

var gulp=require('gulp');
var $=require('gulp-load-plugins')();   

gulp.task('uglify',function(){
 return gulp.src(['app/js/*.js'])
 .pipe($.uglify())//压缩app.js
 //.pipe($.rename('app.min.js'))
 .pipe(gulp.dest('dist/js'))//复制到dist/js目录下
 })
//压缩css,编译less
gulp.task('minify',function(){
 return gulp.src(['app/css/*.less'])//指定 less文件
 .pipe($.less())//把less编译成css
 //.pipe(gulp.dest('dist/css'))//输出到目的地
 .pipe($.minifyCss())//对 css再进行压缩
 .pipe($.rename({suffix:'.min'}))//重命名 可以用函数自定义新名字
 .pipe(gulp.dest('dist/css'));//输出到目的地

 });
//单独编译css
gulp.task('minifycss',function(){
    return gulp.src(['app/css/*.css'])//指定 less文件
        .pipe($.minifyCss())//对 css再进行压缩
        .pipe($.rename({suffix:'.min'}))//重命名 可以用函数自定义新名字
        .pipe(gulp.dest('dist/css'));//输出到目的地

});
//压缩图片
gulp.task('copy-images',function(){
 return gulp.src('app/images/*.{jpg,png,JPG,PNG}')//指定要压缩的图片
 .pipe($.imagemin()) //进行图片压缩
 .pipe(gulp.dest('dist/images'));//输出目的地
 });
gulp.task('html-min', function () {
    var options = {
        removeComments: true,//清除HTML注释
        collapseWhitespace: true,//压缩HTML
        //collapseBooleanAttributes: true,//省略布尔属性的值  ==> 
        //removeEmptyAttributes: true,//删除所有空格作属性值  ==> 
        //removeScriptTypeAttributes: true,//删除
                    
                    

你可能感兴趣的:(移动端开发使用gulp自动化构建工具的详细步骤全解)