• 使用gulp助力前端自动化


    🚀 优质资源分享 🚀

    学习路线指引(点击解锁)知识定位人群定位
    🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
    💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

    前言

    随着前端诸如webpack,rollup,vite的发展,gulp感觉似乎好像被取代了。其实并没有,只不过它从台前退居到了幕后。我们仍然可以在很多项目中看到它的身影,比如elementplus、vant等。现在gulp更多的是做流程化的控制。

    比如我们要把一个大象放进冰箱里就需要 打开冰箱门->把大象放进冰箱->关上冰箱门,这就是一个简单的流程,使用gulp就可以规定这些流程,将这个流程自动化,并自动执行这个流程。

    所以我们可以使用它在项目开发过程中自动执行常见任务。比如打包一个组件库,我们可能要移除文件、copy文件,打包样式、打包组件、执行一些命令还有一键打包多个package等等都可以由gulp进行自定义流程的控制,非常的方便。

    本文将主要介绍gulp的一些常用功能

    安装gulp

    首先全局安装gulp的脚手架

    npm install --global gulp-cli
    
    
    • 1
    • 2

    然后我们新建文件夹gulpdemo,然后执行 npm init -y,然后在这个项目下安装本地依赖gulp

    npm install gulp -D    
    
    
    • 1
    • 2

    此时我们gulp便安装好了,接下来我们在根目录下创建gulpfile.js文件,当gulp执行的时候会自动寻找这个文件。

    创建一个任务Task

    每个gulp任务(task)都是一个异步的JavaScript函数,此函数是一个可以接收callback作为参数的函数,或者返回一个Promise等异步操作对象,比如创建一个任务可以这样写

    exports.default = (cb) => {
      console.log("my task");
      cb();
    };
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    或者这样写

    exports.default = () => {
      console.log("my task");
      return Promise.resolve();
    };
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    然后终端输入gulp就会执行我们这个任务

    串行(series)和并行(parallel)

    这两个其实很好理解,串行就是任务一个一个执行,并行就是所有任务一起执行。下面先看串行演示

    const { series, parallel } = require("gulp");
    
    const task1 = () => {
      console.log("task1");
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve();
        }, 5000);
      });
    };
    const task2 = () => {
      console.log("task2");
      return Promise.resolve();
    };
    
    exports.default = series(task1, task2);
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    控制台输出结果如下

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UkV6IOMx-1659069626189)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/004e4de43da446b2863c0f361c676f62~tplv-k3u1fbpfcp-watermark.image?)]

    可以看出执行task1用了5s,然后再执行task2,再看下并行

    const { series, parallel } = require("gulp");
    
    const task1 = () => {
      console.log("task1");
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve();
        }, 5000);
      });
    };
    const task2 = () => {
      console.log("task2");
      return Promise.resolve();
    };
    
    exports.default = parallel(task1, task2);
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uvTBHygC-1659069626192)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/60b5c9fb35584efb8cc4e80f1027d221~tplv-k3u1fbpfcp-watermark.image?)]

    可以看出两个任务是同时执行的

    src()和dest()

    src()和dest()这两个函数在我们实际项目中经常会用到。src()表示创建一个读取文件系统的流,dest()是创建一个写入到文件系统的流。我们直接写一个copy 的示例

    复制

    在写之前我们先在我们项目根目录下新建一个src目录用于存放我们被复制的文件,在src下随便新建几个文件,如下图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LZiKnmjO-1659069626193)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6f0a59a1ec7e45fd9690be15dc5a2187~tplv-k3u1fbpfcp-watermark.image?)]

    然后我们在gulpfile.js写下我们的copy任务:将src下的所有文件复制到dist文件夹下

    const { src, dest } = require("gulp");
    
    const copy = () => {
      return src("src/*").pipe(dest("dist/"));
    };
    
    exports.default = copy;
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    然后执行gulp(默认执行exports.default),我们就会发现根目录下多了个dist文件夹

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x7UiopM3-1659069626194)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8d2b95ad250947ea9ecb8e5e7c5a1088~tplv-k3u1fbpfcp-watermark.image?)]

    处理less文件

    下面我们写个处理less文件的任务,首先我们先安装gulp-less

    npm i -D gulp-less
    
    
    • 1
    • 2
    然后我们在src下新建一个style/index.less并写下一段less语法样式
    
    
    • 1
    • 2
    @color: #fff;
    .wrap {
      color: @color;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    然后gulpfile.js写下我们的lessTask:将我们style下的less文件解析成css并写入dist/style中

    const { src, dest } = require("gulp");
    const less = require("gulp-less");
    const lessTask = () => {
      return src("src/style/*.less").pipe(less()).pipe(dest("dist/style"));
    };
    
    exports.default = lessTask;
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    然后我们执行gulp命令就会发现dist/style/index.css

    .wrap {
      color: #fff;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    我们还可以给css加前缀

    npm install gulp-autoprefixe -D
    
    
    • 1
    • 2

    将我们的src/style/index.less改为

    @color: #fff;
    .wrap {
      color: @color;
      display: flex;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    然后在gulpfile.js中使用gulp-autoprefixe

    const { src, dest } = require("gulp");
    const less = require("gulp-less");
    const autoprefixer = require("gulp-autoprefixer");
    const lessTask = () => {
      return src("src/style/*.less")
        .pipe(less())
        .pipe(
          autoprefixer({
            overrideBrowserslist: ["> 1%", "last 2 versions"],
            cascade: false, // 是否美化属性值
          })
        )
        .pipe(dest("dist/style"));
    };
    
    exports.default = lessTask;
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    处理后的dist/style/index.css就变成了

    .wrap {
      color: #fff;
      display: -webkit-box;
      display: -ms-flexbox;
      display: flex;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    监听文件更改browser-sync

    browser-sync是一个十分好用的浏览器同步测试工具,它可以搭建静态服务器,监听文件更改,并刷新页面(HMR),下面来看下它的使用

    首先肯定要先安装

    npm i browser-sync -D 
    
    
    • 1
    • 2

    然后我们在根目录下新建index.html

    html>
    
    
        
        
        
        Documenttitle>
    head>
    <body>
            hello world
    body>
    html>
    
    <div class="hljs-button signin" data-title="登录后复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li></ul></pre> 
    <p>然后在<strong>gulpfile.js</strong>中进行配置</p> 
    <pre data-index="18" class="prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">const browserSync = require("browser-sync");
    const browserTask = () => {
      browserSync.init({
        server: {
          baseDir: "./",
        },
      });
    };
    
    exports.default = browserTask;
    
    
    
    <div class="hljs-button signin" data-title="登录后复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li></ul></pre> 
    <p>这时候就会启动一个默认3000端口的页面. 下面我们看如何监听页面变化。</p> 
    <p>首先我们要监听文件的改变,可以使用browserSync的watch,监听到文件改变后再刷新页面</p> 
    <pre data-index="19" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">const { watch } = require("browser-sync");
    const browserSync = require("browser-sync");
    const { series } = require("gulp");
    
    const reloadTask = () => {
      browserSync.reload();
    };
    
    const browserTask = () => {
      browserSync.init({
        server: {
          baseDir: "./",
        },
      });
      watch("。/*", series(reloadTask));
    };
    
    exports.default = browserTask;
    
    
    <div class="hljs-button signin" data-title="登录后复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://1000bd.com/contentImg/2022/06/27/191644837.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li></ul></pre> 
    <p>此时改动src下的文件浏览器便会刷新。</p> 
    <p>下面我们将index.html引入dist/style/index.css的样式,然后来模拟一个简单的构建流</p> 
    <pre data-index="20" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Documenttitle>
        <link rel="stylesheet" href="../dist/style/index.css" />
      head>
      <body>
        <div class="wrap">hello worlddiv>
      body>
    html>
    
    
    
    <div class="hljs-button signin" data-title="登录后复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://1000bd.com/contentImg/2022/06/27/191644837.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li></ul></pre> 
    <p>此时我们的流程是 <strong>编译less文件</strong>-><strong>将css写入dist/style</strong>-><strong>触发页面更新</strong></p> 
    <p>我们<strong>gulpfile.js</strong>可以这样写</p> 
    <pre data-index="21" class="set-code-hide prettyprint"><code class="has-numbering" onclick="mdcp.signin(event)" style="position: unset;">const { src, dest } = require("gulp");
    const { watch } = require("browser-sync");
    const browserSync = require("browser-sync");
    const { series } = require("gulp");
    const less = require("gulp-less");
    const autoprefixer = require("gulp-autoprefixer");
    const lessTask = () => {
      return src("src/style/*.less")
        .pipe(less())
        .pipe(
          autoprefixer({
            overrideBrowserslist: ["> 1%", "last 2 versions"],
            cascade: false, // 是否美化属性值
          })
        )
        .pipe(dest("dist/style"));
    };
    //页面刷新
    const reloadTask = () => {
      browserSync.reload();
    };
    
    const browserTask = () => {
      browserSync.init({
        server: {
          baseDir: "./",
        },
      });
      watch("./*.html", series(reloadTask));
      //监听样式更新触发两个任务
      watch("src/style/*", series(lessTask, reloadTask));
    };
    
    exports.default = browserTask;
    
    <div class="hljs-button signin" data-title="登录后复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://1000bd.com/contentImg/2022/06/27/191644837.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li><li style="color: rgb(153, 153, 153);">30</li><li style="color: rgb(153, 153, 153);">31</li><li style="color: rgb(153, 153, 153);">32</li><li style="color: rgb(153, 153, 153);">33</li><li style="color: rgb(153, 153, 153);">34</li><li style="color: rgb(153, 153, 153);">35</li></ul></pre> 
    <p>此时无论我们更改的是样式还是html都可以触发页面更新。</p> 
    <h2><a name="t9"></a><a id="_463"></a>最后</h2> 
    <p>后面我会将正在开发的vue3组件库的样式打包部分使用gulp处理,如果你对组件库开发感兴趣的话可以关注我,后续会实现一些常用组件,并以文章形式呈现。</p> 
    <blockquote> 
     <p>创作不易,你的点赞就是我的动力!如果感觉这篇文章对你有帮助的话就请点个赞吧,感谢~</p> 
    </blockquote>
                    </div>
                        </div>
                    </li>
    
                    <li class="list-group-item ul-li">
    
                        <b>相关阅读:</b><br>
                        <nobr>
    <a href="/Article/Index/808916">读写信号量</a>                            <br />
    <a href="/Article/Index/1365421">10.12作业</a>                            <br />
    <a href="/Article/Index/948802">springboot整合Rocketmq</a>                            <br />
    <a href="/Article/Index/1422619">Docker Harbor概述及构建</a>                            <br />
    <a href="/Article/Index/759674">Week 7 CNN Architectures - LeNet-5、AlexNet、VGGNet、GoogLeNet、ResNet</a>                            <br />
    <a href="/Article/Index/902263">【Spring事务】事务和事务传播机制</a>                            <br />
    <a href="/Article/Index/1283539">Python实现自主售卖机</a>                            <br />
    <a href="/Article/Index/1261969">cadence后仿真/寄生参数提取/解决pin口提取不全的问题</a>                            <br />
    <a href="/Article/Index/1505215">前端css、js、bootstrap、vue2.x、ajax查漏补缺(1)</a>                            <br />
    <a href="/Article/Index/1275185">【设计模式】桥接模式在开发中的应用</a>                            <br />
                        </nobr>
                    </li>
                    <li class="list-group-item from-a mb-2">
                        原文地址:https://blog.csdn.net/qq_43479892/article/details/126053321
                    </li>
    
                </ul>
            </div>
    
            <div class="col-lg-4 col-sm-12">
                <ul class="list-group" style="word-break:break-all;">
                    <li class="list-group-item ul-li-bg" aria-current="true">
                        最新文章
                    </li>
                    <li class="list-group-item ul-li">
                        <nobr>
    <a href="/Article/Index/1484446">攻防演习之三天拿下官网站群</a>                            <br />
    <a href="/Article/Index/1515268">数据安全治理学习——前期安全规划和安全管理体系建设</a>                            <br />
    <a href="/Article/Index/1759065">企业安全 | 企业内一次钓鱼演练准备过程</a>                            <br />
    <a href="/Article/Index/1485036">内网渗透测试 | Kerberos协议及其部分攻击手法</a>                            <br />
    <a href="/Article/Index/1877332">0day的产生 | 不懂代码的"代码审计"</a>                            <br />
    <a href="/Article/Index/1887576">安装scrcpy-client模块av模块异常,环境问题解决方案</a>                            <br />
    <a href="/Article/Index/1887578">leetcode hot100【LeetCode 279. 完全平方数】java实现</a>                            <br />
    <a href="/Article/Index/1887512">OpenWrt下安装Mosquitto</a>                            <br />
    <a href="/Article/Index/1887520">AnatoMask论文汇总</a>                            <br />
    <a href="/Article/Index/1887496">【AI日记】24.11.01 LangChain、openai api和github copilot</a>                            <br />
                        </nobr>
                    </li>
                </ul>
    
                <ul class="list-group pt-2" style="word-break:break-all;">
                    <li class="list-group-item ul-li-bg" aria-current="true">
                        热门文章
                    </li>
                    <li class="list-group-item ul-li">
                        <nobr>
    <a href="/Article/Index/888177">十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!</a>                            <br />
    <a href="/Article/Index/797680">奉劝各位学弟学妹们,该打造你的技术影响力了!</a>                            <br />
    <a href="/Article/Index/888183">五年了,我在 CSDN 的两个一百万。</a>                            <br />
    <a href="/Article/Index/888179">Java俄罗斯方块,老程序员花了一个周末,连接中学年代!</a>                            <br />
    <a href="/Article/Index/797730">面试官都震惊,你这网络基础可以啊!</a>                            <br />
    <a href="/Article/Index/797725">你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法</a>                            <br />
    <a href="/Article/Index/797702">心情不好的时候,用 Python 画棵樱花树送给自己吧</a>                            <br />
    <a href="/Article/Index/797709">通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!</a>                            <br />
    <a href="/Article/Index/797716">13 万字 C 语言从入门到精通保姆级教程2021 年版</a>                            <br />
    <a href="/Article/Index/888192">10行代码集2000张美女图,Python爬虫120例,再上征途</a>                            <br />
                        </nobr>
                    </li>
                </ul>
    
            </div>
        </div>
    </div>
    <!-- 主体 -->
    
    
        <!--body结束-->
        <!--这里是footer模板-->
        
        <!--footer-->
    <nav class="navbar navbar-inverse navbar-fixed-bottom">
        <div class="container">
            <div class="row">
                <div class="col-md-12">
                    <div class="text-muted center foot-height">
                        Copyright © 2022 侵权请联系<a href="mailto:2656653265@qq.com">2656653265@qq.com</a>   
                        <a href="https://beian.miit.gov.cn/" target="_blank">京ICP备2022015340号-1</a>
                    </div>
                    <div style="width:300px;margin:0 auto; padding:0px 5px;">
                        <a href="/regex.html">正则表达式工具</a>
                        <a href="/cron.html">cron表达式工具</a>
                        <a href="/pwdcreator.html">密码生成工具</a>
                    </div>
                    <div style="width:300px;margin:0 auto; padding:5px 0;">
                        <a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010502049817" style="display:inline-block;text-decoration:none;height:20px;line-height:20px;">
                        <img src="" style="float:left;" /><p style="float:left;height:20px;line-height:20px;margin: 0px 0px 0px 5px; color:#939393;">京公网安备 11010502049817号</p></a>
                    </div>
                </div>
            </div>
        </div>
      
    </nav>
    <!--footer-->
    
        <!--footer模板结束-->
    
        <script src="/js/plugins/jquery/jquery.js"></script>
        <script src="/js/bootstrap.min.js"></script>
    
        <!--这里是scripts模板-->
        
    
        
     
    
    
        <!--scripts模板结束-->
    
    </body>
    </html>