gulp来处理html、css、js资源啦
gulp 一般用于处理自动化任务,默认情况无法处理模块化,也不会用于大型项目,但它可以使用各种插件来编译 html、css、js 等资源。
不清楚如何使用 gulp 开启任务的朋友可以参考 gulp使用指南
处理html
处理 html 资源使用到 gulp-htmlmin 这个插件,和 webpack中使用到的html-webpack-plugin 比较相似。
// gulpfile.js
const { src, dest } = require('gulp');
const htmlMin = require('gulp-htmlmin');
const htmlTask = () => {
// base 表示基本目录,编译后会保持原文件结构
return src('./src/*.html', { base: './src' })
.pipe(
htmlMin({
collapseWhitespace: true,
})
)
.pipe(dest('./dist'));
};
module.exports = {
htmlTask,
};
执行 npx gulp htmlTask ,此时将 html 资源编译输出到 dist 文件夹下

处理less
要处理布局就免不了样式文件,处理 less 文件需要用到 gulp-less,如果对于 css 兼容性还要做处理的话,就需要用到 postcss 和它所需要的插件 postcss-preset-env,webpack处理css资源 文章中有详细介绍
const { src, dest } = require('gulp');
const less = require('gulp-less');
const postcss = require('gulp-postcss');
const postCssPresetEnv = require('postcss-preset-env');
const lessTask = () => {
return src('./src/css/*.less', { base: './src' })
.pipe(less())
.pipe(postcss([postcssPresetEnv()]))
.pipe(dest('./dist'));
};
module.exports = {
lessTask,
};
执行 npx gulp lessTask,less 文件会被处理成 css 文件

处理js
gulp-babel 用于转化代码等兼容处理,用法和 webpack中babel-loader 相似,gulp-terser 用于压缩文件,用法和 terser-webpack-plugin 相似。
const { src, dest } = require('gulp');
const terser = require('gulp-terser');
const babel = require('gulp-babel');
const jsTask = () => {
return src('./src/js/*.js', { base: './src' })
.pipe(babel({ presets: ['@babel/preset-env'] }))
.pipe(terser({ mangle: { toplevel: true } }))
.pipe(dest('./dist'));
};
module.exports = {
htmlTask,
lessTask,
jsTask,
};
执行 npx gulp jsTask,编译后文件能看到es6转换es5和压缩的代码。

html资源注入
编译后的 css 和 js 资源不会被默认添加到 html 页面中,我们需要借助插件 gulp-inject 帮助编译,并在模板 html 文件中添加魔法注释,告知资源引入的地址。
const { src, dest } = require('gulp');
const inject = require('gulp-inject');
const injectHtml = () => {
return src('./dist/*.html')
.pipe(
// 使用相对路径将js和css资源引入
inject(src(['./dist/js/*.js', './dist/css/*.css']), {
relative: true,
})
)
.pipe(dest('./dist'));
};
module.exports = {
injectHtml,
};
在 html 文件中添加了魔法注释,所以需要重新编译 html 文件,再将 js 和 css 引入到 html 页面中。依次执行 npx gulp htmlTask 和 npx gulp injectHtml,将编译后的 html 文件格式化,可以看到已经在指定位置引入了 js 和 css 文件。

开启自动服务
在开发的时候,通常希望开启一个服务,当文件内容发生变化时,编译后的代码也同步发生变化,能够更好的查看代码执行的效果,这时候要用到 browser-sync 来操作。
const { src, dest, watch } = require('gulp');
const browserSync = require('browser-sync');
const bs = browserSync.create();
const serve = () => {
// 当文件变化时,重新编译文件,并注入到 html 文件中
watch('./src/*.html', series(htmlTask, injectHtml));
watch('./src/js/*.js', series(jsTask, injectHtml));
watch('./src/css/*.less', series(lessTask, injectHtml));
// 自动服务的配置
bs.init({
port: 8808,
open: true,
files: './dist',
server: {
baseDir: './dist',
},
});
};
module.exports = {
serve,
};
此时服务不会中断,代码更新就会重新编译文件

组合任务
以上每个任务都是独立的,每种类型文件的编译都需要执行一次命令,开启自动服务也必须先将 html、css、js 执行编译到 dist 文件夹下才行,执行命令的次数会太繁琐,可以将他们进行一个整合。
const { series, parallel } = require('gulp');
// series 表示串行,parallel 表示并行
const buildTask = series(parallel(htmlTask, lessTask, jsTask), injectHtml);
const serveTask = series(buildTask, serve);
module.exports = {
buildTask,
serveTask,
};
这样只需要导出两个任务,就可以覆盖 编译 和 开启自动服务 两个场景,还可以在 package.json 中配置 script 命令,就可以直接通过 npm 来执行任务,执行 npx gulp serveTask

总结
- html 文件通过插件
gulp-htmlmin对代码压缩 - less 文件使用插件
gulp-less解析, css 文件兼容性通过gulp-postcsspostcss-preset-env处理 - js 文件使用
gulp-babel进行代码转换,gulp-terser压缩代码 gulp-inject配合魔法注释将资源添加到 html 页面中browser-sync和watch为编译开启自动服务seriesparallel串行和并行组合任务
以上就是 gulp 处理html、css、js资源的介绍, 更多有关 前端、工程化 的内容可以参考我其它的博文,持续更新中~
gulp来处理html、css、js资源啦的更多相关文章
- NanUI文档 - 打包并使用内嵌式的HTML/CSS/JS资源
NanUI文档目录 NanUI简介 开始使用NanUI 打包并使用内嵌式的HTML/CSS/JS资源 使用网页来设计整个窗口 如何实现C#与Javascript相互掉用(待更新...) 如何处理Nan ...
- WebJars 进行 css js 资源文件管理
WebJars是将这些通用的Web前端资源打包成Java的Jar包,然后借助Maven工具对其管理,保证这些Web资源版本唯一性,升级也比较容易.关于webjars资源,有一个专门的网站http:// ...
- Asp.net 引用css/js资源文件
注意Page.ResolveUrl之前的双引号,不是单引号 <script type="text/javascript" src="<%= Page.Reso ...
- Gulp:静态资源(css,js)版本控制
为了防止客户端的静态资源缓存,我们需要每次更新css或js的时候,通过md5或时间戳等方式重新命名静态资源: 然后涉及到的html模板里的src也要做相应的修改,静态资源需要优化(压缩合并) 文件目录 ...
- gulp为css,js添加版本号
由于cdn缓存,更改样式后会有一段时间不生效,解决方法就是给css,js加上版本号效果如下: 1.安装gulp插件 npm install --save-dev gulp-rev (version:9 ...
- 开源组件NanUI一周年 - 使用HTML/CSS/JS来构建.Net Winform应用程序界面
NanUI是什么 NanUI基于ChromiumFX项目进行开发,它能让你在你的Winform应用程序中使用HTML5/CSS3/Javascript等网页技术来呈现用户界面(类似Electron). ...
- gulp插件构建项目 压缩js、css、image、zip、web服务、跨域等插件
推荐一个很好文: https://github.com/lin-xin/blog/issues/2 匹配符 *.**.!.{} gulp.src('./js/*.js') // * 匹配js文件夹下所 ...
- gulp自动刷新和css、js压缩
之前搭建过Grunt,但是用起来有点繁琐,后来有人跟我说gulp更多简单.所以今天又搭建一个gulp.在使用gulp前应该有nodeJs环境,安装完nodejs后,就可以开始gulp的搭建了. 先新建 ...
- 运用Gulp压缩文件编译文件。包括css js html image
安装node.js npm 以及安装gulp等方法我就不在这里赘述了. 接下里我主要介绍的是Gulpfile文件里面的配置该如何书写. var gulp = require('gulp');//引 ...
- Spring MVC程序中得到静态资源文件css,js,图片
转载自:http://www.blogjava.net/fiele/archive/2014/08/24/417283.html 用 Spring MVC 开发应用程序,对于初学者有一个很头疼的问题, ...
随机推荐
- 用R语言进行时间序列ARMA模型分析
应用时间序列 时间序列分析是一种重要的数据分析方法,应用广泛.以下列举了几个时间序列分析的应用场景: 1.经济预测:时间序列分析可以用来分析经济数据,预测未来经济趋势和走向.例如,利用历史股市数据和经 ...
- 在vue标签代码块中定义变量
方式一: 在标签上使用:set关键字,不管什么标签都可以 <template> <h1>test</h1> <template :set="firs ...
- React Hooks方法
1.useState import React, { useState } from "react"; /* 目标: 掌握useState的使用 作用:实现响应式数据的 用法:引入 ...
- 2022-11-17:组合两个表。请写出sql语句,执行结果是{“headers“: [“first_name“, “last_name“, “city“, “state“], “values“: [
2022-11-17:组合两个表.请写出sql语句,执行结果是{"headers": ["first_name", "last_name", ...
- 2022-02-28:k8s安装adminer,yaml如何写?
2022-02-28:k8s安装adminer,yaml如何写? 答案2022-02-28: yaml如下: apiVersion: apps/v1 kind: Deployment metadata ...
- 2022-02-09:k8s安装redis,yaml如何写?
2022-02-09:k8s安装redis,yaml如何写? 答案2022-02-29: apiVersion: apps/v1 kind: Deployment metadata: labels: ...
- Django4全栈进阶之路15 项目实战(用户管理):login.html登录画面设计
要编写登录页面,我们需要完成以下步骤: template文件夹中创建 login.html 模板文件,输入以下 HTML 代码: {% extends 'base.html' %} {% block ...
- 计算机网络IP地址和进制的转换
目录 一.双绞线 二.计算机的数制 三.单位 四.IP地址的分类 ip地址的 组成 五.特殊地址 六.地址协议 一.双绞线 T568A:白绿.绿.白橙.蓝.白蓝.橙.白棕.棕 T568B:白橙.橙.白 ...
- Java革命性ORM框架之快速上手的Jimmer
Jimmer是一款革命性的ORM框架,它的目标是提供一个简单易用的API,帮助开发人员更加轻松地操作数据库.Jimmer使用了Java 8的新特性,如Lambda表达式和Stream API,使得代码 ...
- Min-25 筛学习笔记
Min-25 筛学习笔记 \(\text{By DaiRuiChen007}\) 一.简要介绍 Min-25 筛,是一种能在亚线性时间内求出特定的一类积性函数 \(f(i)\) 的前缀和的算法. 具体 ...