gulp的使用

构建工具:
自动化。对于需要反复重复的任务,例如压缩(minification)、编译、单元测试、linting等,自动化工具可以减轻你的劳动,简化你的工作。
注意: gulp或者grunt都仅仅是一个操作平台,他们本身做不了任何事情,要做事情需要通过插件

1.gulp的使用

全局安装:
npm install --global gulp
创建项目:
LearnGulp
项目依赖安装:
npm install --save-dev gulp
在项目根目录下创建一个名为 gulpfile.js 的文件:

   var gulp = require('gulp');
      gulp.task('default', function() {
      // 将你的默认的任务代码放在这
  });

运行: gulp

2.gulp的方法

gulp.task(str,fn)
创建一个gulp任务
gulp.src(path)
文件来源
gulp.dest(path)
操作之后的文件到哪里去
.pipe(package)
执行一个gulp功能
gulp.watch()
监听
gulp.start()
执行gulp任务

3.插件

1.压缩JavaScript文件
1.安装插件
npm install --save-dev gulp-uglify
代码
gulp.task(“jsuglify”,function(){
gulp.src(“src/js/demo.js”)
.pipe(jsUglify())
.pipe(gulp.dest(“dist/js”))
})
2.压缩CSS文件
1.安装
npm install --save-dev gulp-minify-css
3.压缩HTML文件
1.安装
npm install --save-dev gulp-minify-html
4.图片压缩
npm install --save-dev gulp-imagemin
5.代码检查

npm install --save-dev gulp-jshint jshint
公司learder自己编写代码规范,按照他的规范来写代码!!!
6.合并、重命名:把多个文件合并,再命名为min.js
npm install --save-dev gulp-concat gulp-rename
7.Less编译为CSS文件

npm install --save-dev gulp-less
8.监听:当less改变时,css文件也发生改变
gulp.task(“watchLess”,function(){
gulp.watch(“src/css/*.less”,function(){
gulp.run(“reless”)
})
})
9.热更新:在不用刷新浏览器的情况下,当代码更新时,页面自动更新
1.命令:npm install gulp-livereload --save-dev
2.全局服务器:npm install -g http-server
3.浏览器打开:chrome://extensions/ 浏览器插件:LiveReload (直接点击启动)
4.编写热更新的代码
5.启动热更新
1.在项目根目录下启动http-server
2.启动热更新:hot
3.打开浏览器启动项目
4.启动浏览器(livereload)插件,将空心圆点成实心圆

4.代码

//引入
var gulp = require('gulp');
var jsUglify = require("gulp-uglify");
var cssUglify = require("gulp-minify-css");
var htmlUglify = require("gulp-minify-html")
var imageUglify = require("gulp-imagemin");
var jshint = require("gulp-jshint");   //检查
var codeConcat = require("gulp-concat");  //合并
var fileRename = require("gulp-rename"); //重命名
var reLess = require("gulp-less");

// 压缩JavaScript任务,task表示任务
gulp.task("jsuglify",function(){
   gulp.src("src/js/demo.js")
  // gulp.src(["src/js/demo.js","src/js/hello.js"])   //需要压缩两个文件时,可以使用数组
  //gulp.src("src/js/*.js")  //该目录下所有文件都压缩
      .pipe(jsUglify())                           //执行压缩任务
      .pipe(gulp.dest("dist/js"))   //压缩到此处
})

/*
执行方式:
一、在命令行中输入gulp jsuglify
二、
gulp.task('defalut',function(){
   gulp,start("jsuglify")
})
然后在命令行中输入gulp
 */

// 压缩CSS任务
gulp.task("cssuglify",function(){
  gulp.src("src/css/init.css")
      .pipe(cssUglify())
      .pipe(gulp.dest("dist/css"))
})

// 压缩HTML任务
gulp.task("htmlUglify",function(){
  gulp.src("src/index.html")
      .pipe(htmlUglify())
      .pipe(gulp.dest("dist/"))
})

// 压缩image任务
gulp.task("imageUglify",function(){
  gulp.src("src/images/*.{png,jpg,gif,ico,jpeg,svg}")   //所有格式的图片都生效
      .pipe(imageUglify({
          optimizationLevel: 5, //类型:Number  默认:3       取值范围:0-7(优化等级)
          progressive: true,    //类型:Boolean 默认:false    无损压缩jpg图片
          interlaced: true,     //类型:Boolean 默认:false       隔行扫描gif进行渲染
          multipass: true       //类型:Boolean 默认:false      多次优化svg直到完全优化
      }))
      .pipe(gulp.dest("dist/images"))
})

// 代码检查
gulp.task("jshint",function(){
  gulp.src("src/js/demo.js")
      .pipe(jshint())
      .pipe(jshint.reporter()) // 代码检查
})

// 合并、重命名、压缩
gulp.task("reconcat",function(){
  gulp.src("src/js/*.js")
      .pipe(codeConcat("app.js"))  //合并
      .pipe(fileRename({
        suffix:".min"
      }))                 //命名
      .pipe(jsUglify())  //压缩
      .pipe(gulp.dest("dist/js")) //指定目录
})

// 编译less文件
gulp.task("reless",function(){
  gulp.src("src/css/*.less")
      .pipe(reLess())
      .pipe(gulp.dest("dist/css"))
})

// 监听less的改变:发生改变就重新编译
//也可以监听js、html、css的改变
gulp.task("watchLess",function(){
  gulp.watch("src/css/*.less",function(){
    gulp.run("reless")   //重新执行编译
  })
})
//每修改一次less文件,需要ctr+s保存以后执行重新编译

// 任务
gulp.task('default', function() {
  gulp.start(["jsuglify","cssuglify"])    //可以执行多个任务
});

5.如何写一个工程

步骤:
1.写一个src文件,文件中是源码
2.readme.md中写注释
3.package.json中,在npm init中package name需要命名
4.gulpfile.js中进行构建
5.在命令行中把需要的压缩文件的语句一次全部写入,全部下载
注:一般不压缩html文件
6.写一个dist文件,将所有文件打包到dist文件中最终上线
将所有文件的压缩写在同一个任务中,一次执行
7.打包时,将已经打包的文件和未打包的文件分开,apps文件夹和libs文件夹
打包结束后,将原本打包好的文件copy到dist文件夹中
8.打包后,可能出现背景图片和字体的丢失,注意修改文件路径!!!

代码:

var gulp = require('gulp'); 
var jsUglify = require("gulp-uglify");
var cssUglify = require("gulp-minify-css");
var imageUglify = require("gulp-imagemin");
var codeConcat = require("gulp-concat");
var fileRename = require("gulp-rename");
var livereload = require("gulp-livereload");

// css 
gulp.task("cssfinal",function(){   gulp.src("src/css/app/*.css")
      .pipe(codeConcat("app.css"))
      //css文件有已经打包好的,放在libs中,未打包的放在apps中准备打包
      .pipe(fileRename({
        suffix:".min"
      }))
      .pipe(cssUglify())
      .pipe(gulp.dest("dist/css")) })


// js 
gulp.task("jsfinal",function(){   gulp.src("src/js/app/*.js")
      .pipe(codeConcat("app.js"))
      //js文件有已经打包好的,放在libs中,未打包的放在apps中准备打包
      .pipe(fileRename({
        suffix:".min"
      }))
      .pipe(jsUglify())
      .pipe(gulp.dest("dist/js")) })

// 图片
 gulp.task("imageUglify",function(){   gulp.src("src/images/*.{png,jpg,gif,ico,jpeg,svg}")
      .pipe(imageUglify({
          optimizationLevel: 5, //类型:Number  默认:3  取值范围:0-7(优化等级)
          progressive: true,    //类型:Boolean 默认:false 无损压缩jpg图片
          interlaced: true,     //类型:Boolean 默认:false 隔行扫描gif进行渲染
          multipass: true       //类型:Boolean 默认:false 多次优化svg直到完全优化
      }))
      .pipe(gulp.dest("dist/images")) })

// 编写热更新代码
 gulp.task("hot",function(){   livereload.listen();   gulp.watch("src/index.html",function(event){
    livereload.changed(event.path);   }) })

//一键执行
 gulp.task('default', function() { 
  gulp.start(["cssfinal","jsfinal","imageUglify"])
   });
好的,以下是一个使用 `gulp-useref` 并过滤指定 js 文件的示例: ```javascript const gulp = require('gulp'); const useref = require('gulp-useref'); gulp.task('build', function() { return gulp.src('src/*.html') .pipe(useref({ searchPath: ['src', '.'] })) // 过滤掉不需要处理的 js 文件 .pipe(gulp.dest('dist')); }); ``` 在这个示例中,我们使用 `gulp-useref` 来处理 HTML 文件,并将注释块中引用的 JS、CSS 文件合并到一个或多个文件中。同时,我们通过 `searchPath` 属性指定了搜索路径,这样 `gulp-useref` 就能够正确地解析 HTML 文件中的相对路径了。 接着,我们通过 `pipe` 方法将处理后的文件输出到 `dist` 目录中。在这个过程中,我们也可以使用 `gulp-if` 来过滤掉不需要处理的文件。例如,如果我们只想处理所有 `src` 目录下的 JS 文件,可以这样写: ```javascript const gulp = require('gulp'); const useref = require('gulp-useref'); const gulpIf = require('gulp-if'); gulp.task('build', function() { return gulp.src('src/*.html') .pipe(useref({ searchPath: ['src', '.'] })) // 只处理 src 目录下的 js 文件 .pipe(gulpIf('**/*.js', gulp.dest('dist'))) .pipe(gulp.dest('dist')); }); ``` 在这个示例中,我们使用 `gulp-if` 来过滤掉不需要处理的 JS 文件,而只处理 `src` 目录下的 JS 文件。这样,我们就能够只处理我们需要的文件了。 希望这个回答能够帮到你,如果你还有其他问题,可以继续问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值