如果希望对在静态页面中引入的相关资源进行压缩(比如:CSS,JavaScript,图片等),可以使用Gulp实现。

当然,还可以使用其他打包工具,比如:Grunt,Webpack等等。

Gulp是什么

Gulp是一个用于对静态Web资源进行打包的工具,可以实现对静态资源的压缩,本质上是一个npm模块。

在正式使用Gulp之前,需要先安装并配置好Node.js环境。

# 查看node.js版本
node --version
v16.15.1 # 查看npm版本
npm --version
8.11.0 # 全局安装gulp和gulp-cli命令行工具
npm install --global gulp
npm install --global gulp-cli # 查看gulp版本
gulp -version
CLI version: 2.3.0
Local version: 4.0.2

如何使用Gulp

Gulp是一个流式构建工具,具体要执行的任务可以在项目根目录下新建一个名叫“gulpfile.js”的文件,并在其中进行配置。

// 引入gulp模块
var gulp = require('gulp'); gulp.task('task1', function() {
// 这里是任务代码
});

然后执行:gulp task1即可。

实际上,Gulp是一个插件化的工具,配置文件中的各个任务都是通过指定的插件实现的,当需要使用某个插件时需要先安装该插件。

可以在这里搜索指定的Gulp插件。

应用实践

如下示例将实现对静态网站中使用CSS,JavaScript和图片资源进行压缩,并最终打包到指定目录。

在项目根目录下安装对应插件:

# 使用gulp-uglify压缩js
npm install --save-dev gulp-uglify
# 使用gulp-clean-css压缩css
npm install --save-dev gulp-clean-css
# 使用gulp-smushit压缩图片
npm install --save-dev gulp-smushit
# 使用gulp-htmlmin压缩html
npm install --save-dev gulp-htmlmin

在项目根目录下编辑“gulpfile.js”配置文件:

const gulp = require('gulp');
const uglify = require('gulp-uglify');
const cleancss = require('gulp-clean-css');
const smushit = require('gulp-smushit');
const htmlmin = require('gulp-htmlmin') // 压缩js
gulp.task('minscript', function() {
return gulp.src('./assets/js/*.js')
.pipe(uglify())
.pipe(gulp.dest('./dist/assets/js'));
}) // 压缩css
gulp.task('mincss', function() {
return gulp.src('./assets/css/*.css')
.pipe(cleancss())
.pipe(gulp.dest('./dist/assets/css'));
}) // 压缩html
gulp.task('minhtml', function() {
return gulp.src('./*.html')
.pipe(htmlmin({
removeComments: true, //清除HTML注释
collapseWhitespace: true, //压缩HTML
collapseBooleanAttributes: true, //省略布尔属性的值 <input checked="true"/> ==> <input checked />
removeEmptyAttributes: true, //删除所有空格作属性值 <input id="" /> ==> <input />
removeScriptTypeAttributes: false, //删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: false, //删除<style>和<link>的type="text/css"
minifyJS: true, //压缩页面JS
minifyCSS: true //压缩页面CSS
}))
.pipe(gulp.dest('./dist'));
}) // 压缩图片
gulp.task('minimg', function () {
return gulp.src('./assets/img/*.{jpg,png}')
.pipe(smushit())
.pipe(gulp.dest('./dist/assets/img'));
}); // 批量复制文件
gulp.task('copy', async function() {
gulp.src('./assets/fonts/*.*').pipe(gulp.dest('./dist/assets/fonts'));
gulp.src('./assets/json/*.json').pipe(gulp.dest('./dist/assets/json'));
gulp.src('./*.{png,ico}').pipe(gulp.dest('./dist'));
}) // 明确指定默认构建操作包含的任务,如果不指定默认构建任务,则需要以参数形式指定任务,如:gulp minscript mincss minhtml copy
module.exports.default = gulp.series(gulp.parallel('minscript','mincss','minhtml','minimg','copy'))

然后在项目根目录下执行:gulp即可完成打包动作,将相应资源打包到项目根目录下的dist目录中。

【参考】

https://blog.csdn.net/qq_43817164/article/details/118107169 Gulp入门

https://zhuanlan.zhihu.com/p/354233622 Gulp 使用gulp压缩JS

https://blog.csdn.net/weixin_45195200/article/details/115323006 Gulp 使用gulp压缩CSS

https://blog.csdn.net/weixin_45195200/article/details/115459128 Gulp 使用gulp压缩图片

https://blog.csdn.net/zhongguohaoshaonian/article/details/53213657 gulp教程之gulp-imagemin压缩图片

https://www.cnblogs.com/zlf1914/p/13144381.html gulp压缩html,css,js文件流程、监听任务、使用gulp创建服务器、同时运行多个任务、反向代理

https://www.jianshu.com/p/657143a3de37 前端工程化-自动化构建工具 Gulp 案例演示

https://blog.csdn.net/Mayflyingdancing/article/details/109215874 gulp-imagemin: Couldn‘t load default plugin

使用Gulp压缩静态资源的更多相关文章

  1. gulp之静态资源防缓存处理

    最近,因为校友网项目开始有些规模了.开始就要考虑对静态资源进行工程自动化的管理.一讲到前端的自动化工具,大家或许都会想到Grunt,Gulp,或者百度的FIS.这三个都有各自的特点,大家可以依据自己的 ...

  2. gulp管理静态资源缓存

    前端项目在版本迭代的时候,难免会遇到静态缓存的问题,明明开发的是ok的,但是一部署到服务器上,发现页面变得乱七八糟,这是由于静态缓存引起的. 从上面这张图片可以看出,浏览器加载css,js等资源时,s ...

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

    var gulp = require('gulp'); var RevAll = require('gulp-rev-all'); var uglify = require('gulp-uglify' ...

  4. Hexo瞎折腾系列(5) - 使用hexo-neat插件压缩页面静态资源

    为什么要压缩页面静态资源 对于个人博客来说,优化页面的访问速度是很有必要的,如果打开你的个人站点,加载个首页就要十几秒,页面长时间处于空白状态,想必没什么人能够忍受得了吧.我个人觉得,如果能把页面的加 ...

  5. gulp静态资源构建、压缩、版本号添加

    公司移动端商城使用前后分离方案,前台nginx静态文件,js使用requirejs模式,使用gulp压缩添加版本号时发现问题, 问题1.在公共的js配置中,引用的路径是写死的,缓存会一直存在. 解决方 ...

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

    为了防止客户端的静态资源缓存,我们需要每次更新css或js的时候,通过md5或时间戳等方式重新命名静态资源: 然后涉及到的html模板里的src也要做相应的修改,静态资源需要优化(压缩合并) 文件目录 ...

  7. gulp 自动化构建网站(版本号静态资源)

    前言 新的一年啦,感觉总是静不下心,用了一天的时间吧,算是对gulp 这个前端打包工具入门了,自己也写了demo,表示对这个稍微理解了吧, 当然还是有差距的啦,下面讲讲怎么用吧: 如何用 当然先去官网 ...

  8. 前后端分离+本地服务实时刷新+缓存管理+接口proxy+静态资源增量更新+各种性能优化+上线运维发布——gulp工作流搭建

    技巧集:http://www.gulpjs.com.cn/docs/recipes/ 其实无非就是利用各种gulp插件.node脚本对项目文件做各种IO操作,只是备忘,需要的话,还是自己重新写最合适. ...

  9. ASP.NET MVC 静态资源打包和压缩问题小记

    ASP.NET MVC 中有个 BundleConfig 用于静态资源的打包和压缩,我在使用的过程中遇到一些问题,现在做下总结,并给出具体的解决方案. 问题一:打包压缩后的 JavaScript 和 ...

  10. 前端静态资源版本更新与缓存之——gulp自动化添加版本号

    公司项目每次发布后,偶尔会有缓存问题,然后看了下gulp,发现gulp还能给js,css自动化添加版本号,可解决缓存的问题,所以自动化实现静态资源的版本更新才是正道.通过网上的资料试过了两种办法: 1 ...

随机推荐

  1. [转帖]金仓数据库KingbaseES表空间(tablespace)知多少

    金仓数据库KingbaseES表空间定义 金仓数据库KingbaseES中的表空间允许在文件系统里定义那些代表数据库对象的文件存放位置,比如表和索引等.一旦表空间被创建,那么就可以在创建数据库对象时通 ...

  2. [转帖]龙芯3A5000评测 国产自主指令集架构实战

      https://tieba.baidu.com/p/8297036384?pid=147031768904&cid=#147031768904 芯片,是世界一大难题,很多人难以想象电子硬件 ...

  3. JVM启动参数脚本的再学习与研究

    JVM启动参数脚本的再学习与研究 摘要 学无止境 前段时间一直再研究JVM参数调优. 但是最近也在想不应该仅研究如何调优. 因为不管怎么设置, 总有猪队友会把环境搞崩. 所以应该想办法在无人值守的情况 ...

  4. JDK发布版本的总结

    https://www.oracle.com/java/technologies/javase/8all-relnotes.html 从官网总结一下每个版本的发布日期 Java SE 8u141 Ad ...

  5. Ant Design Vue数字输入框InputNumber 有值但是验证却不能够通过

    InputNumber 有值但是验证却不能够通过 今天遇见这样一个问题,InputNumber 输入框中有值 但是却却提示验证不能够通过 后来经过分析,怀疑是数据类型不正确, 后面经过验证,果然是数据 ...

  6. kettle系统列文章01---安装与配置

    1).到官网下载需要安装的kettle版本,目前最新版本4.2,官网地址:http://kettle.pentaho.org,我们是使用的版本是kettle3.2 2).本地安装jdk 1.4或以上版 ...

  7. [P9253 [PA 2022] Ornitolog 2] 题解

    题目 P9253 [PA 2022] Ornitolog 2 题目描述 给你一个长度为 \(n\) 的数列,求至少要修改多少个数才能让数列成为交替鹡鸰鸟鸣的音高序列. 思路 这道题有两种情况. 第一种 ...

  8. 微信小程序-应用程序生命周期方法

    官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html // app.js App({ onLau ...

  9. 使用三方jar中的@RestControllerAdvice不起作用

    背景 公司封装了自己的基础核心包core-base,里边包含了Validation的异常捕获处理类:同时开发项目有全局异常捕获处理类,经测试发现,core-base里边的不起作用 可能原因: 未扫描外 ...

  10. python排序之快速排序

    快速排序 快速排序是比较常用的一种排序方式,通过递归的方法进行排序 首先使用递归方式我们先要解决两个问题:1找到基准条件 2找到递归条件 基线条件为数组为空或只包含一个元素.在这种情况下,只需原样返回 ...