前言

新的一年啦,感觉总是静不下心,用了一天的时间吧,算是对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. matlab多图排列

    代码如下: clear; img = imread('C:\\Users\\admin\\Desktop\\original_img3\\testimg\\messi.jpg'); subplot(2 ...

  2. seq2seq&attention图解

  3. 浅谈Angularjs至Angular2后内置指令的变化

    一.科普概要说明 我们常说的 Angular 1 是指 AngularJS: 从Angular 2 开始已经改名了.不再带有JS,只是单纯的 Angular: Angular 1.x 是基于JavaS ...

  4. java 常用jar包方法

    1.Mapper3   常用接口 https://blog.csdn.net/fangwenzheng88/article/details/78713091 2.分页 pageHelper

  5. 使用chattr禁止文件被删除

    chattr 是个啥? chattr 修改文件在Linux第二扩展文件系统(E2fs)上的特有属性 使用方法 +i or -i 设置/取消文件不能进行修改:即你不能删除它, 也不能给它重新命名,你不能 ...

  6. # 关于设置AUTH_USER_MODEL出现的问题

    关于设置AUTH_USER_MODEL出现的问题 在运行的时候出现了一个bug: AttributeError: type object 'UserProfile' has no attribute ...

  7. mysql 相关文章

    <58到家MySQL军规升级版> <数据库索引,到底是什么做的?> <MyISAM与InnoDB的索引差异究竟是啥?> <InnoDB,为何并发如此之高?&g ...

  8. asp.net core在发布时排除配置文件

    使用命令发布 dotnet restore dotnet publish -c Release -r win-x64 -o "D:\services" 这样发布总是是将配置文件覆盖 ...

  9. ListVie的用法

    1.在布局中放入一个listView <ListView android:id="@+id/list_view" android:layout_width="mat ...

  10. EJS学习(二)之语法规则上

    标签含义 <% %> :'脚本' 标签,用于流程控制,无输出即直接使用JavaScript语言. <%= %>:转义输出数据到模板(输出是转义 HTML 标签)即在后端定义的变 ...