静态页面实现 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 相关文章推荐
JS编程小常识很有用
Nov 26 Javascript
js网页中的(运行代码)功能实现思路
Feb 04 Javascript
纯Javascript实现ping功能的方法
Mar 20 Javascript
JavaScript数组操作详解
Feb 04 Javascript
微信小程序 引入es6 promise
Apr 12 Javascript
微信小程序 本地图片按照屏幕尺寸处理
Aug 04 Javascript
Angular实现预加载延迟模块的示例
Oct 12 Javascript
vue2.0 和 animate.css的结合使用
Dec 12 Javascript
vue实现输入框自动跳转功能
May 20 Javascript
如何使用jQuery操作Cookies方法解析
Sep 08 jQuery
JavaScript获取时区实现过程解析
Sep 24 Javascript
vue中使用router全局守卫实现页面拦截的示例
Oct 23 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面向对象分析设计的经验原则
2008/09/20 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
2019/05/09 PHP
php中isset与empty函数的困惑与用法分析
2019/07/05 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
javascript Array数组对象的扩展函数代码
2010/05/22 Javascript
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
jquery+ajax+text文本框实现智能提示完整实例
2016/07/09 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
微信小程序 本地数据读取实例
2017/04/27 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
vue+element导航栏高亮显示的解决方式
2019/11/12 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
使用python为mysql实现restful接口
2018/01/05 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
毕业生幼师求职自荐信
2013/10/01 职场文书
如何写你的创业计划书
2014/01/07 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
出国导师推荐信
2015/03/25 职场文书
社区义诊通知
2015/04/24 职场文书
pytorch实现线性回归以及多元回归
2021/04/11 Python
dubbo服务整合zipkin详解
2021/07/26 Java/Android