您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
gulp插件解决浏览器缓存问题
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
gulp插件解决浏览器缓存问题
京东ZERO团队
2021-01-08
IP归属:未知
26960浏览
Js
## 一、前言 有些简单前端小项目,不需要涉及框架,前端打包压缩的话本妹子还是喜欢用`gulp`。 本文将用`gulp-rev`和`gulp-rev-rewrite`解决cdn缓存问题。 以及列出的是本妹子最常用的`gulp`插件,小伙伴们可以参考。 案例地址:https://github.com/raoenhui/gulpExample.git ## 二、解决浏览器缓存问题 #### gulp-rev 1.为静态文件添加唯一`hash`值,如 unicorn.css → unicorn-d41d8cd98f.css。 2.生成`map`映射文件,方便后面`html`更换文件名 ```javascript gulp.task('js', () => gulp.src(['./src/app.js', './src/app2.js']) .pipe(gulp.dest('dist')) // 将源文件拷贝到打包目录 .pipe(rev()) .pipe(gulp.dest('dist')) // 将生成的hash文件添加到打包目录 .pipe(rev.manifest('js-rev.json')) .pipe(gulp.dest('dist')) // 将map映射文件添加到打包目录 ); gulp.task('css',()=> { gulp.src('./src/*.css') .pipe(gulp.dest('dist')) // 将生成的hash文件添加到打包目录 .pipe(rev()) .pipe(gulp.dest('dist'))// write rev'd assets to build dir .pipe(rev.manifest('css-rev.json')) .pipe(gulp.dest('dist')) // 将map映射文件添加到打包目录 }); ``` #### gulp-rev-rewrite 根据`rev`生成的manifest.json `map`映射文件, 去替换`html`文件中的引用名称, ```javascript gulp.task('html', () => { const jsManifest = gulp.src('dist/js-rev.json'); //获取js映射文件 const cssManifest = gulp.src('dist/css-rev.json'); //获取css映射文件 return gulp.src('./*.html') .pipe(revRewrite({manifest: jsManifest})) // 把引用的js替换成有版本号的名字 .pipe(revRewrite({manifest: cssManifest})) // 把引用的css替换成有版本号的名字 .pipe(gulp.dest('dist')) }); ``` 替换成功 ![image.png](https://raoenhui.github.io/images/190303/1.jpg) ## 三、gulp其他常用插件 ### JS相关 #### gulp-babel `babel`是一个 JavaScript 编译器。我们主要是用将`ES6`转换成可以在浏览器中运行的代码。而`gulp-babel `的用法、功能和`babel `是一样的。 先运行 npm install --save-dev gulp-babel @babel/core @babel/preset-env @babel/plugin-transform-runtime,装好`babel`。 ```javascript const babel = require('gulp-babel'); gulp.task('js', () => gulp.src('src/app.js') .pipe(babel({ presets: ['@babel/env'], plugins: ['@babel/transform-runtime'] })) .pipe(gulp.dest('dist')) ); ``` #### gulp-sourcemaps 找到编译源文件,方便调试源码。 ```javascript const sourcemaps = require('gulp-sourcemaps'); gulp.task('js', () => gulp.src('src/app.js') .pipe(sourcemaps.init()) .pipe(babel({ presets: ['@babel/env'], plugins: ['@babel/transform-runtime'] })) .pipe(sourcemaps.write('.')) .pipe(gulp.dest('dist')) ); ``` ![image.png](https://raoenhui.github.io/images/190303/2.jpg) #### gulp-concat 合并`js`文件 ```javascript const concat = require('gulp-concat'); gulp.task('js', function() { return gulp.src(['./src/app.js', './src/app2.js']) .pipe(concat('app.js')) .pipe(gulp.dest('dist')); }); ``` ### CSS相关 #### gulp-postcss `CSS`预处理器。 ```javascript const postcss = require('gulp-postcss'); const autoprefixer = require('autoprefixer'); //添加css兼容性写法 gulp.task('css', function () { return gulp.src('./src/*.css') .pipe(postcss([ autoprefixer({ browsers: [ '>1%', 'last 4 versions', 'Firefox ESR', 'not ie < 9', 'iOS >= 8', 'Android > 4.4' ], flexbox: 'no-2009', }) ])) .pipe(gulp.dest('./dest')); }); ``` #### gulp-clean-css 压缩`CSS` ```javascript const cleanCSS = require('gulp-clean-css'); gulp.task('css', () => { return gulp.src('styles/*.css') .pipe(cleanCSS({compatibility: 'ie8'})) .pipe(gulp.dest('dist')); }); ``` ### HTML相关 #### gulp-inline-source 将引用的`js`、`css`文件,插入`html`中,变成内联式引用。 ```javascript const inlinesource = require('gulp-inline-source'); gulp.task('html', function () { return gulp.src('./*.html') .pipe(inlinesource({ compress: false //是否压缩成一行,默认为true压缩 })) .pipe(gulp.dest('./out')); }); ``` #### gulp-htmlmin 压缩html ```javascript const htmlmin = require('gulp-htmlmin'); gulp.task('minify', () => { return gulp.src('src/*.html') .pipe(htmlmin({ removeComments: true, //去除备注 collapseWhitespace: true //去除空白 })) .pipe(gulp.dest('dist')); }); ``` ### 其他 #### del 删除文件或文件夹 ```javascript const del = require('del'); /* 清理一些不是必须的js,css文件 */ gulp.task('clean', function() { return del(['./dist/*.js', './dist/*.css' ]).then(function() { console.log('delete unnecessary files for firecrackers'); }); }); ``` #### gulp-rename 重命名文件 ```javascript const rename = require('gulp-rename'); gulp.task('html', function() { .pipe(rename({ dirname: ".", // 路径名 basename: "index", // 主文件名 prefix: "pre-", // 前缀 suffix: "-min", // 后缀 extname: ".html" // 扩展名 })) .pipe(gulp.dest('dist')) }); ``` ## 其他链接 > * 案例地址:https://github.com/raoenhui/gulpExample.git Happy coding .. :)
原创文章,需联系作者,授权转载
上一篇:Intersection observer检测元素是否在视窗内
下一篇:Https在各种Web服务器下配置
相关文章
【技术干货】企业级扫描平台EOS-Jenkins集群进阶之路
Typescript合成Webpack中
不为熟知的ES5 api(一)
京东ZERO团队
文章数
39
阅读量
91750
作者其他文章
01
webpack打包组件配置(React版本)
这篇文章是以打包react插件的形式,介绍webpack的一些配置信息。如果写简单插件的话还是推荐使用rollup,但是可以用写插件的形式去学习一下webpack的一些东西。(适用于初中级webpack学者)
01
webpack核心概念与基本实现
webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。**
01
Typescript合成Webpack中
TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript,简称ts。相对于ES6,TypeScript最大的改善是增加了类型系统,国内外很多大型工程都用它,如AngularJs,白鹭引擎、Antd。
01
小程序加载svg图片
小程序的[组件](https://developers.weixin.qq.com/miniprogram/dev/component/)中是没有支持`SVG`标签的。 但是在前端小伙伴的实际开发中,UED经常提供SVG图片过来,如果不想用引入`iconfont`的话,那么妹子我将介绍个很好用的方法。
最新回复
丨
点赞排行
共0条评论
京东ZERO团队
文章数
39
阅读量
91750
作者其他文章
01
webpack打包组件配置(React版本)
01
webpack核心概念与基本实现
01
Typescript合成Webpack中
01
小程序加载svg图片
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号