资讯专栏INFORMATION COLUMN

gulp插件解决浏览器缓存问题

TwIStOy / 1137人阅读

摘要:以及列出的是本妹子最常用的插件,小伙伴们可以参考。案例地址二解决浏览器缓存问题为静态文件添加唯一值,如。我们主要是用将转换成可以在浏览器中运行的代码。合并文件相关预处理器。

一、前言

有些简单前端小项目,不需要涉及框架,前端打包压缩的话本妹子还是喜欢用gulp
本文将用gulp-revgulp-rev-rewrite解决cdn缓存问题。
以及列出的是本妹子最常用的gulp插件,小伙伴们可以参考。
案例地址:https://github.com/raoenhui/g...

二、解决浏览器缓存问题 gulp-rev

1.为静态文件添加唯一hash值,如 unicorn.css → unicorn-d41d8cd98f.css。

2.生成map映射文件,方便后面html更换文件名

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文件中的引用名称,

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"))
});

替换成功

三、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

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

找到编译源文件,方便调试源码。

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"))
);

gulp-concat

合并js文件

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预处理器。

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

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

将引用的jscss文件,插入html中,变成内联式引用。

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

const htmlmin = require("gulp-htmlmin");
gulp.task("minify", () => {
  return gulp.src("src/*.html")
    .pipe(htmlmin({
                removeComments: true,  //去除备注
                collapseWhitespace: true //去除空白
              }))
    .pipe(gulp.dest("dist"));
});    
其他 del

删除文件或文件夹

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

重命名文件

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

原文地址:https://raoenhui.github.io/js/2019/03/03/gulp

Happy coding .. :)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109297.html

相关文章

  • gulp组织小型项目小记

    摘要:目前正在开发一个系统,对于前端模块化与打包这块出现了一些选择。采用模块化及打包由于项目比较小,稍微了解后,觉得没必要采用。组件化,目前比较流行的如等。项目较小需要交互更新页面的并不多,没有采用。 目前正在开发一个python markdown wiki系统,对于前端模块化与打包这块出现了一些选择。1、采用webpack模块化及打包由于项目比较小,稍微了解后,觉得没必要采用webpack...

    2json 评论0 收藏0
  • gulp组织小型项目小记

    摘要:目前正在开发一个系统,对于前端模块化与打包这块出现了一些选择。采用模块化及打包由于项目比较小,稍微了解后,觉得没必要采用。组件化,目前比较流行的如等。项目较小需要交互更新页面的并不多,没有采用。 目前正在开发一个python markdown wiki系统,对于前端模块化与打包这块出现了一些选择。1、采用webpack模块化及打包由于项目比较小,稍微了解后,觉得没必要采用webpack...

    Heier 评论0 收藏0
  • gulp小结

    摘要:前两者定位是工具,则是种模块化解决方案。这四个都是模块化的方案。类型默认值如果该项被设置为,那么将会以方式返回而不是文件的形式。整个工程压缩完需要分钟以上,使用缓存后只需要秒钟。 gulp是什么? 一个自动化构建工具,基于nodejs的自动任务运行器。 为什么要使用它? 易于使用,易于学习。它能自动化地完成javascript/coffee/sass/less/html/image/c...

    Binguner 评论0 收藏0
  • 基于 Gulp 的简易前端自动化工程搭建

    摘要:生成的文件如下由于给文件添加了哈希值,所以每次编译出来的和都是不一样的,这会导致有很多冗余文件,所以我们可以每次在生成文件之前,先将原来的文件全部清空。中也有做这个工作的插件,因此我们可以在编译压缩添加哈希值之前先将原文将清空。 原文链接:http://mrzhang123.github.io/2016/09/07/gulpUse/项目链接:https://github.com/MrZ...

    Blackjun 评论0 收藏0
  • 前端构建工具整理

    摘要:常见前端构建工具的分类和对比是附带的包管理器,是内置的一个功能,允许在文件里面使用字段定义任务在这里,一个属性对应一段脚本,原理是通过调用去运行脚本命令。 前文 端技术范围不断发展,前端开发不仅限于直接编写html,css和javascript,Web应用日益庞大,代码也更加庞大,因此许多新的思想(例如模块化和工程化等)和框架(React和Vue等),以及新的语言(Es6 TypeSc...

    leo108 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<