在某些开发项目中,我们需要用到动态输出index.html
文件,而这个页面文件内的资源也是需要动态加载的,就比如说在线面这些开发条件:
sass
,把编译后的内容动态植入html
的style
标签中,或者自动引用编译好的css
文件index.html
文件中,动态插入多个js
文件的script
脚本内容gulp-html-replace
这款插件那就肯定适合您!cnpm install --save-dev gulp-html-replace
index.html
模板文件<!DOCTYPE html>
<html>
<head>
<!-- build:css -->
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/main.css">
<!-- endbuild -->
</head>
<body>
<!-- build:js -->
<script src="js/player.js"></script>
<script src="js/monster.js"></script>
<script src="js/world.js"></script>
<!-- endbuild -->
</body>
</html>
gulpfile.js
gulp 入口文件编辑如下:var gulp = require('gulp');
var htmlreplace = require('gulp-html-replace');
const hr = (done) => {
gulp.src('index.html')
.pipe(htmlreplace({
'css': 'styles.min.css',
'js': 'js/bundle.min.js'
}))
.pipe(gulp.dest('build/'));
done()
}
exports.default = hr
build/index.html
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="styles.min.css">
</head>
<body>
<script src="js/bundle.min.js"></script>
</body>
<html>
这里这个案例呢,是gulp-html-replace
的基本使用方法,把配置好的js、css文件,编译成script以及link标签自动引入到html
gulp-html-replace
的参数有哪些呢?我们来看下面这个结构,对每个属性进行一次解读:
htmlreplace({
js: {
src: "build/js/",
tpl: '<script src="%s%f".js></script>'
}
}, {
keepUnassigned: false, // 默认 false
keepBlockTags: false, // 默认 false
resolvePaths: false // 默认 false
})
: 这里的js是html引入模板的名称 , 对应 html中的
`%s %f %e
等)的一个变量, 它会替换tpl字符串中的%s
, 可以是字符串,字符串数组,Stream、null 等html
页面中的模板的字符串index.html
文件<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>main html</title>
<!-- build:js -->
<!-- endbuild -->
<!-- build:nulljs -->
<!-- endbuild -->
<!-- build:dirjs -->
<!-- endbuild -->
<!-- build:css -->
<!-- endbuild -->
<!-- build:streamCss -->
<!-- endbuild -->
</head>
<body>
hello world !
<section class="section-box-1"></section>
<section class="section-box-2"></section>
<!-- build:image -->
<!-- endbuild -->
<!-- build:sassTocss -->
<!-- endbuild -->
</body>
</html>
gulpfile.js
文件,编辑如下:let gulp = require("gulp");
let gulpLoadPlugins = require('gulp-load-plugins');
let $ = gulpLoadPlugins({lazyload: true, rename:{"gulp-ruby-sass" : "sass"}});
var htmlreplace = require("gulp-html-replace")
const clear = (done) => {
del.sync(['./dist/newjs/*','!./dist/newjs','./dist/newcss/*','./dist/newcss'])
done()
}
const hr = (done) => {
gulp.src(["./html/main.html"])
.pipe(htmlreplace({
js:{
src:[ ["./js/add.js","./js/add.js"] ],
tpl: '<script data-main="%s" src="%s"></script>' // 将数组编译到模板字符串中
},
nulljs:{
src:null,
tpl: '<script data-main="nulljs" src="%f.js"></script>' // 将数组编译到模板字符串中
},
dirjs:{
src:'dirpath',
tpl: '<script data-main="nulljs" src="%s/%f.js"></script>' // 把字符串%s(这里是 dirpath)以及 文件名%f(这里是main)编译到到模板字符串中
},
css:{
src:[ ["css/style.js","css/style1.js","css/style2.js"], ],
tpl: '<link ref="stylesheet" type="text/css" href="%s" />\n<link ref="stylesheet" type="text/css" href="%s" />\n<link ref="stylesheet" type="text/css" href="%s" />\n' // 编译多个css link字符串
},
image:{
src:[["images/01.jpg", "images/02.jpg"]], // 静态资源个人建议使用Stream类型 让其自动遍历
tpl: `<image src="%s?v=${Math.random()}" />\n<image src="%s?v=${Math.random()}" />` // 编译多个img 图片字符串 带随机版本号,类似于hash
},
sassTocss:{
src: $.sass("./scss/*.scss"), // 编译多sass文件成css 把编译后的css内容植入页面的style标签中
tpl: '<style>%s</style>'
}
},{
keepUnassigned: false,
keepBlockTags: false,
resolvePaths: false
}))
.pipe(gulp.dest('./dist/newjs/')) // 输出到 dist/newjs/ 目录文件夹下
done()
}
exports.default = gulp.series(clear, hr)
在前端自动化工作流中,我们的任务是复杂多变的,所以我们需要很多强有力的工具来辅助我们完成任务,gulp-html-replace
就是一个不错的gulp
插件工具,在编译脚本css后,再动态植入index.html
中,配合live-server
、brower-sync
等插件使用,简直爽翻天,今天的gulp插件分享就到这里,如果希望了解更多的前端自动化的知识,可以关注我的博客哟 ~~