静态页面实现 include 引入公用代码的示例


Posted in Javascript onSeptember 25, 2017

一直以来,我司的前端都是用 php 的 include 函数来实现引入 header 、footer 这些公用代码的,就像下面这样:

<!-- index.php -->
 
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <?php include('header.php'); ?>
  <div>页面主体部分</div>
  <?php include('footer.php'); ?>
</body>
</html>
<!-- header.php -->
<header>这是头部</header>
<!-- footer.php -->
<footer>这是底部</footer>

直到最近某个项目需要做一个 webapp,是通过 HBuilder 将静态页面打包成 APP,这就让我碰到难题了。

如果是小项目,那就直接手动多复制粘贴几遍,但如果页面较多,复制粘贴的方案明显不靠谱,维护成本也高。

在查了很多资料后,最终确定用 gulp 来解决,具体操作如下:

1、安装 gulp 和 gulp-file-include

首先新建个文件夹,在终端里定位到文件夹的位置,然后进行 npm 初始化

npm init

然后安装 gulp

npm install gulp --save-dev

接着安装 gulp-file-include

npm install gulp-file-include --save-dev

2、新建并配置 gulpfile.js

接着我们手动新建一个 js 文件取名为 gulpfile,并在里面写入如下代码:

var gulp = require('gulp');
var fileinclude = require('gulp-file-include');
 
gulp.task('fileinclude', function () {
  // 适配page中所有文件夹下的所有html,排除page下的include文件夹中html
  gulp.src(['page/**/*.html', '!page/include/**.html'])
    .pipe(fileinclude({
      prefix: '@@',
      basepath: '@file'
    }))
    .pipe(gulp.dest('dist'));
});

3、创建项目目录结构,并添加测试代码

项目的整体目录结构应该是这样

app

 page

include


 header.html


 footer.html


index.html

 gulpfile.js

 package.json

然后我们添加测试代码,header.html 和 footer.html 没太多好说的,主要是 index.html 要特别注意引入的方式,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  @@include('include/header.html')
  <div>页面主体部分</div>
  @@include('include/footer.html')
</body>
</html>

4、运行

在终端里敲入以下代码,看执行效果

gulp fileinclude

会发现,多了个 dist 文件夹,里面有一个 index.html 文件,gulp-file-include 已经帮我们把最终编译好的 index.html 文件生成好了。

可能你已经能举一反三了,在 gulpfile.js 里,我们可以手动设置最终生成文件的位置,就是这句话

gulp.dest('dist')

5、自动编译

静态页面引入公用代码的问题已经解决了,但每次编写源 html 后,都要去终端里手动执行下编译操作还是很麻烦,那能不能让文件自动编译呢?答案一定是可以的。

gulp 有个 watch 方法,就是监听文件是否有变动的,我们只需稍微修改下 gulpfile.js 文件,增加一段监听代码,如下:

var gulp = require('gulp');
var fileinclude = require('gulp-file-include');
 
gulp.task('fileinclude', function () {
  // 适配page中所有文件夹下的所有html,排除page下的include文件夹中html
  gulp.src(['page/**/*.html', '!page/include/**.html'])
    .pipe(fileinclude({
      prefix: '@@',
      basepath: '@file'
    }))
    .pipe(gulp.dest('dist'));
});
 
gulp.task('watch', function () {
  gulp.watch('page/**/*.html', ['fileinclude']);
});

写好之后,我们只需在终端里执行

gulp watch

我们每次保存源 html 后,gulp 就会自动帮我们编译一遍。

至此,静态页面如何实现 include 引入公用代码的问题,顺利解决,最后附上相关资料。

以上这篇静态页面实现 include 引入公用代码的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 面向对象编程 function也是类
Sep 17 Javascript
js 操作符实例代码
Oct 24 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
Feb 25 Javascript
jquery实现tr元素的上下移动示例代码
Dec 20 Javascript
js整数字符串转换为金额类型数据(示例代码)
Dec 26 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
Jan 24 Javascript
jQuery中on()方法用法实例详解
Feb 06 Javascript
jQuery控制cookie过期时间的方法
Apr 07 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
Nov 11 Javascript
微信小程序 scroll-view实现锚点滑动的示例
Dec 06 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
Jul 25 Javascript
node后端服务保活的实现
Nov 10 Javascript
React学习之事件绑定的几种方法对比
Sep 24 #Javascript
一文让你彻底搞清楚javascript中的require、import与export
Sep 24 #Javascript
通过源码分析Vue的双向数据绑定详解
Sep 24 #Javascript
JS实现手写parseInt的方法示例
Sep 24 #Javascript
Js利用console计算代码运行时间的方法示例
Sep 24 #Javascript
详解Web使用webpack构建前端项目
Sep 23 #Javascript
vue webuploader 文件上传组件开发
Sep 23 #Javascript
You might like
php生成略缩图代码
2012/07/16 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
php json相关函数用法示例
2017/03/28 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
js实现屏幕自适应局部代码分享
2015/01/30 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
Python 加密与解密小结
2018/12/06 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
Python数组并集交集补集代码实例
2020/02/18 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
最新党员的自我评价分享
2013/11/04 职场文书
硕士研究生自我鉴定
2013/11/08 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
晚会开场白和结束语
2015/05/29 职场文书
创业计划书之便利店
2019/09/05 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python