散落 發表於 2021-10-20 16:12:00

docsify + Gitee Pages服务搭建开源项目网站

<h2>  前言</h2>
<p>  base-admin从开源至今,已经收获了2k Stat,而我们一直都没有一份像样的在线文档,最近写了一个博客园随笔备份Java脚本,将博客随笔备份到本地,格式是md文档格式,就有意去找将md文档转成html的工具,最后选用了下面这个文档网站生成器,经过一段时间的学习、编写文档,配合Gitee Pages服务,重要有了一个像样的项目网站</p>
<p>  https://huanzi-qch.gitee.io/base-admin</p>
<p><img src="https://img2020.cnblogs.com/blog/1353055/202110/1353055-20211020115523016-1687853085.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/1353055/202110/1353055-20211020115742774-294714999.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>  文档网站生成器</h2>
<div id="LC2" class="line"><span class="c">   docsify 一个神奇的文档网站生成器,官网:https://docsify.js.org</span></div>
<div class="line"><span class="c">  docsify 可以快速帮你生成文档网站。不同于 GitBook、Hexo 的地方是它不会生成静态的 .html 文件,所有转换工作都是在运行时。如果你想要开始使用它,只需要创建一个 index.html 就可以开始编写文档并直接部署在 GitHub Pages。</span></div>
<div class="line">  特性</div>
<div class="line">
<ul>
<li>无需构建,写完文档直接发布</li>
<li>容易使用并且轻量 (压缩后 ~21kB)</li>
<li>智能的全文搜索</li>
<li>提供多套主题</li>
<li>丰富的 API</li>
<li>支持 Emoji</li>
<li>兼容 IE11</li>
<li>支持服务端渲染 SSR&nbsp;</li>
</ul>
</div>
<div class="line">&nbsp;</div>
<div class="line"><span class="c">  可以选择使用脚手架来快速初始化文件</span></div>
<div class="line">
<div class="cnblogs_code">
<pre>npm i docsify-cli -g</pre>
</div>
<p>  也可以手动创建文件,一个index.html入口页面,一个README.md文档,还有一个.nojekyll的文件</p>
<p><img src="https://img2020.cnblogs.com/blog/1353055/202110/1353055-20211020120251941-1504851705.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;  把这些文件丢到tomcat或者nginx中,把容器运行起来就可以访问!</p>
</div>
<div class="line">&nbsp;</div>
<div class="line"><span class="c">  docsify可以高度定制化,同时也有着丰富的插件列表</span></div>
<div class="line"><span class="c"><span class="c"><span class="c"><img src="https://img2020.cnblogs.com/blog/1353055/202110/1353055-20211020120850697-2144052952.png" alt="" loading="lazy"></span></span></span>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<h2 class="ui header">  Gitee Pages服务</h2>
<p>  有人说你为什么不买个服务器、域名?搞开源嘛就是用爱发电,能白嫖就白嫖,不寒碜!</p>
<p>  同时,为了节省仓库空间,文档中部分图片是直接引用博客园博客里面的图片地址,因此要做反防盗链处理</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">img图片反防盗链,给所有img标签都加上referrerPolicy属性</span>
<span style="color: rgba(0, 0, 255, 1)">for</span>(let img of document.getElementsByTagName('img'<span style="color: rgba(0, 0, 0, 1)">)){
    img.setAttribute(</span>'referrerPolicy','no-referrer'<span style="color: rgba(0, 0, 0, 1)">);
}</span></pre>
</div>
<p>&nbsp;</p>
<p>  在gitee上创建一个与用户名同名的私有仓库,创建一个文件夹存放docsify相关文件</p>
<p><img src="https://img2020.cnblogs.com/blog/1353055/202110/1353055-20211020113541294-824272925.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;  部署gitee pages服务</p>
<p><img src="https://img2020.cnblogs.com/blog/1353055/202110/1353055-20211020113447993-1623586112.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;  这样我们的项目网站就部署成功了!</p>
<p>&nbsp;</p>
<h2>  封装</h2>
<p>  为了方便其他地方也使用同一份配置,我封装了自己的mydocsify.js、mydocsify.css脚本页面访问统计</p>
<p>  封装css</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 侧边栏 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
.sidebar{
    padding: 25px </span>0 0 !<span style="color: rgba(0, 0, 0, 1)">important;
}

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 自定义右侧目录 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
.catalogue{
    display: block;
    overflow: hidden;
    position: fixed;
    right: 15px;
    top: 100px;
    padding: 15px 30px;
    background: white;
    color: rgb(</span>102, 102, 102<span style="color: rgba(0, 0, 0, 1)">);
    border: 1px solid rgb(</span>221, 221, 221<span style="color: rgba(0, 0, 0, 1)">);
    border</span>-<span style="color: rgba(0, 0, 0, 1)">radius: 4px;
    line</span>-<span style="color: rgba(0, 0, 0, 1)">height: 42px;
    font</span>-<span style="color: rgba(0, 0, 0, 1)">size: 16px;
    text</span>-<span style="color: rgba(0, 0, 0, 1)">align: center;
    box</span>-shadow: rgb(238 238 238<span style="color: rgba(0, 0, 0, 1)">) 0px 0px 6px;
    cursor: pointer;
}
.catalogue</span>-<span style="color: rgba(0, 0, 0, 1)">h2{
    display: block;
    text</span>-<span style="color: rgba(0, 0, 0, 1)">decoration: none;
    color: #505d6b;
    margin</span>-<span style="color: rgba(0, 0, 0, 1)">left: 0px;
    font</span>-<span style="color: rgba(0, 0, 0, 1)">size: 14px;
    line</span>-<span style="color: rgba(0, 0, 0, 1)">height: 25px;
    text</span>-<span style="color: rgba(0, 0, 0, 1)">align: left;
}
.catalogue</span>-<span style="color: rgba(0, 0, 0, 1)">h3{
    display: block;
    text</span>-<span style="color: rgba(0, 0, 0, 1)">decoration: none;
    color: #505d6b;
    margin</span>-<span style="color: rgba(0, 0, 0, 1)">left: 20px;
    font</span>-<span style="color: rgba(0, 0, 0, 1)">size: 14px;
    line</span>-<span style="color: rgba(0, 0, 0, 1)">height: 25px;
    text</span>-<span style="color: rgba(0, 0, 0, 1)">align: left;
}

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 首页按钮 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
section.cover .cover</span>-main &gt; p:last-<span style="color: rgba(0, 0, 0, 1)">child a {
    border</span>-radius: 0.5rem !<span style="color: rgba(0, 0, 0, 1)">important;
}</span></pre>
</div>
<p>&nbsp;</p>
<p>  封装js</p>
<div class="cnblogs_code">
<pre>let body =<span style="color: rgba(0, 0, 0, 1)"> document.body;
let head </span>=<span style="color: rgba(0, 0, 0, 1)"> document.head;

let logaPath </span>= 'https://huanzi-qch.gitee.io/file-server/images/logo.png'<span style="color: rgba(0, 0, 0, 1)">;
let nodeArray </span>=<span style="color: rgba(0, 0, 0, 1)"> [
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">logo</span>
    {tagName:'link',rel:'shortcut icon',type:'image/x-icon'<span style="color: rgba(0, 0, 0, 1)">,href:logaPath},
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">docsify脚本</span>
    {tagName:'link',rel:'stylesheet',href:'https://cdn.jsdelivr.net/npm/docsify/themes/vue.css'<span style="color: rgba(0, 0, 0, 1)">},
    {tagName:</span>'script',src:'https://cdn.jsdelivr.net/npm/docsify/lib/docsify.js'<span style="color: rgba(0, 0, 0, 1)">},
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">插件</span>
    {tagName:'script',src:'https://cdn.jsdelivr.net/npm/docsify/lib/plugins/zoom-image.min.js'<span style="color: rgba(0, 0, 0, 1)">},
    {tagName:</span>'script',src:'https://busuanzi.ibruce.info/busuanzi?jsonpCallback=BusuanziCallback'<span style="color: rgba(0, 0, 0, 1)">},
];

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">通用配置</span>
window.$docsify =<span style="color: rgba(0, 0, 0, 1)"> {
    name: </span>'huanzi-qch'<span style="color: rgba(0, 0, 0, 1)">,
    loadNavbar: </span><span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">导航栏</span>
    loadSidebar: <span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">目录栏</span>
    coverpage: <span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">封面</span>
    onlyCover: <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
    auto2top: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
    busuanzi_value:{
      site_uv: </span>0<span style="color: rgba(0, 0, 0, 1)">,
      page_pv: </span>0<span style="color: rgba(0, 0, 0, 1)">,
      site_pv: </span>0<span style="color: rgba(0, 0, 0, 1)">
    },
    plugins: [
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">底部版权声明</span>
      <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(hook, vm) {
            hook.beforeEach(</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(html) {
                let newHtml </span>= html +
                  "\n" +
                  "&lt;hr&gt;" +
                  <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">"&lt;a target='_blank' href=''&gt;&lt;/a&gt;&lt;br/&gt;" +</span>
                  "&lt;p&gt;AD广告位(长期招租,如有需要请私信)&lt;/p&gt;" +
                  "&lt;a target='_blank' href='https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ckkryd9h&amp;utm_source=ckkryd9h'&gt;【阿里云】新老用户同享,上云优化聚集地!&lt;/a&gt;&lt;br/&gt;" +
                  "&lt;a target='_blank' href='https://www.aliyun.com/activity?userCode=ckkryd9h'&gt;【阿里云】最新活动页,上新必买抢先知,劲爆优惠不错过!&lt;/a&gt;&lt;br/&gt;" +
                  "&lt;a target='_blank' href='https://www.aliyun.com/daily-act/ecs/activity_selection?userCode=ckkryd9h'&gt;【阿里云】轻量应用服务器2核2G 低至60元/年起!香港与海外服务器最低24元/月起!&lt;/a&gt;&lt;br/&gt;" +
                  "&lt;a target='_blank' href='https://www.aliyun.com/daily-act/ecs/care?userCode=ckkryd9h'&gt;【阿里云】ECS实例升级、续费,享低至 6.3折 限时折扣!&lt;/a&gt;&lt;br/&gt;" +
                  "&lt;a target='_blank' href='https://cloud.tencent.com/act/cps/redirect?redirect=1077&amp;cps_key=e1c9db729edccd479fc902634492bf53&amp;from=console'&gt;【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年74元!&lt;/a&gt;&lt;br/&gt;" +
                  "&lt;a target='_blank' href='https://cloud.tencent.com/act/cps/redirect?redirect=1068&amp;cps_key=e1c9db729edccd479fc902634492bf53&amp;from=console'&gt;【腾讯云】境外1核2G服务器低至2折,半价续费券限量免费领取!&lt;/a&gt;&lt;br/&gt;" +
                  "&lt;a target='_blank' href='https://cloud.tencent.com/act/cps/redirect?redirect=1063&amp;cps_key=e1c9db729edccd479fc902634492bf53&amp;from=console'&gt;【腾讯云】星星海SA2云服务器,1核2G首年99元起,高性价比首选!&lt;/a&gt;&lt;br/&gt;" +
                  "&lt;a target='_blank' href='https://cloud.tencent.com/act/cps/redirect?redirect=1060&amp;cps_key=e1c9db729edccd479fc902634492bf53&amp;from=console'&gt;【腾讯云】中小企业福利专场,多款刚需产品,满足企业通用场景需求,云服务器2.5折起!&lt;/a&gt;&lt;br/&gt;" +
                  "&lt;br/&gt;&lt;br/&gt;" +
                  "&lt;span style='float: left;'&gt;Copyright © 2021 - 至今 huanzi-qch&lt;/span&gt;" +
                  "&lt;span id='busuanzi_container_site_pv' style='float: right;'&gt;本站总访问量 &lt;span id='busuanzi_value_site_pv'&gt;"+window.$docsify.busuanzi_value.site_pv+"&lt;/span&gt; 次&lt;/span&gt;"<span style="color: rgba(0, 0, 0, 1)">;

                </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> newHtml;
            });
      },
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">返回顶部</span>
      <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(hook, vm) {
            </span><span style="color: rgba(0, 0, 255, 1)">var</span> CONFIG =<span style="color: rgba(0, 0, 0, 1)"> {
                auto: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
                text: </span>'Top'<span style="color: rgba(0, 0, 0, 1)">,
                right: </span>15<span style="color: rgba(0, 0, 0, 1)">,
                bottom: </span>140<span style="color: rgba(0, 0, 0, 1)">,
                offset: </span>500<span style="color: rgba(0, 0, 0, 1)">
            }
            </span><span style="color: rgba(0, 0, 255, 1)">var</span> opts = vm.config.scrollToTop ||<span style="color: rgba(0, 0, 0, 1)"> CONFIG;
            CONFIG.auto </span>= opts.auto &amp;&amp; <span style="color: rgba(0, 0, 255, 1)">typeof</span> opts.auto === "boolean" ?<span style="color: rgba(0, 0, 0, 1)"> opts.auto : CONFIG.auto;
            CONFIG.text </span>= opts.text &amp;&amp; <span style="color: rgba(0, 0, 255, 1)">typeof</span> opts.text === "string" ?<span style="color: rgba(0, 0, 0, 1)"> opts.text : CONFIG.text;
            CONFIG.right </span>= opts.right &amp;&amp; <span style="color: rgba(0, 0, 255, 1)">typeof</span> opts.right === "number" ?<span style="color: rgba(0, 0, 0, 1)"> opts.right : CONFIG.right;
            CONFIG.bottom </span>= opts.bottom &amp;&amp; <span style="color: rgba(0, 0, 255, 1)">typeof</span> opts.bottom === "number" ?<span style="color: rgba(0, 0, 0, 1)"> opts.bottom : CONFIG.bottom;
            CONFIG.offset </span>= opts.offset &amp;&amp; <span style="color: rgba(0, 0, 255, 1)">typeof</span> opts.offset === "number" ?<span style="color: rgba(0, 0, 0, 1)"> opts.offset : CONFIG.offset;
            </span><span style="color: rgba(0, 0, 255, 1)">var</span> onScroll = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(e) {
                </span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">CONFIG.auto) {
                  </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">
                }
                </span><span style="color: rgba(0, 0, 255, 1)">var</span> offset =<span style="color: rgba(0, 0, 0, 1)"> window.document.documentElement.scrollTop;
                </span><span style="color: rgba(0, 0, 255, 1)">var</span> $scrollBtn = Docsify.dom.find("span.scroll-to-top"<span style="color: rgba(0, 0, 0, 1)">);
                $scrollBtn.style.display </span>= offset &gt;= CONFIG.offset ? "block" : "none"<span style="color: rgba(0, 0, 0, 1)">
            };
            hook.mounted(</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
                </span><span style="color: rgba(0, 0, 255, 1)">var</span> scrollBtn = document.createElement("span"<span style="color: rgba(0, 0, 0, 1)">);
                scrollBtn.className </span>= "scroll-to-top"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.display </span>= CONFIG.auto ? "none" : "block"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.overflow </span>= "hidden"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.position </span>= "fixed"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.right </span>= CONFIG.right + "px"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.bottom </span>= CONFIG.bottom + "px"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.width </span>= "50px"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.height </span>= "50px"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.background </span>= "white"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.color </span>= "#666"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.border </span>= "1px solid #ddd"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.borderRadius </span>= "4px"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.lineHeight </span>= "42px"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.fontSize </span>= "16px"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.textAlign </span>= "center"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.boxShadow </span>= "0px 0px 6px #eee"<span style="color: rgba(0, 0, 0, 1)">;
                scrollBtn.style.cursor </span>= "pointer"<span style="color: rgba(0, 0, 0, 1)">;
                </span><span style="color: rgba(0, 0, 255, 1)">var</span> textNode =<span style="color: rgba(0, 0, 0, 1)"> document.createTextNode(CONFIG.text);
                scrollBtn.appendChild(textNode);
                document.body.appendChild(scrollBtn);
                window.addEventListener(</span>"scroll"<span style="color: rgba(0, 0, 0, 1)">, onScroll);
                scrollBtn.onclick </span>= <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(e) {
                  e.stopPropagation();
                  </span><span style="color: rgba(0, 0, 255, 1)">var</span> step = window.scrollY / 15<span style="color: rgba(0, 0, 0, 1)">;
                  </span><span style="color: rgba(0, 0, 255, 1)">var</span> scroll = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
                        window.scrollTo(</span>0, window.scrollY -<span style="color: rgba(0, 0, 0, 1)"> step);
                        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (window.scrollY &gt; 0<span style="color: rgba(0, 0, 0, 1)">) {
                            setTimeout(scroll, </span>15<span style="color: rgba(0, 0, 0, 1)">)
                        }
                  };
                  scroll()
                }
            })
      }
    ]
};

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">更新自定义右侧目录,以及反防盗链</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> update(url){
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">自动目录</span>
    let catalogue = document.getElementsByClassName('catalogue'<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 0, 255, 1)">if</span>(catalogue.length &lt;= 0<span style="color: rgba(0, 0, 0, 1)">){
      catalogue </span>= document.createElement('div'<span style="color: rgba(0, 0, 0, 1)">);
      catalogue.className </span>= 'catalogue'<span style="color: rgba(0, 0, 0, 1)">;
      body.append(catalogue);
    }</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
      catalogue </span>= catalogue;
      catalogue.innerHTML </span>= ""<span style="color: rgba(0, 0, 0, 1)">;
    }
    catalogue.style.display</span>='none'<span style="color: rgba(0, 0, 0, 1)">;

    setTimeout(</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">img图片反防盗链</span>
      <span style="color: rgba(0, 0, 255, 1)">for</span>(let img of document.getElementsByTagName('img'<span style="color: rgba(0, 0, 0, 1)">)){
            img.setAttribute(</span>'referrerPolicy','no-referrer'<span style="color: rgba(0, 0, 0, 1)">);
      }

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">自动目录</span>
      <span style="color: rgba(0, 0, 255, 1)">for</span>(let child of document.getElementById('main'<span style="color: rgba(0, 0, 0, 1)">).children){
            </span><span style="color: rgba(0, 0, 255, 1)">if</span>(child.nodeName === 'H2' || child.nodeName === 'H3'<span style="color: rgba(0, 0, 0, 1)">){
                let a </span>= document.createElement('a'<span style="color: rgba(0, 0, 0, 1)">);
                a.href </span>= url + "?id=" +<span style="color: rgba(0, 0, 0, 1)"> child.id;
                a.innerText </span>=<span style="color: rgba(0, 0, 0, 1)"> child.innerText;

                </span><span style="color: rgba(0, 0, 255, 1)">if</span>(child.nodeName === 'H2'<span style="color: rgba(0, 0, 0, 1)">){
                  a.className </span>= 'catalogue-h2'<span style="color: rgba(0, 0, 0, 1)">;
                }</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
                  a.className </span>= 'catalogue-h3'<span style="color: rgba(0, 0, 0, 1)">;
                }
                catalogue.append(a);
            }
      }
      catalogue.style.display</span>='block'<span style="color: rgba(0, 0, 0, 1)">;
    },</span>1000<span style="color: rgba(0, 0, 0, 1)">);
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不蒜子 页面访问统计回调</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> BusuanziCallback(data){
    window.$docsify.busuanzi_value </span>=<span style="color: rgba(0, 0, 0, 1)"> data;
    document.getElementById(</span>'busuanzi_value_site_pv').innerText =<span style="color: rgba(0, 0, 0, 1)"> window.$docsify.busuanzi_value.site_pv;
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">DOM加载完成执行</span>
(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (){
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">动态引入脚本</span>
    <span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)">(let node of nodeArray){
      let element </span>=<span style="color: rgba(0, 0, 0, 1)"> document.createElement(node.tagName);
      </span><span style="color: rgba(0, 0, 255, 1)">for</span>(let key <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> node){
            </span><span style="color: rgba(0, 0, 255, 1)">if</span>('tagName' !=<span style="color: rgba(0, 0, 0, 1)"> key){
                element </span>=<span style="color: rgba(0, 0, 0, 1)"> node;
            }
      }
      </span><span style="color: rgba(0, 0, 255, 1)">if</span>('link' ==<span style="color: rgba(0, 0, 0, 1)"> node.tagName){
            head.append(element);
      }</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
            body.append(element);
      }
    }


</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">离线模式</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">typeof</span> navigator.serviceWorker !== 'undefined'<span style="color: rgba(0, 0, 0, 1)">) {
    navigator.serviceWorker.register(</span>'https://huanzi-qch.gitee.io/file-server/files/docsify-sw.js'<span style="color: rgba(0, 0, 0, 1)">);
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">监听URL发生变化,是否生成自定义右侧目录</span>
    let url =<span style="color: rgba(0, 0, 0, 1)"> window.location.href;
    </span><span style="color: rgba(0, 0, 255, 1)">if</span>(url.indexOf('docs') !== -1<span style="color: rgba(0, 0, 0, 1)">){
      url </span>= window.location.hash.split("?");
      update(url);
    }
    window.onhashchange </span>= <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
      let hash </span>= window.location.hash.split("?");
      </span><span style="color: rgba(0, 0, 255, 1)">if</span>(hash != '#/' &amp;&amp; url.indexOf(hash) === -1<span style="color: rgba(0, 0, 0, 1)">){
            url </span>=<span style="color: rgba(0, 0, 0, 1)"> hash;
            update(url);
      }</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
            let catalogue </span>= document.getElementsByClassName('catalogue'<span style="color: rgba(0, 0, 0, 1)">);
            </span><span style="color: rgba(0, 0, 255, 1)">if</span>(window.location.href.indexOf("docs") === -1 &amp;&amp; catalogue.length &gt; 0<span style="color: rgba(0, 0, 0, 1)">){
                catalogue[</span>0<span style="color: rgba(0, 0, 0, 1)">].remove();
            }
      }
    };


})();</span></pre>
</div>
<p>  用的是快速统计插件不蒜子</p>
<p>&nbsp;</p>
<p>  封面的项目Star数,直接引用这两个图片链接即可(把项目地址&nbsp;<span style="color: rgba(255, 0, 0, 1)">huanzi-qch/base-admin</span> 换成自己的项目)&nbsp;</p>
<div class="cnblogs_code">
<pre>https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">img.shields.io/github/stars/huanzi-qch/base-admin.svg?style=social</span>
<span style="color: rgba(0, 0, 0, 1)">
https:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">gitee.com/huanzi-qch/base-admin/badge/star.svg</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1353055/202110/1353055-20211020162531789-1492539039.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>  巧了</h2>
<p>  巧了嘛这不是,把从博客园备份下来的《SpringBoot系列》、《SpringCloud系列》也直接丢到Gitee Pages服务,直接用我们封装好的docsify脚本,不就正好可以做成在线文档了!</p>
<p>  《SpringBoot系列》,https://huanzi-qch.gitee.io/spring-boot</p>
<p><img src="https://img2020.cnblogs.com/blog/1353055/202110/1353055-20211020160032874-244006859.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>  《SpringCloud系列》,https://huanzi-qch.gitee.io/spring-cloud</p>
<p><img src="https://img2020.cnblogs.com/blog/1353055/202110/1353055-20211020160115643-314113316.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>&nbsp;  后记</h2>
<p>  base-admin的文档,已经提交到项目中,欢迎大家一起参与编辑</p>
<p>&nbsp;</p>
<p>  后续有空再分享更多骚操作!</p>

</div>
<div id="MySignature" role="contentinfo">
   
<div>
        <h3>版权声明</h3>
        <div>作者:huanzi-qch</div>
        <div>出处:https://www.cnblogs.com/huanzi-qch</div>
        <div>若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.</div>
</div><br/>

<div>
        <h3><span style="color: #4f84b3;cursor: pointer;" onclick="window.open('https://huanzi-qch.github.io/file-server/ad/adservice.html', '_blank')" title="AD广告位服务说明">AD广告位</span>(长期招租,如有需要请私信)</h3>
       
        【阿里云】阿里云最全的优惠活动聚集地!<br/>
        【腾讯云】腾讯云当前最新优惠活动专区!<br/>
    <br/>
</div>

<div>
        <h3>捐献、打赏</h3>
        <div><span style="color: red">请注意:</span>相应的资金支持能更好的持续开源和创作,如果喜欢这篇文章,请随意打赏!</div>
        <div style="text-align: center;">
                <div style="
                        float: left;
                        margin-left: 200px;
                ">
                        <img style="width: 100px;" src="https://huanzi-qch.github.io/file-server/images/zhifubao.png"/>
                        <p>支付宝</p>
                </div>
                <div>
                        <img style="width: 100px;" src="https://huanzi-qch.github.io/file-server/images/weixin.png"/>
                        <p>微信</p>
                </div>
        </div>               
</div><br/>


<div>
        <h3>交流群</h3>
        <div style="text-align: center;">
                有事请加群,有问题进群大家一起交流!<br/>
                <img style="width: 300px;" src="https://huanzi-qch.github.io/file-server/images/qq.png"/>
        </div>
</div><br/><br><br>
来源:https://www.cnblogs.com/huanzi-qch/p/15428362.html
頁: [1]
查看完整版本: docsify + Gitee Pages服务搭建开源项目网站