静态页面实现 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中也使用$美元符号来代替document.getElementById
Jun 19 Javascript
ExtJs使用总结(非常详细)
Mar 22 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
May 15 Javascript
php常见的页面跳转方法汇总
Apr 15 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
Dec 04 Javascript
js HTML5 Canvas绘制转盘抽奖
Sep 13 Javascript
vue.js初学入门教程(2)
Nov 07 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
Nov 21 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
Nov 30 Javascript
原生js canvas实现鼠标跟随效果
Aug 02 Javascript
vue 实现基础组件的自动化全局注册
Dec 25 Vue.js
vue项目多环境配置(.env)的实现
Jul 21 Vue.js
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检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
完整显示当前日期和时间的JS代码
2007/09/17 Javascript
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
javascript date格式化示例
2013/09/25 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
python利用urllib和urllib2访问http的GET/POST详解
2017/09/27 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
Python对切片命名的实现方法
2018/10/16 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
如何利用python生成MD5并去重
2020/12/07 Python
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
舞蹈教师自荐信
2014/01/27 职场文书
学习标兵获奖感言
2014/02/20 职场文书
2014党员四风对照检查材料思想汇报
2014/09/17 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
一年级语文教学随笔
2015/08/14 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android
分享提高 Python 代码的可读性的技巧
2022/03/03 Python