gulp 自动化构建网站(版本号静态资源)
前言
新的一年啦,感觉总是静不下心,用了一天的时间吧,算是对gulp 这个前端打包工具入门了,自己也写了demo,表示对这个稍微理解了吧,
当然还是有差距的啦,下面讲讲怎么用吧:
如何用
当然先去官网去看下如何使用的,这个是入门指南 https://www.gulpjs.com.cn/docs/getting-started/
1. 全局安装
$ npm install --global gulp
2你的項目裏 執行
npm init
全部回車 ,需要的地方在改下就好啦,這個沒有那么多要求,随意一点
3. 项目安装 gulp
npm install --save-dev gulp
会自动产生 node_modules 这个目录 里面都是配置
4. 在项目根目录下创建一个名为 gulpfile.js 的文件:
var gulp = require('gulp');
gulp.task('default', function() {
// 将你的默认的任务代码放在这
});
然后这个是我的目录

这个 dist 就是你的gulp 打包的文件
gulpfile.js 这个文件就是写 一些脚本代码
这个是我用到一些 gulp 的插件库,能帮你很多呢,上面也有注释

然后就是 怎么压缩图片 压缩css, 压缩js 和合并,静态资源版本号(这个需要详情写点),
上代码吧,上面都有注释,不懂的可以先看 gulp中文官网 会好理解点吧
gulp.task('default', function (done) {
browserSync.init({
server: {
baseDir: ["./dist"] // 服务器启动要打开的文件位置
}
});
//gulp.watch("src/scss/**/*.scss",['sass']);
gulp.watch("src/js/**/*.js", function (event) {
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});
gulp.watch("src/**/*.html", function (event) {
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});
gulp.watch("src/images/**/*.", function (event) {
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});
gulp.watch("dist/**/*.html").on("change", browserSync.reload);
// condition = false;
// runSequence( //需要说明的是,用gulp.run也可以实现以上所有任务的执行,,故使用了runSequence.
// //['assetRev'],
// ['css'],
// ['js'],
// ['html'],
// done);
});
// 压缩css 文件hash编码并生成 rev-manifest.json文件名对照映射
gulp.task('css', function () {
gulp.src('src/css/*.css')
//.pipe(cssver()) //给css文件里引用文件加版本号(文件MD5)
.pipe(cssmin({
advanced: false, //类型:Boolean 默认:true [是否开启高级优化(合并选择器等)]
compatibility: 'ie7', //保留ie7及以下兼容写法 类型:String 默认:''or'*' [启用兼容模式; 'ie7':IE7兼容模式,'ie8':IE8兼容模式,'*':IE9+兼容模式]
keepBreaks: true, //类型:Boolean 默认:false [是否保留换行]
keepSpecialComments: '*'
//保留所有特殊前缀 当你用autoprefixer生成的浏览器前缀,如果不加这个参数,有可能将会删除你的部分前缀
}))
// .pipe(rename(function(path){ //执行csso的压缩优化,然后重命名为*.min.css
// path.basename +=".min";
// path.extname = ".css"
// }))
.pipe(assetRev()) //该任务调用的模块 css中引入的图片/字体等添加hash编码
.pipe(rev())
.pipe(gulp.dest('dist/css')) //控制的css输出到dist文件夹里
.pipe(rev.manifest()) //对应的版本号用json表示出来,
.pipe(gulp.dest('dist/rev/css'));
});
// 压缩js 文件
gulp.task('js', function () {
return gulp.src('src/js/**/*.js')
.pipe(plumber())
.pipe(minify())
.pipe(rev())
.pipe(gulp.dest('dist/js'))
.pipe(rev.manifest())
.pipe(gulp.dest("dist/rev/js"))
.pipe(browserSync.stream());
});
//处理 html 文件
gulp.task('html', function () {
return gulp.src(['dist/rev/**/*.json', "src/*.html"]) //编辑路径下的html 文件
.pipe(plumber())
.pipe(revCollector({
replaceReved: true
}))
.pipe(gulp.dest("dist/")) //编辑好的文件
.pipe(browserSync.stream());
});
// 在命令行输入 gulp images 启动此任务
gulp.task('images', function () {
// 1. 找到图片
gulp.src('src/images/*.*')
.pipe(imagemin({progressive: true })) // 2. 压缩图片
.pipe(rev())
.pipe(gulp.dest('dist/images')) // 3. 另存图片
.pipe(rev.manifest('rev-img-manifest.json'))//生成一个rev-manifest.json
.pipe(gulp.dest('dist/rev/images'));//将 rev-manifest.json 保存到 rev 目录内
});
// css 文件内的css 替换
gulp.task('revimg', function() {
//css,主要是针对img替换
gulp.src(['dist/rev/images/**/rev-img-manifest.json', +'dist/css/*.css'])
.pipe(revCollector({replaceReved:true }))
.pipe(gulp.dest('dist/css'));
});
// Clean 任务执行前,先清除之前生成的文件
gulp.task('clean', function (cb) {
del(['dist/css', 'dist/js', 'dist/images','dist/rev','dist/*.html'], cb)
});
// 打包发布publish
gulp.task('publish', function () {
return gulp.src('dist/**/*')
.pipe(plumber())
.pipe(zip('publish.zip'))
.pipe(gulp.dest('release'))
});
主要讲 gulp静态资源版本
用到这几个吧

npm install gulp-rename --save-dev (文件重命名)
npm install gulp-asset-rev --save-dev (版本号 处理css图片路径哈希值的)
npm install gulp-rev-collector --save-dev (gulp-rev的插件,HTML模板更改引用路径)
npm install --save-dev run-sequence
npm install gulp-rev --save-dev (更改版本名)
代码也都在上面了,当然后还要改成想要的形式就是 楼主这样的
<link rel="stylesheet" type="text/css" href="../../styles/common.css?v=a8aacfb">
<script type="text/javascript" src="../../scripts/app_common.js?v=51921f3"></script>
background:url(../images/none.png?v=8f204d4)
需要改动几处地方:
1.node_modules --> gulp-rev -->index.js
//manifest[originalFile] = revisionedFile;
manifest[originalFile] = originalFile + '?v=' + file.revHash;
2.node_modules --> gulp-rev-collector -->index.js 我是4.0的版本所以会有些不同但大小异同
changes.push({
//regexp: new RegExp( prefixDelim + pattern, 'g' ),
regexp: new RegExp( prefixDelim + pattern+'(\\?v=\\w{10})?', 'g' ),
patternLength: pattern.length,
replacement: '$1' + manifest[key]
});
3.node_modules --> gulp-asset-rev -->index.js
//var verStr = (options.verConnecter || "-") + md5; //src = src.replace(verStr, '').replace(/(\.[^\.]+)$/, verStr + "$1"); var verStr = (options.verConnecter || "") + md5; src = src+"?v="+verStr;
4.node_modules --> rev-path -->index.js
//return modifyFilename(pth, (filename, ext) => `${filename}-${hash}${ext}`);
return modifyFilename(pth, (filename, ext) => `${filename}${ext}`);
然后就好啦, 主要把绿色的改成 下面的 黑色的就OK啦,
最后执行 顺序呢:
gulp clean
gulp css
gulp js
gulp images
gulp revimg
gulp html
这样你的dist 就有你想要的文件啦 和静态版本号啦,是不是很方便啦
希望有帮助吧 ,哈哈 我们一起进阶 ,2019
gulp 自动化构建网站(版本号静态资源)的更多相关文章
- gulp 自动化构建html项目--自动刷新
使用gulp自动化构建项目是前端学习的重要部分,gulp依赖于node.js.首选电脑要配置node和npm. 查看node版本号 node --version 查看npm 版本 npm --vers ...
- gulp自动化构建工具的使用
gulp自动化构建工具: 把前端开发常见的处理(“搬砖”)程序,通过一个工具模块管理起来,只需配置一次,达到自动处理目的,简化开发,提高效率!! 安装: 1.全局安装(全局安装一个gulp命令) A. ...
- gulp自动化构建教程
gulp及gulpfile.js编写示例 本文主要记录一个gulpfile.js示例,以免以后用的时候遗忘.但首先还是要了解gulp是什么以及如何使用. 一.什么是gulp 简单来说:就是压缩前 ...
- 前端gulp自动化构建配置
为了节省http请求次数.节约带宽,加速页面渲染速度,达到更好用户体验的目的.现在普遍的做法是在上线之前做静态资源的打包构建,也就是静态资源的合并压缩: 这里使用的是gulp,当然现在有更强大的模块化 ...
- gulp自动化构建工具
gulp 自动化构建工具,实时监控.代码合并.压缩... http://www.gulpjs.com.cn/ 中文网 http://gulpjs.com/plugins/ 英文网 ...
- Gulp自动化构建的基本使用
Study Notes 本博主会持续更新各种前端的技术,如果各位道友喜欢,可以关注.收藏.点赞下本博主的文章. Gulp 用自动化构建工具增强你的工作流程! gulp 将开发流程中让人痛苦或耗时的任务 ...
- gulp自动化构建
最近正在使用gulp去帮我自动化构建一些技术块,感觉很爽,所以把gulp操作步骤给写笔记,记录下来... 首先了解什么是gulp? 我的理解是一个工具并且自动化的,能帮你把一些前端技术的语法转换成当前 ...
- [分享黑科技]纯js突破localstorage存储上线,远程抓取图片,并转码base64保存本地,最终实现整个网站所有静态资源离线到用户手机效果却不依赖浏览器的缓存机制,单页应用最新黑科技
好久没有写博客了,想到2年前答应要放出源代码的也没放出来,最近终于有空先把纯js实现无限空间大小的本地存储的功能开源了,项目地址https://github.com/xueduany/localsto ...
- Gulp(自动化构建工具 )
前言 Gulp,简而言之,就是前端自动化开发工具,利用它,我们可以提高开发效率. 比如: 1. 压缩js 2. 压缩css 3. 压缩less 4. 压缩图片 等等… 我们完全可以利用Gulp ...
随机推荐
- PHP-T
TP5目录结构 ├─application 应用目录 ├─extend 扩展类库目录(可定义) ├─public 网站对外访问目录 ├─runtime 运行时目录(可定义) ├─vendor 第三方类 ...
- PJzhang:QQ输入法用户许可协议和隐私政策阅读
猫宁!!! 参考链接:http://qq.pinyin.cn/ 中国用户量最大的输入法是搜狗输入法,百度输入法也有上亿的用户量. 我下载了7个输入法,查看他们的用户许可协议和隐私政策情况.这里说的都是 ...
- Django2.2 会话技术cookie session token的区别以及实例介绍
一.区别: 本人见解:使用自定义数据项进行加密,作为唯一身份识别,登陆时写入cookie(session基于这个).在显示相关数据 1.cookie 属于客户端会话技术(数据存储在客户端) 默认的Co ...
- 10分钟学会web通讯的四种方式,短轮询、长轮询(comet)、长连接(SSE)、WebSocket
一般看到标题我们一般会产生下面几个问题??? 什么是短轮询? 什么是长轮询? 长连接又是什么? wensocket怎么实现呢? 他们都能实现web通讯,区别在哪呢,哪个好用呢? 接下来我们就一个个来了 ...
- [python] 进度条效果
method 1 如果出现多行显示,添加选项 tqdm(iter,ncols=40) """ ncols : int, optional The width of the ...
- PTA(Basic Level)1053.住房空置率
在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断.判断方法如下: 在观察期内,若存在超过一半的日子用电量低于某给定的阈值 e,则该住房为"可能空置&quo ...
- [转发]centos7搭建自己的yum源
centos7搭建自己的yum源 https://www.cnblogs.com/juandx/p/6136621.html 还是需要学习呢 自己之前记得 查过 但是忘记了. http://w ...
- # 解决MongoDB突然无法连接的问题
解决MongoDB突然无法连接的问题 使用命令,加上路径sudo mongod --dbpath=/var/lib/mongodb 这种情况一般是上一次使用的时候没有正常关闭数据库,正常启动:mong ...
- 可能是把 Java 内存区域讲的最清楚的一篇文章
出处: 可能是把 Java 内存区域讲的最清楚的一篇文章 Java 内存区域详解 写在前面 (常见面试题) 基本问题 拓展问题 一 概述 二 运行时数据区域 2.1 程序计数器 2.2 Java 虚 ...
- 分布式唯一ID生成器Twitter
分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种简单一 ...