博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
送干货,实用内联gulp插件——gulp-embed
阅读量:6107 次
发布时间:2019-06-21

本文共 1478 字,大约阅读时间需要 4 分钟。

现在npm上有很多gulp内联工具,用于把脚本和样式内嵌到HTML页面上,之前搞项目我也在这些插件中寻觅许久,但均不满足公司项目的一个需求—— HTML上同时插入了开发dev版,src文件夹下,比如 src/index.html)和gulp处理后(build版,dest文件夹下,比如 dest/index.html)的两种版本的脚本,要求运行src文件夹下的该页面时,能忽略掉引入的build版的脚本(比如src/a.js);而在运行dest文件夹下的该页面时,能忽略的引入的dev版的脚本(比如dest/b.js)

事实上解决该问题的方案挺简单,比如往 src/index.html 插入这段代码:

 

在我们运行 src/index.html 时,由于第二行<script> 中是以 data-src 而非 src 的形式来引用脚本,故它是不会被执行处理的。

然后我们需要有一款工具,在gulp构建时,把页面上带有 data-embed="disable" 属性的,比如第一条<script>,将其从构建后的html页面(dest/index.html)上移除掉,另将带有 data-embed 属性的,比如第二条<script>上的 data-src 更变为 src,并将对应脚本内嵌到页面上。

这样一来 src/index.html 就只会执行 src/a.js,而 dest/index.html 就只会执行 dest/b.js(且内嵌到页面上了)。

找不到适宜的轮子当然只能自行造轮子了,基于  我折腾了这款  ,除了支持 resource-embedder 默认的参数(建议去github看,这里不赘述),相比其它内联插件还支持我上述的解决方案(不止脚本,样式也支持),另外还支持远程文件(下载成功后内联到页面)

安装方法

自然是常规的npm安装形式:

npm install --save-dev gulp-embed

 

使用示例

gulpfile配置:

gulp.task('embed', function () {    gulp.src('./src/*.html')        .pipe(embed())        .pipe(gulp.dest('./dest/'));});

html页面:

    
demo

基本上都是依靠 data-embed 属性来灵活控制文件最终的内嵌、去留与否,感觉还是蛮方便的。

为什么要内嵌文件到页面?

我在  一文中其实有提过,将小块的、复用不高的css、js代码段直接写在页面上有助于减少冗余请求,事实上在走Gzip的情况下(比如移动端),大部分的脚本和样式都可以直接内联到页面上来减少首屏时间(Gzip压缩率还是很高的)

 

为什么要按开发模式和构建模式引入两种脚本?

项目需求!项目需求!项目需求!重要的事情说三遍,每个项目都会有一些你可能没意料过的小需求,如我司项目构建时要下载一些变动较高的远程文件再打包处理,如果开发模式直接引入一些可临时替代的文件,可以在构建前就直接在dev文件上做调试和定位问题,有助于提升开发效率。

另外现在很多内嵌插件都不支持远程脚本/样式的下载,如果你有这方面的需求,也可以使用 gulp-embed 哦~

 

什么?你还不知道gulp是啥?

快看下我的老文章  入门吧!

 

周末愉快,共勉~!

donate

转载地址:http://yghza.baihongyu.com/

你可能感兴趣的文章
《HTML5 开发实例大全》——1.20 分组列表显示网页中的内容
查看>>
设计模式简单总结
查看>>
《ANTLR 4权威指南 》一2.5 语法分析树监听器和访问器
查看>>
Oracle内核系列-揭秘ASM磁盘头信息
查看>>
android值得珍藏的6个开源框架技术
查看>>
AlloyTouch之select选择插件
查看>>
【阿里云资讯】Sort Benchmark 2016 年排序竞赛结果: 100T 数据排序谁的花费更少?...
查看>>
java 内部类(inner class)详解
查看>>
Map集合遍历的四种方式理解和简单使用
查看>>
【Hadoop Summit Tokyo 2016】重建大规模Web跟踪设施
查看>>
ECS-CentOS7设置中文界面显示
查看>>
阅读(英文)大部头教材遇到了困难...
查看>>
AliSQL · 开源 · Sequence Engine
查看>>
机器学习——支持向量机SVM在R中的实现
查看>>
java8: lambda表达式的参数
查看>>
phalapi-进阶篇5(数据库读写分离以及多库使用)
查看>>
rsync配置文件详解
查看>>
mysql常用基础操作语法(十)~~子查询【命令行模式】
查看>>
Supervisor 管理进程,Cloud Insight 监控进程,完美!
查看>>
Maven依赖的配置
查看>>