以前在做代码优化的时候,一般都用一些网上的在线工具来完成,写LESS的时候,一般用Koala来编译,感觉用起来也挺不错的。但是现在构建工具的出现,让以前做的那些繁琐操作变的更方便一些了,我在这里也用构建工具来完成一下我以前一些前端的工作。这里我选用了Gulp来使用。


实例概要

  • 代码压缩
  • CSS自动加前缀
  • LESS编译
  • 地址版本追加
  • 文件合并
  • 文件修改自动刷新页面

Gulp一些入门知识

这里还是说一下Gulp的一些入门的必备知识,方便看后文的理解。

Gulp是一款自动构建工具,需要在Node.js的环境下运行,常用的API方法并不多,很快就能熟记,用到的大部分功能都是依靠插件来完成的。

Gulp的插件需要用npm来进行安装:

npm install <name> [-g] [--save-dev]
  • -g全局安装,通常只在项目下安装即可,所以不用加这个参数
  • --save-dev用于将依赖包保存到项目下的package.json文件中,-dev用来区分开发模式和生产模式下用到的模块。指定则保存到package.jsondevDependencies节点,不指定-dev将保存至dependencies节点。

使用Gulp需要先在项目下安装Gulp模块。

初始化项目环境

npm init

进入项目,安装gulp

npm install gulp --save-dev

创建gulp配置文件gulpfile.js

Gulp 官网


实例一:编译LESS

用到插件:gulp-less

安装命令:install gulp-less --save-dev

Github: https: //github.com/plus3network/gulp-less

gulpfile.js代码:

//引入必要文件
var gulp = require('gulp'),less = require('gulp-less');//创建任务
gulp.task('testLess', function(){gulp.src('src/less/*.less') //所有src/less下的less文件.pipe(less()) //执行less编译.pipe(gulp.dest('src/css')) //将编译后的文件写到目的目录下
});

现在在src/less下创建less文件,并编码,然后在CLI下执行:

gulp testLess

即可在src/css下看到已经编译完成的css文件。


实例二:在LESS中加入自动前缀

方法一:gulp-autoprefixer

安装命令:install gulp-autoprefixer --save-dev

Github: https: //github.com/sindresorhus/gulp-autoprefixer

gulpfile.js代码:

var gulp = require('gulp'),less = require('gulp-less'),autoprefixer = require('gulp-autoprefixer');gulp.task('testLess', function(){gulp.src('src/less/*.less').pipe(less()).pipe(autoprefixer({browsers: ['last 2 versions', 'Android >= 4.0']})) //自动加入前缀.pipe(gulp.dest('src/css'))
});

在CLI下执行:

gulp testLess

编译的文件中已经自动加入了前缀,这对编写CSS能够提高很大的效率。

方法二:less-plugin-autoprefix

这里用的是less的插件。

安装命令:install less-plugin-autoprefix --save-dev

Github: https: //github.com/less/less-plugin-autoprefix

gulpfile.js代码:

var gulp = require('gulp'),less = require('gulp-less'),LessAutoprefix = require('less-plugin-autoprefix');gulp.task('testLess', function(){gulp.src('src/less/*.less').pipe(less({plugins: [new LessAutoprefix({ browsers: ['last 2 versions'] })]})).pipe(gulp.dest('src/css'))
});

自动前缀需要自行设置一些编译参数,详细了解可以看官方GitHub,两种方法的配置基本一样。

这个插件可单独应用到为css加前缀。


实例三:在LESS中加入代码压缩

安装命令:install gulp-minify-css --save-dev

Github: https: //github.com/less/less-plugin-autoprefix

这个插件实际上是用的clean-csshttps: //github.com/jakubpawlowicz/clean-css。

gulpfile.js代码:

var gulp = require('gulp'),less = require('gulp-less'),autoprefixer = require('gulp-autoprefixer'),minifycss = require('gulp-minify-css');gulp.task('testLess', [], function(){gulp.src('src/less/*.less').pipe(less()).pipe(autoprefixer({browsers: ['last 2 versions', 'Android >= 4.0']})).pipe(gulp.dest('src/css')).pipe(minifycss()); //压缩
});

实例四:为链接文件追加版本号

安装命令:install gulp-rev-append --save-dev

Github: https: //github.com/bustardcelly/gulp-rev-append

为在网页中链接的资源文件路径追加版本号,可以用于防止缓存文件。

版本号是依据文件内容进行MD5后的结果,所以只为文件内容变动,版本号就变动。

工作方式:(?:href|src)="(.*)[\?]rev=(.*)[\"]

var gulp = require('gulp'), rev = require('gulp-rev-append');gulp.task('testRev', function(){gulp.src('src/index.html').pipe(rev()).pipe(gulp.dest('src/rev'));
});

要执行这个功能,需要在链接资源地址后加入?rev=@@hash

<!-- inde.html-->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><link rel="stylesheet" type="text/css" href="css/index.css?rev=@@hash"></script>
</head>
<body><img src="a.jpg?rev=@@hash">
</body>
</html>
<!-- 编译后的文件 -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><link rel="stylesheet" type="text/css" href="css/index.css?rev=2e151da214ef1a3563abdc2cb8c23d7f">
</head>
<body><img src="a.jpg?rev=d41d8cd98f00b204e9800998ecf8427e">
</body>
</html>

需要注意的是,如果链接的资源并不存在,那么是无法追加版本号的。


实例五:文件合并

安装命令:install gulp-concat --save-dev

Github: https: //github.com/wearefractal/gulp-concat

为了生产模式下,为了减少网络请求,通常将同类文件进行合并,例如合并JS、CSS。

合并JS:

var gulp = require('gulp'),concat = require('gulp-concat');gulp.task('concatJs', function(){//gulp.src('src/js/*.js')//这种方式合并文件的先后顺序不能控制gulp.src(['src/js/js1.js','src/js/js2.js']) //按顺序将文件写入数组,做为参数.pipe(concat('all.js')) //合并后生成的文件.pipe(gulp.dest('src/css'))
});

合并CSS:

var gulp = require('gulp'),concat = require('gulp-concat');gulp.task('concatCss', function(){//gulp.src('src/css/*.css')gulp.src(['src/css/css1.css','src/css/css2.css']).pipe(concat('all.css')) .pipe(gulp.dest('src/css'))
});

实例六:文件改变 自动刷新浏览器

安装命令:install gulp-connect --save-dev

Github: https: //github.com/AveVlad/gulp-connect/

当我们在做页面编码时,为了实时查看代码效果,需要不断的刷新浏览器,十分繁琐。那有没有什么工具可以监控文件,只要文件发生变化就及时自动刷新浏览器的? 当然有了,这下我们就可以释放F5了。


var gulp = require('gulp'),connect = require('gulp-connect');//创建服务任务
gulp.task('connect', function(){connect.server({//这里有配置端口和主机的选项,我这里就按默认的来了livereload: true //即时刷新});
});gulp.task('css', function(){gulp.src('src/css/*.css').pipe(connect.reload()); //重新加载
});//css文件监测
gulp.task('fileWatch', function(){gulp.watch('src/**/*.css', ['css']);
});//默认任务启动
gulp.task('default', [ 'connect','fileWatch']); //先打开连接,再监测文件

这里直接运行gulp即可,因为没有配置端口,所以根据CLI中的提示,在浏览器中打开地址即可。此命令不直接打开浏览器。

当在修改CSS文件并保存后,浏览器就会自动刷新了。

LiveReload是一个WebSockets协议:


结语

好了,在Gulp中常用的前端操作基本都写了,大家可以根据自己的需求去定制。想进行更详细的配置,可以参考每个插件中的GitHub地址。


博客名称:王乐平 技术博客

CSDN博客地址:http://blog.csdn.net/lecepin

Gulp在前端的常用操作实例相关推荐

  1. C#中使用Path、Directory、Split、Substring实现对文件路径和文件名的常用操作实例

    场景 现在有一个文件路径 E:\\BTSData\\2019-11\\admin_20180918_1_1_2 需要获取最后的文件名admin_20180918_1_1_2 需要获取文件的上层目录20 ...

  2. java 数组操作_9个java数组常用操作实例

    数组的特点: 数组是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和不同的下标来唯一确定数组中的元素.根据数组的维度,可以将其分为一维数组.二 ...

  3. 前端JavaScript——js声明定义数组及常用操作

    数组的声明: 1.在js中,数组的声明不需要指定其长度 2.在js中,数组可以存放不同类型的数据(一般要求数据中采访同类型的数据) js定义数组: 空数组 一般常用这种形式,数组元素的定义使用[] v ...

  4. Gulp构建前端自动化工作流

    ## Gulp构建前端自动化工作流 ### Gulp构建前端自动化工作流之:常用插件介绍及使用 在对Gulp有了一个初步的了解之后,我们开始构建一个较为完整的Gulp开发环境. 本文主要分为6个段落: ...

  5. vscode下载和前端工程师常用的20+插件,包含代码提示、语法高亮、括号颜色等等

    这里附带vscode下载地址,和前端开发常用的20+插件,可根据插件功能自行选择下载. VsCode下载安装 Visual Studio Code下载地址:https://code.visualstu ...

  6. python课堂实例_享学课堂带你了解并读懂Python列表中的6种操作实例

    原标题:享学课堂带你了解并读懂Python列表中的6种操作实例 今天为大家来介绍一下很多人在享学课堂上学习Python时,经常会用到列表,列表(list)就是动态数组,相当于C++标准库的Vector ...

  7. CDN公共库、前端开发常用插件一览表(VendorPluginLib)

    ============================================================= ==========================前端CDN公共库==== ...

  8. pod概念及常用操作

    pod概念及常用操作 pod概念:什么是pod init容器(初始化容器) pause容器(Infra容器) 修改默认infro容器 普通pod: pod资源限制: pod生命周期介绍 Pending ...

  9. 前端开发常用技巧(update...)

    前端开发常用技巧 JS 1.JavaScript删除子节点的方法 2.JS 动态生成div并添加点击事件 CSS 1.文本溢出处理 2.使用伪类 添加下划线 3.使用伪类 添加下划线 下划线居中 4. ...

最新文章

  1. word2vec相似度计算_图解word2vec(原文翻译)
  2. DAVINCI开发原理之三----达芬奇编解码引擎Codec Engine(CE)
  3. Java中getResource()的用法
  4. c#如何实现在datagridview中加入时间控件、numericupanddown控件
  5. ubuntu下docker简单安装mysql
  6. python复数类型转换_Python 复数数据类型详解(complex)[学习 Python 必备基础知识][看此一篇就够了]...
  7. 20145209 《信息安全系统设计基础》课程总结
  8. python有什么优秀功能_Python都有什么强大的功能
  9. centOs7 虚拟机设置文件共享
  10. C++语言定义的标准转换
  11. Java基本开发环境搭建(适合第一次使用)
  12. 艾伟_转载:编写自文档化的代码
  13. hive字段名、注释中文显示问号
  14. 计算机游戏制作的要求,游戏设计美工需要什么样的电脑配置
  15. 安卓APK反编译详解(多图)
  16. 支付宝当面付扫码支付支付后不回调_免费开通支付宝商家收款码 支持信用卡 花呗收款...
  17. Java课程设计之你画我猜
  18. 机械硬盘显示数据错误循环冗余检查文件如何寻回
  19. vue3+ts+vite后台管理模板
  20. Mysql——》索引存储模型推演

热门文章

  1. 转: RSA原理 阮一峰的博客
  2. Asp.Net MVC开源CMS - Orchard
  3. Direct3D提高篇:HLSL编程实现PhotoShop滤镜效果 - 伪 HDR/Blow
  4. 刚认识女孩说不要浪费时间_不要浪费时间寻找学习数据科学的最佳方法
  5. 敏捷 冲刺_在这个敏捷的假期季节给予技术债务冲刺的礼物
  6. Reindex SQL Server DB table
  7. 笑看职场什么程序员才抢手,什么样的程序员涨薪多?
  8. CF908G New Year and Original Order 数位DP
  9. 判断请求来自手机还是PC
  10. MYSQL学习笔记 (二)对数据库结构的增删改查