gulp之静态资源的版本控制

  最近,因为校友网项目开始有些规模了。开始就要考虑对静态资源进行工程自动化的管理。一讲到前端的自动化工具,大家或许都会想到Grunt,Gulp,或者百度的FIS。这三个都有各自的特点,大家可以依据自己的喜好,选择工具。至于为什么选择Gulp,因为Grunt的gruntfile配置真的很头大好吗!简直看到头晕晕,但是还是有不少人喜欢这种方式的。然后FIS真心很强大,你所需要的,基本它都提供了,并且做得很好很简单,如果你急于马上使用可以赶紧去看看。而我为什么不用呢,感觉可能是因为,有点黑盒子?哈哈哈....不说了,让我们赶紧看看今天的主角——Gulp。

  定义:gulp.js 是一种基于流的,代码优于配置的新一代构建工具。

  关于还要安装Node,怎么样用npm加载需要的Node模块,就不再赘述啦。当然使用yeoman来搭建手脚架是最快的,有兴趣的可以看看,慕课网里有噢。接下来看看我们的案例。我们的需求是,为了防止客户端的静态资源缓存,我们需要每次更新css或js的时候,通过md5或时间戳等方式重新命名静态资源。让客户端可以重新请求资源,而不是从缓存里取。然后html模板里的src也要做相应的修改。当然,这里还有个附加的需要就是,静态资源需要自行优化(压缩合并)。

  1. 静态资源优化
  2. 静态资源重命名
  3. 修改静态资源的引用路径

  若是我们手动修改,这会有多麻烦呢?大家可以想一想,我们先用工具压缩了资源,然后手动更改名字,再打开相应的页面,改路径。这样一直枯燥的重复,不仅容易出错,而且尼玛工作量很大好嘛?!程序员自有懒人在,我们就站在懒巨人的肩膀上,沐浴春风。

  那在gulpfile中,我们要用到的插件有哪些呢?

  

  require完之后,我们就可以开始编写一个简单实用的版本控制的自动化工具了。

  我们一步一步来,我们需要产出一个静态资源路径,我们首先要清空里面曾经的资源,防止有冗余。那我们就定义了一个clean任务,然后将src需要清理的文件夹引入,然后执行clean。src的第二个参数的{read:false},是不读取文件加快程序。

    

  清理完之后,就可以对静态资源进行优化处理。那我们定义两个任务,一个是css的,一个是js的。在css里,还可以编译less或sass,这里我就没有做。然后js里同样可以编译coffee。我们来仔细看看下面的程序,首先任务名是css,然后src引入css文件,执行csso的压缩优化,然后重命名为*.min.css。接下来就是到了添加版本号,并将经过优化和版本控制的css输出到dist文件夹里。最后再用rev.manifest,将对应的版本号用json表示出来,这里可以参照下面第二张图。这样通过hash来精确定位到html模板中需要更改的部分。

  

  

  接着便是最后一步,改变引用路径,这里我们将这个任务命名为rev

  

  src引入一个数组,前一个是引入刚才生成的json文件,后一个是需要更改的html模板,当然我这里是jsp。然后replaceReved: true就可以成功替换了。最后将替换过的文件输出即可,这里我输出到了原来引入的路径,这样就可以成功替换了。如果你在开发的时候需要不断调试,还可以加上gulp.watch,实时监控文件变化,然后动态做出响应。当然还是推荐开发与上线分开不同的文件夹进行管理。(可是我这坑爹的组长没有!妈蛋!)最后来看一下按照这样执行的大概结果。

  

  这是成功生成到dist的静态资源,都加上了相应的后缀。

  这是html模板上的引用路径做了对应的变化。

  是不是讲的十分不清楚呢?!哈哈哈,我跳过了一些的步骤 ,我只是想推荐大家gulp-rev配合gulp-rev-collector,这个自动化静态资源版本控制工具用gulp是可以做到的!所以要是大家不大会使用gulp的可以先自行寻找教程,最后再回来实现一遍。

时间: 2024-08-29 09:41:36

gulp之静态资源的版本控制的相关文章

gulp管理静态资源缓存

前端项目在版本迭代的时候,难免会遇到静态缓存的问题,明明开发的是ok的,但是一部署到服务器上,发现页面变得乱七八糟,这是由于静态缓存引起的. 从上面这张图片可以看出,浏览器加载css,js等资源时,size一栏是from cache,也就是直接使用了本地的资源,而没有向服务器请求.这样做的好处是提升页面渲染速度,坏处是当服务器的对应的文件发生变化时,浏览器却还是使用缓存,造成布局混乱的问题. 解决办法 一个比较原始的办法是在修改了文件之后,手动改变文件名称,然后再在html手动更新资源的path

gulp下静态资源的合并、压缩、MD5后缀

var gulp = require('gulp'); var RevAll = require('gulp-rev-all'); var uglify = require('gulp-uglify'); var filter = require('gulp-filter'); var csso = require('gulp-csso'); var useref = require('gulp-useref'); gulp.task('default', function () { var j

使用gulp自动化打包合并前端静态资源(CSS、JS文件压缩、添加版本号)

现在正在做的项目更新迭代比较频繁,会经常对前端代码打包部署,手动整合代码文件很麻烦并且浪费时间,所以决定使用gulp来代替手工完成这项工作. 前端静态资源在发版更新时会面临客户端浏览器缓存的问题(可参考这篇文章),解决这个问题可以采用两类方法:覆盖方法(引用资源时加版本号,不修改资源文件名).非覆盖方法(修改资源文件名),本篇文章主要采用的是第一种加版本号的方式,主要用gulp给静态资源自动加版本号和压缩CSS.JS. 原理:通过对JS,CSS文件内容进行Hash运算,生成一个文件的唯一Hash

Gulp:静态资源(css,js)版本控制

为了防止客户端的静态资源缓存,我们需要每次更新css或js的时候,通过md5或时间戳等方式重新命名静态资源: 然后涉及到的html模板里的src也要做相应的修改,静态资源需要优化(压缩) 文件目录结构 html模板文件 <html> <head> <link rel="stylesheet" href="../styles/one.css"> <link rel="stylesheet" href=&qu

gulp教程之静态资源压缩

1 创建项目 安装nodejs/全局安装gulp/本地安装gulp/创建package.json和gulpfile.js文件,项目目录如下: 2 压缩插件简介 gulp-useref 合并html里面的js/css gulp-concat用于合并文件,把也就是多个文件合并到一个文件中,以节省存储空间 gulp.spritesmith 图片合并成雪碧图 3 本地安装插件 安装gulp-useref npm install gulp-useref --save-dev 安装gulp-concat n

zmNgFrameWork 架构升级ng1.5和md5静态资源缓存方案【angular1.x】

前言: 在我前面的博客,angular项目总结——angular + browserify + gulp + bower + less 架构分享  把我开发angular的架构进行了分享,并上传到了github https://github.com/zimv/zmNgFrameWork . 而后我又在我的 gulp系列 里分享了 gulp-rev:项目部署缓存解决方案----gulp系列(六) ,也更新了github上gulpStart的rev分支 https://github.com/zimv

spring boot 静态资源。。

spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性. 建议大家使用Spring Boot的默认配置方式,如果需要特殊处理的再通过配置进行修改. 如果想要自己完全控制WebMVC,就需要在@Configuration注解的配置类上增加@EnableWebMvc(@SpringBootApplication 注解的程序入口类已经包含@Configuration),增加该注解以后WebMvcAutoConfiguration中配

ASP.NET Core缓存静态资源

原文:ASP.NET Core缓存静态资源 背景 缓存样式表,JavaScript或图像文件等静态资源可以提高您网站的性能.在客户端,总是从缓存中加载一个静态文件,这样可以减少对服务器的请求数量,从而减少获取页面及其资源的时间.在服务器端,由于它们的请求较少,服务器可以处理更多的客户端而无需升级硬件. 虽然缓存是一件好事,但您必须确保客户端始终运行最新版本的应用程序.当您部署下一个版本的网站时,您不希望客户端使用过时的缓存版本的文件. 方案: 为确保用户始终使用最新版本的文件,我们必须为每个文件

在网页中会引入哪些常见的静态资源?

1.JS(.js   .jsx  .coffee  .ts(TypeScript 类 c# 语言   c sharp  语言)) 2.CSS (.css   .less  .scss  .sass(基本不用了)) 3.Images(.jpg  .png  .gif  .bmp  .svg) 4.字体文件(Fonts)(.svg  .ttf  .eot  .woff  .woff2) 5.模板文件(.ejs  .jade  .vue[这是在webpack中定义组件的方式,推荐这么用]) 网页中引入