【gulp】002.gulp实现页面复用,导航栏样式激活

系列文章

【gulp】001.使用gulp自动构建前端页面实现页面复用
【gulp】002.gulp实现页面复用,导航栏样式激活
【gulp】003.编译less 使用autoprefixer增加前缀 使用babel转换 生成sourcemap
设定src下includes目录为被引入文件

注册任务

gulp.task("include", () => {
  //传入的文件,可使用通配符
  return gulp.src("src/**/*.html")
  	//交给gulp-fil-include操作
    .pipe(fileinclude({
      prefix: "@@",//include前缀
      basepath: "@file"//可查看官网文档
    }))
    //dest 输出到目录
    .pipe(gulp.dest("dist/"))
})

在src目录下创建inde.html,创建includes文件夹,includes目录下创建nav.html
index.html:引入includes中的nav

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  @@include("includes/nav.html")
</body>
</html>

nav.html

<ul>
  <li>Index</li>
  <li>Home</li>
  <li>About</li>
</ul>

执行gulp include命令
会发现目录下出现了一个dist文件夹,其中包含了index.html和includes目录
查看构建的dist下的index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <ul>
  <li>Index</li>
  <li>Home</li>
  <li>About</li>
</ul>
</body>
</html>

能看到nav.html文件中的内容合并到了index.html中

排除文件

能够发现,构建出的文件包含了includes目录,这显然是我们不太愿意看到的。
在此之前,需要先明白为什么includes目录也被输出到dist目录中:

 gulp.src("src/**/*.html")

这里我们使用了src/**/*.html来匹配src目录下所有的html文件,因此也将includes包含进去了,为了不将includes包含进去,有两种做法,一种是修改includes文件的后缀,一种是排除includes目录。
先把dist目录删除
方法一记得修改@@include中的文件名。
方法二即是在src中添加参数排除includes目录
在路径前加入!即是排除此文件

gulp.src(["src/**/*.html","!src/includes/**"])

重要的一点 目录规则

很多人搞不清楚为什么构建后的目录少了文件夹,这里我们做个简单对比
现在项目结构为:

gulp-project
|   1.txt
|   gulpfile.js
|   package-lock.json
|   package.json
|           
\---src
    |   about.html
    |   home.html
    |   index.html
    |   
    +---css
    |       index.less
    |       
    +---includes
    |       nav.html
    |       
    \---js
        |   index.js
        |
        +---aaa
        |      aaa.js

代码一:

gulp.task("js1", () => {
  return gulp.src("src/js/**")
    .pipe(gulp.dest("dist/"))
})

执行后的结果

dist
|   index.js
|
\---aaa
    |   aaa.js       

发现src目录中下js中的文件跑到dist下了

代码二

gulp.task("js2", () => {
  return gulp.src("src/**/*.js")
    .pipe(gulp.dest("dist/"))
})

dist
|
\---js
    |   index.js
    |
    \---aaa
        |   aaa.js       

代码一与代码二不同之处在于传入的路径不同
代码一是js目录下所有文件
代码二是src目录下所有js文件
gulp会将自通配符*之前的路径改为dist
解决这类问题的方法,第一种就是使用src/**这样的字符串,但是
第二种办法,就是在src中加入参数

gulp.task("js1", () => {
  return gulp.src("src/js/**", {
      base: "src"
    })
    .pipe(gulp.dest("dist/"))
})

需要根据不同情况去使用

传递参数 添加样式

在include文件时,可以为其添加参数

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    li.active {
      color: #ff6600;
    }
  </style>
</head>
<body>
  @@include("includes/nav.html",{active:"index"})
</body>
</html>

在nav.html中接受参数并判断

<ul>
  <li @@if(context.active==="index"){class="active"}>Index</li>
  <li @@if(context.active==="home"){class="active"}>Home</li>
  <li @@if(context.active==="about"){class="active"}>About</li>
</ul>

模仿index.html创建home和about文件,使用不同参数引入nav.html,内容省略。
在这里插入图片描述

about.html
查看构建生成的文件,发现加上了对应的class

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    li.active {
      color: #ff6600;
    }
  </style>
</head>

<body>
  <ul>
  <li >Index</li>
  <li >Home</li>
  <li class="active">About</li>
</ul>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值