前言

新的一年啦,感觉总是静不下心,用了一天的时间吧,算是对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 自动化构建网站(版本号静态资源)的更多相关文章

  1. gulp 自动化构建html项目--自动刷新

    使用gulp自动化构建项目是前端学习的重要部分,gulp依赖于node.js.首选电脑要配置node和npm. 查看node版本号 node --version 查看npm 版本 npm --vers ...

  2. gulp自动化构建工具的使用

    gulp自动化构建工具: 把前端开发常见的处理(“搬砖”)程序,通过一个工具模块管理起来,只需配置一次,达到自动处理目的,简化开发,提高效率!! 安装: 1.全局安装(全局安装一个gulp命令) A. ...

  3. gulp自动化构建教程

    gulp及gulpfile.js编写示例    本文主要记录一个gulpfile.js示例,以免以后用的时候遗忘.但首先还是要了解gulp是什么以及如何使用. 一.什么是gulp 简单来说:就是压缩前 ...

  4. 前端gulp自动化构建配置

    为了节省http请求次数.节约带宽,加速页面渲染速度,达到更好用户体验的目的.现在普遍的做法是在上线之前做静态资源的打包构建,也就是静态资源的合并压缩: 这里使用的是gulp,当然现在有更强大的模块化 ...

  5. gulp自动化构建工具

    gulp    自动化构建工具,实时监控.代码合并.压缩... http://www.gulpjs.com.cn/     中文网 http://gulpjs.com/plugins/     英文网 ...

  6. Gulp自动化构建的基本使用

    Study Notes 本博主会持续更新各种前端的技术,如果各位道友喜欢,可以关注.收藏.点赞下本博主的文章. Gulp 用自动化构建工具增强你的工作流程! gulp 将开发流程中让人痛苦或耗时的任务 ...

  7. gulp自动化构建

    最近正在使用gulp去帮我自动化构建一些技术块,感觉很爽,所以把gulp操作步骤给写笔记,记录下来... 首先了解什么是gulp? 我的理解是一个工具并且自动化的,能帮你把一些前端技术的语法转换成当前 ...

  8. [分享黑科技]纯js突破localstorage存储上线,远程抓取图片,并转码base64保存本地,最终实现整个网站所有静态资源离线到用户手机效果却不依赖浏览器的缓存机制,单页应用最新黑科技

    好久没有写博客了,想到2年前答应要放出源代码的也没放出来,最近终于有空先把纯js实现无限空间大小的本地存储的功能开源了,项目地址https://github.com/xueduany/localsto ...

  9. Gulp(自动化构建工具 )

    前言 Gulp,简而言之,就是前端自动化开发工具,利用它,我们可以提高开发效率. 比如: 1.  压缩js 2.  压缩css 3.  压缩less 4.  压缩图片 等等… 我们完全可以利用Gulp ...

随机推荐

  1. uni-app编译配置

    Uni-app 编译配置 <!-- #ifdef H5 --> <view>只在H5编译</view> <!-- #endif --> <!-- ...

  2. Django-ORM之ManyToManyField的使用-多对多关系

    表结构设计 多对多关系表创建外键,典型例子:书--作者--出版社,书与作者的关系就可以看作是多对多关系. # 表结构设计 class Book(models.Model): title = model ...

  3. python高级 之(一) --- 函数类型

    函数 模块 模块: 一个py文件就是一个模块, 每个模块之间是可以相互访问的 访问之前需要进行导入 分类: 1.系统提供的模块 math random 2.自己自定义的,自己封装的常用功能的的py文件 ...

  4. Vi或者Vim下按了ctrl+s后终端卡住了咋办?

    在Vi或者Vim下按了ctrl+s后终端卡住了咋办? 习惯了在windows下写程序,也习惯了按ctrl+s 保存代码. 在用vim的时候,也习惯性的按ctrl+s结果就是如同终端死掉了一样. 原因: ...

  5. 【VS开发】设备控制台 (DevCon.exe) 命令

    设备控制台 (DevCon.exe) 命令 DevCon (DevCon.exe) 是一个命令行工具,可以显示有关运行 Windows 的计算机上设备的详细信息.还可以使用 DevCon 启用.禁用. ...

  6. (转)批量 kill mysql 中运行时间长的sql

    mysql> show full processlist; +--------+------+---------------------+------+---------+------+---- ...

  7. 学习shell的第二天

    重定向和管道符: 1.重定向 程序 = 指令 + 数据            命令    变量  在程序中,数据如何输入?又如何输出?  数据输入:键盘  --  标准输入,但是并不是唯一输入方式:  ...

  8. SQL的DDL和DML

    DDL:数据定义语言,定义库.表结构用的DML:数据操作语言,增.删.改.查DCL:数据控制语言,权限.事务等控制语句 (一)DDL1.操作数据库的语句(1)查看当前DBMS中的所有数据库show d ...

  9. Kafka的知识总结

    前言 转自(https://www.cnblogs.com/zhuifeng523/p/12081204.html) Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partit ...

  10. Mybatis(三) 动态SQL

    if + where 用法 1. if 元素来实现多条件查询 1.1 UserMapper.xml配置文件 <!--查询用户列表 (if)--> <select id="g ...