静态页面实现 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 相关文章推荐
网页里控制图片大小的相关代码
Jun 25 Javascript
js parentElement和offsetParent之间的区别
Mar 23 Javascript
JavaScript判断文件上传类型的方法
Sep 02 Javascript
jQuery扩展+xml实现表单验证功能的方法
Dec 25 Javascript
Bootstrap导航简单实现代码
Mar 06 Javascript
javaScript 连接打印机,打印小票的实例
Dec 29 Javascript
浅谈vue 单文件探索
Sep 05 Javascript
vue this.reload 方法 配置
Sep 12 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
May 12 Javascript
vuex 实现getter值赋值给vue组件里的data示例
Nov 05 Javascript
JS正则表达式验证端口范围(0-65535)
Jan 06 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
Jul 19 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
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
php替换字符串中间字符为省略号的方法
2015/05/04 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
js使用函数绑定技术改变事件处理程序的作用域
2011/12/26 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
js单词形式的运算符
2014/05/06 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
JavaScript实现向右伸出的多级网页菜单效果
2015/08/25 Javascript
javascript实现tab响应式切换特效
2016/01/29 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
2017/03/29 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
[01:13]这,就是刀塔
2014/07/16 DOTA
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
python验证码识别实例代码
2018/02/03 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
Django缓存Cache使用详解
2020/11/30 Python
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
文秘专业个人求职信
2013/12/22 职场文书
一年级学生期末评语
2014/04/21 职场文书
环保公益策划方案
2014/08/15 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
python实现三次密码验证的示例
2021/04/29 Python