使用 gulp-file-include 构建前端静态页面

前言

虽然现在单页面很流行,但是在 PC 端多页面还是常态,所以构建静态页面的工具还有用武之地。最近也看到了一些询问如何 include HTML 文件的问题。

很多时候我们在写静态页面的时候也希望能和后台模板一样,将导航、页头、页脚等公用的部分分离出去,然后引入页面中。单纯的静态页面不具备这种功能,而使用 gulp 插件可以很容易的完成,比如 gulp-file-include 插件。

官网对于插件的基本使用已经说得很详细,但是对于一些具体的场景并没有举例,所以初次接触还是还是会有疑惑,比如具有选中状态的导航条怎么做、面包屑怎么做。本文的主要目的就是给出两个例子的解决方案。

目录及配置文件

基本的目录结构如下,实际项目可能需要更精细的结构。

作为引入文件的插件,并没有太多的配置参数,基本的 gulpfile 如下,更详细的配置参见官网。

var gulp = require(‘gulp‘),
    fileinclude = require(‘gulp-file-include‘);

gulp.task(‘fileinclude‘, function() {
    gulp.src([‘./src/*.html‘])//主文件
        .pipe(fileinclude({
            prefix: ‘@@‘,//变量前缀 @@include
            basepath: ‘./src/_include‘,//引用文件路径
            indent:true//保留文件的缩进
        }))
        .pipe(gulp.dest(‘./dist‘));//输出文件路径
});

导航条

导航条是主要的引用内容,但是一般当前页面的导航都会有选中效果,那么就要使用 gulp-file-include 的判断功能。后台模板统一引入后也要考虑链接的选中问题。之前公司在用后台模板的时候就遇到过这个问题。其实无论是后台还是前台,在引入导航条这个问题上的解决方法差不多,都是在当前页面定义一个私有变量,通过这个变量来设置链接的选中效果,而 gulp-file-include 的变量通过传参实现。具体方法如下:

index.html

<!DOCTYPE html>
<html>
  <body>
  @@include(‘./navbar.html‘,{
     "index": "active"
   })
  </body>
</html>

navbar.html

<ul class="navbar">
    <li @@if (context.index===‘active‘ ) { class="active" }>
        <a href="index.html">首页</a>
    </li>
    <li @@if (context.about===‘active‘ ) { class="active" }>
        <a href="about.html">关于</a>
    </li>
    <li @@if (context.contact===‘active‘ ) { class="active" }>
        <a href="contact.html">联系我们</a>
    </li>
</ul>

编译结果:

<!DOCTYPE html>
<html>
  <body>
  <ul class="navbar">
      <li  class="active" >
          <a href="index.html">首页</a>
      </li>
      <li >
          <a href="about.html">关于</a>
      </li>
      <li >
          <a href="contact.html">联系我们</a>
      </li>
  </ul>
  </body>
</html>

面包屑

面包屑也是常用的功能,不过有些时候并不需要前端构建的方式生成,在此作为一个案例来说明吧。生成面包屑的方法很多,我使用了传参的方法,通过传递一个导航路径数组,然后循环生成面包屑。因为面包屑的最后一项没有连接,所以循环要分两次执行。具体方法如下:

index.html

<!DOCTYPE html>
<html>
  <body>
    @@include(‘./breadcrumb.html‘,{
        "title":"首页",
        "breadcrumb":[{
            "url":"...",
            "text":"首页"
        },{
            "url":"...",
            "text":"链接一"
        },{
            "url":"",
            "text":"链接二"
        }]
    })
  </body>
</html>

breadcrumb.html

<div class="page-header">
    <h2>@@title</h2>
    <ol class="breadcrumb">
    @@for (var i = 0; i < (context.breadcrumb.length-1); i++) {
        <li><a href="`+context.breadcrumb[i].url+`">`+context.breadcrumb[i].text+`</a></li>
    }
    <!-- 面包屑最后一项无链接 -->
    @@for (var i = (context.breadcrumb.length-1); i < context.breadcrumb.length; i++) {
        <li><strong>`+context.breadcrumb[i].text+`</strong></li>
    }
    </ol>
</div>

编译结果:

<!DOCTYPE html>
<html>
  <body>
  <div class="page-header">
      <h2>首页</h2>
      <ol class="breadcrumb">

          <li><a href="...">首页</a></li>

          <li><a href="...">链接一</a></li>

      <!-- 面包屑最后一项无链接 -->

          <li><strong>链接二</strong></li> 

      </ol>
  </div>
  </body>
</html>

结论

gulp-file-include 插件的使用非常简单,如果实际项目中遇到更复杂的情况,还需要仔细阅读官方文档,也可以在 Github 的 Issues 中寻找答案!

时间: 2024-11-04 23:44:32

使用 gulp-file-include 构建前端静态页面的相关文章

使用gulp自动化打包合并前端静态资源(CSS、JS文件压缩、添加版本号)

现在正在做的项目更新迭代比较频繁,会经常对前端代码打包部署,手动整合代码文件很麻烦并且浪费时间,所以决定使用gulp来代替手工完成这项工作. 前端静态资源在发版更新时会面临客户端浏览器缓存的问题(可参考这篇文章),解决这个问题可以采用两类方法:覆盖方法(引用资源时加版本号,不修改资源文件名).非覆盖方法(修改资源文件名),本篇文章主要采用的是第一种加版本号的方式,主要用gulp给静态资源自动加版本号和压缩CSS.JS. 原理:通过对JS,CSS文件内容进行Hash运算,生成一个文件的唯一Hash

用gulp替代fekit构建前端项目

https://segmentfault.com/a/1190000003060016 离开qunar有一个多月了,在离开的时候就决定不再用fekit.做出这个决定并不是因为fekit不好,恰恰相反,fekit帮我们做了很多事情,还屏蔽了许多细节,让开发人员能够专注于开发过程.不过随着fekit的升级,也出现了一些问题,同时fekit和公司业务及发布流程有一定耦合,所以觉得采用开源的构建方案. 在使用gulp的过程中,基本也是依据使用fekit的思路来逐步完善构建过程的,所以还是要感谢fekit

iviewUI 前端静态页面实现增删改查分页

完整代码部分 (仅供参考哈): 1 <template> 2 <div> 3 <label prop="name"> 姓名: </label> 4 <Input v-model="companyName" id="pp" style="width: 120px" placeholder="请输入" />   5 <Button @click=

做前端静态页面可以用到的一些属性

border-radius        边框圆角                            像素和百分比 box-shadow            边框阴影            box-shadow:10px 10px 10px 10px red;            1.水平偏移x值        可以为负            2.垂直偏移值        可以为负            3.阴影的模糊值        不可为负            4.阴影的外延值  

DataTables学习:从最基本的入门静态页面,使用ajax调用Json本地数据源实现前端开发深入学习,根据后台数据接口替换掉本地的json本地数据,以及报错的处理地方,8个例子(显示行附加信息,回调使用api,动态显示和隐藏列...),详细教程

一.DataTables  个人觉得学习一门新的插件或者技术时候,官方文档是最根本的,入门最快的地方,但是有时候看完官方文档,一步步的动手写例子,总会出现各种莫名其妙的错误,需要我们很好的进行研究出错的地方. 官方网站(中文):http://datatables.club/ 官方网站:https://www.datatables.net/  二.简单的例子 怎样简单地使用DataTables?使用下方简单的几行代码,一个方法初始化table. $(document).ready(function

前端自动化流程工具_gulp_静态页面构建

合并文件.压缩.雪碧图 1.安装gulp环境 2.完整目录结构如下: css:.less/.sass源文件 html:静态页面文件 img:不需要合并的图标 slice:需要生成雪碧图的图标 publish:开发时引用的文件(自动生成) release:发布的文件(自动生成) gulpfile.js/package.json gulp配置文件 3. 目录结构建好之后,调用npm install下载package.json文件中定义好的插件

[转]gulp构建前端工程

摘要: Gulp 是一个自动化工具,前端开发者可以使用它来处理常见任务: 搭建web服务器 文件保存时自动重载浏览器 使用预处理器如Sass.LESS 优化资源,比如压缩CSS.JavaScript.压缩图片 当然Gulp能做的远不止这些.如果你够疯狂,你甚至可以使用它搭建一个静态页面生成器.Gulp真的足够强大,但你必须学会驾驭它. 这是这篇文章的主要目的.帮助你了解Gulp的基础用法,助你早日完成一统天下的大业. 在我们深入了解之前,我们先来说说为什么是Gulp. 为什么是Gulp? 类似G

Gulp安装及配合组件构建前端开发一体化

所有功能前提需要安装nodejs(本人安装版本v0.10.26)和ruby(本人安装版本1.9.3p484). Gulp 是一款基于任务的设计模式的自动化工具,通过插件的配合解决全套前端解决方案,如静态页面压缩.图片压缩.JS合并.SASS同步编译并压缩CSS.服务器控制客户端同步刷新. Gulp安装 全局安装Gulpjs npm install -g gulp  #全局安装 局部安装Gulpjs npm install gulp --save-dev # 局部安装 全局安装 1. 将安装包放在

Gulp构建前端自动化工作流之:常用插件介绍及使用

在对Gulp有了一个初步的了解之后,我们开始构建一个较为完整的Gulp开发环境. 本文主要分为6个段落: 1. 构建项目目录结构(Directory Structure Build) 2. 插件介绍及使用方法(Tasks and dependencies) 3. 扩展优化(Extend & Optimize Task) 4. 其他插件介绍(Other plug-ins) 5. 匹配规则(Match Files) 6. 注意事项(Attention) 关于Gulp的入门介绍及安装方法,可先去 <