PageSourceSearch

https://17lai.netlify.app/docs/

html 17lai.netlify.app collected 2026-10-03 10:22:35 UTC 75,145 bytes, 258 lines download raw bytes

1<!DOCTYPE HTML><html lang=zh-cn data-pagefind-filter=lang:zh-cn data-default-color-scheme=auto><head><meta http-equiv=Permissions-Policy content="fullscreen=*, geolocation=*, camera=*, microphone=*"><meta charset=utf-8>
2<!-- This site is hosted on Netlify. Anyone can build and deploy a site
3     like this one for free: https://netlify.new/?utm_campaign=loops&utm_source=ai-legible&utm_medium=owned&utm_content=comment&utm_id=db983aa5-ac84-4cfd-b5d4-27194838f575
4     Netlify hosting facts for this site: static/SSR served via Netlify Edge. --><link rel=canonical href=https://blog.17lai.site/docs/ ><meta name=keywords content="文档首页, hisilicon,刮削,matery,mp3tag,linux,calibre,devops,driver,embeded,hexo,html5,ccs3,joplin,wiz,debian,git,gitbook,vps,gitlab,qnap,pt,bt,mysql,baota,vim,ai,docker,blog,note,nas"><meta name=description content=~软件驱动世界~个人独立技术博客,关于Linux,开源,Nas,Docker,嵌入式,理财,健身等主题!><meta property=og:type content=website><meta property=og:title content="文档首页 | 夜法之书"><meta property=og:url content=https://blog.17lai.site/docs/ ><meta property=og:site_name content=夜法之书><meta property=og:description content=~软件驱动世界~个人独立技术博客,关于Linux,开源,Nas,Docker,嵌入式,理财,健身等主题!><meta property=og:image content=/medias_webp/featureimages/0.webp><meta name=twitter:card content=summary_large_image><meta name=twitter:title content="文档首页 | 夜法之书"><meta name=twitter:description content=~软件驱动世界~个人独立技术博客,关于Linux,开源,Nas,Docker,嵌入式,理财,健身等主题!><meta name=twitter:image content=/medias_webp/featureimages/0.webp><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><meta name=renderer content=webkit|ie-stand|ie-comp><meta name=mobile-web-app-capable content=yes><meta name=format-detection content="telephone=no"><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=black-translucent><meta name=apple-mobile-web-app-title content=夜法之书><meta name=theme-color content=#7e9fc4><meta name=msapplication-TileImage content=/medias/icons/android-chrome-192x192.png><meta name=msapplication-TileColor content=#7e9fc4><meta http-equiv=Content-Security-Policy content="default-src * vitals.vercel-insights.com 'unsafe-inline' 'unsafe-eval'; script-src * 'unsafe-inline' 'unsafe-eval' blob:; connect-src * 'unsafe-inline'; img-src * data: blob: 'unsafe-inline'; font-src * data: blob: 'unsafe-inline'; worker-src * 'self' blob: data:; frame-src *; style-src * 'unsafe-inline';"><link rel=apple-touch-icon href=/medias/icons/apple-touch-icon.png><link rel=mask-icon href=/medias/icons/android-chrome-512x512.svg color=#000000><title>文档首页 | 夜法之书</title><link rel=manifest href=/manifest.json><link rel=icon type=image/webp href=/favicon.webp><link href=https://waline.17lai.site rel=preconnect crossorigin><link href=https://waline.17lai.site rel=dns-prefetch crossorigin><link rel=alternate type=application/atom+xml title=所有订阅ATOM--夜法之书 href=https://blog.17lai.site/atom.xml><link rel=alternate type=application/rss+xml title=所有订阅RSS2--夜法之书 href=https://blog.17lai.site/rss.xml><link rel=alternate type=application/json title=所有订阅JSON--夜法之书 href=https://blog.17lai.site/feed.json><link rel=preload as=style href="/css/main.css?v=13.22"><link rel=preload as=style href="/libs/materialize/materialize.min.css?v=2.3.3"><link rel=preload as=style href="/libs/awesome/css/all.min.css?v=13.22"><link rel=stylesheet type=text/css href="/libs/awesome/css/all.min.css?v=13.22"><link rel=modulepreload href="/libs/waline/pageview.js?v=3.15.2" as=script><link rel=stylesheet type=text/css href="/libs/materialize/materialize.min.css?v=2.3.3"><link rel=stylesheet href=https://lib.baomitu.com/aos/2.3.4/aos.css media=print onload='this.media="all"'><link rel=stylesheet href=https://lib.baomitu.com/animate.css/3.6.2/animate.min.css media=print onload='this.media="all"'><noscript><link rel=stylesheet href=https://lib.baomitu.com/aos/2.3.4/aos.css><link rel=stylesheet href=https://lib.baomitu.com/animate.css/3.6.2/animate.min.css></noscript><link rel=stylesheet href=/libs/lightGallery/css/lightgallery.min.css media=print onload='this.media="all"'><noscript><link rel=stylesheet href=/libs/lightGallery/css/lightgallery.min.css></noscript>
4<link rel=stylesheet type=text/css href="/css/main.css?v=13.22"><noscript><link rel=stylesheet href="/libs/materialize/materialize.min.css?v=2.3.3"><link rel=stylesheet href="/css/main.css?v=13.22"></noscript><link rel=stylesheet href=https://lib.baomitu.com/tocbot/4.36.4/tocbot.min.css media=print onload='this.media="all"'><noscript><link rel=stylesheet href=https://lib.baomitu.com/tocbot/4.36.4/tocbot.min.css></noscript><link rel=stylesheet href="/css/highlight.css?v=13.22" id=highlight-css><link rel=stylesheet href="/css/highlight-dark.css?v=13.22" id=highlight-css-dark><link rel=preload href="/js/utils.js?v=13.22" as=script><link rel=preload href="/js/color-schema.js?v=13.22" as=script>
4<script id=matery-configs>var dntVal,Matery=window.Matery||{},CONFIG=(Matery.ctx=Object.assign({},Matery.ctx),{hostname:"blog.17lai.site",root:"/",version:"2.0.0",zh_default:2,typing:{enable:!0,typeSpeed:70,cursorChar:"_",loop:!1,scope:[]},postTyped:{enable:!0,loop:!1,showCursor:!0,cursorChar:"_",startDelay:50,typeSpeed:70,backSpeed:50},subtitleTyped:{loop:!0,showCursor:!0,cursorChar:"_",startDelay:100,typeSpeed:80,backSpeed:50},anchorjs:{enable:!1,element:"h1,h2,h3,h4,h5,h6",placement:"right",visible:"hover",icon:""},progressbar:{enable:!1,height_px:3,color:"#29d",options:{showSpinner:!1,trickleSpeed:100}},code_language:{enable:!0,default:"TEXT"},copy_btn:!0,show_full:!0,height_limit:"450px",show_expand:!0,shrink:!0,break:!1,infinite_scroll:{enable:!0},image_caption:{enable:!0},fun_features:{typing:{enable:!0,typeSpeed:70,cursorChar:"_",loop:!1,scope:[]},anchorjs:{enable:!1,element:"h1,h2,h3,h4,h5,h6",placement:"right",visible:"hover",icon:""},progressbar:{enable:!1,height_px:3,color:"#29d",options:{showSpinner:!1,trickleSpeed:100}},monitortext:{enable:!1,text:"你看不到我!"},dengbox:{enable:!1,left:"新春",right:"快乐"}},background:{enable:!0,default:"off",image:{enable:!0,url:"/medias_webp/sea.webp",random:!0,lightNum:45,lightPath:"/medias_webp/featureimages/",darkNum:22,darkPath:"/medias_webp/featureimages/dark/"},video:{enable:!0,url:"/video_url.json?v=1.0.0"},loading:{enable:!0,type:"off",time:350}},image_zoom:{enable:!0,img_url_replace:["",""]},toc:{enable:!0,headingSelector:"h2,h3,h4,h5,h6",collapseDepth:0},outdate:{enable:!1,warning_day:365,error_day:3650},lazyload:{enable:!0,loading_img:"/medias_webp/loading2.svg",loading_img_dark:"/medias_webp/loading2-dark.svg",onlypost:!1,offset_factor:2},effects:{enable:!0,desktop_only:!0,page:{default:"off",available:{sakura:{label:"樱花",lib:"sakura"},ripples:{label:"水波",lib:"ripples"},leaf:{label:"落叶",lib:"leaf"},snowdown:{label:"飘雪",lib:"snowdown"},snowflake:{label:"雪花",lib:"snowflake"},buble:{label:"冒泡",lib:"buble"},canvas_nest:{label:"网络",lib:"canvas_nest",params:{color:"0,0,255",pointColor:"0,0,255",opacity:.7,zIndex:-1,count:99}},ribbon:{label:"彩带",lib:"ribbon",params:{size:150,alpha:.6,zIndex:-1,clickChange:!0}},ribbon_dynamic:{label:"动态彩带",lib:"ribbon_dynamic"}}},mouse:{default:"off",available:{clicklove:{label:"爱心",lib:"clicklove"},popupText:{label:"弹出文字",lib:"popupText"},mouseStar:{label:"星星",lib:"star"},fireworks:{label:"爆炸",lib:"fireworks"}}}},reward:{enable:!0,title:"码字辛苦,打赏作者!",wechat:"/medias_webp/reward/wechat.webp",alipay:"/medias_webp/reward/alipay.webp"},web_analytics:{enable:!0,follow_dnt:!1,baidu:{enable:!1,id:"22cc5bdea6e529c1349d44b7306b3b8c"},baiduPush:!1,google:{enable:!1,measurement_id:"G-JNYZP4ZLDJ"},umami:{enable:!0,totalTraffic:!0,totalNumberOfvisitors:!0,pageStats:!0,src:"https://ana.17lai.site/script.js",start_time:"2023-01-01",token:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaGFyZUlkIjoiZjY0NGViY2EtMzQ2Mi00NmU2LTg2OGEtZDUwNGI5ZDg5ZmJkIiwic2hhcmVUeXBlIjoxLCJwYXJhbWV0ZXJzIjp7ImV2ZW50cyI6dHJ1ZSwib3ZlcnZpZXciOnRydWV9LCJ3ZWJzaXRlSWQiOiJlNTMyZjY5ZC01NjA2LTQwYzktOWRiYi1iZmEwNDI1ODM4NGYiLCJpYXQiOjE3ODIwNjE5Nzl9.wcR2N-2epOL0de59_TdSD-87bCqvs3MGLtQJOyq4Hfk",api_server:"https://ana.17lai.site",website_id:"e532f69d-5606-40c9-9dbb-bfa04258384f"},tencent:{enable:!1,sid:null,cid:null},woyaola:{enable:!1,id:"JynRUZuReKUzZQSo",ck:"JynRUZuReKUzZQSo"},cnzz:{enable:!1,id:null},leancloud:{app_id:null,app_key:null,server_url:null,path:"window.location.pathname",ignore_local:!1}},search:{default:"algolia",local:{enable:!0,path:"/search.json",trigger:"auto",top_n:1,unescape:!1,preload:!1},algolia:{enable:!0,appID:"VI13Y8S98L",apiKey:"82f2b8a44bdbd5b95d0145201ec462ec",indexName:"blog",perPage:10,labels:{input_placeholder:"Search for Posts",hits_empty:"We didn't find any results for the search: ${query}",hits_stats:"${hits} results found in ${time} ms"}},pagefind:{enable:!0}}});CONFIG.web_analytics.follow_dnt&&(dntVal=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,Matery.ctx.dnt=dntVal&&(dntVal.startsWith("1")||dntVal.startsWith("yes")||dntVal.startsWith("on")))</script>
4<script src="/js/utils.js?v=13.22"></script>
4<script src="/js/color-schema.js?v=13.22"></script>
4<link rel=stylesheet href=/libs/prism/plugins/line-numbers/prism-line-numbers.min.css>
4<script async>window.WebGLRenderingContext||console.log("您的浏览器不支持WebGL,可能会影响部分页面显示,请尝试重启浏览器,使用最新版 Chrome 或 Edge 浏览器。");var windowWidth=window.innerWidth,BP={sm:600,md:768,lg:992,xl:1200,fun:1400},supportsPassive=(window.addEventListener("resize",function(){windowWidth=window.innerWidth}),!1);try{var opts=Object.defineProperty({},"passive",{get:function(){supportsPassive=!0}});window.addEventListener("testpassive",null,opts),window.removeEventListener("testpassive",null,opts)}catch(e){}var runningOnBrowser="undefined"!=typeof window,isBot=runningOnBrowser&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro|msn)bot|crawl|spider|yand|duckgo|Google (Page Speed|Web Preview)/i.test(navigator.userAgent)</script>
4<script async>let swUrl="/sw.js",swScope="/";(async()=>{if("localhost"!==location.hostname&&"serviceWorker"in navigator)try{let r=await navigator.serviceWorker.register(swUrl,{scope:swScope}),o=(console.log("[PWA]Service Worker registered:",r),null),t=!1;function e(){return new Promise(o=>{var e=r.waiting||r.installing||r.active;if(!e)return o(null);let t=new MessageChannel,n=(t.port1.onmessage=e=>{clearTimeout(n),o(e.data&&e.data.cacheVersion||null)},e.postMessage({action:"checkIdentifier"},[t.port2]),setTimeout(()=>{t.port1.close(),o(null)},1e3))})}function n(){t||e().then(e=>{e&&e!==o&&(console.log("[PWA] Cache version changed",o,"→",e,"auto refreshing..."),o=e,t=!0,setTimeout(()=>window.location.reload(),500))})}o=await e(),r.addEventListener("updatefound",()=>{let e=r.installing;e&&e.addEventListener("statechange",()=>{"installed"===e.state&&(console.log("[PWA] New SW installed (cache ready)"),n())})}),navigator.serviceWorker.addEventListener("controllerchange",()=>{console.log("[PWA] Controller changed"),n()})}catch(e){console.error("[PWA]Service Worker registration failed:",e)}})()</script>
4<script async>Matery.ctx.dnt||isBot||(()=>{var e=document.createElement("script"),t=(e.async=!0,e.dataset.cache=!0,e.dataset.websiteId="e532f69d-5606-40c9-9dbb-bfa04258384f",e.src="https://ana.17lai.site/script.js",document.getElementsByTagName("script")[0]);t.parentNode.insertBefore(e,t)})()</script>
4<noscript><style>#toc-aside{display:none!important}</style></noscript>
4<script>(()=>{try{var e=window.location.pathname.split("/").filter(Boolean);e.length&&0<=["zh-cn"].indexOf(e[0])&&e.shift();var t=("/"+e.join("/")).replace(/\/$/,"")+"/toc",a=localStorage.getItem(t),n=null!==a&&"hide"===JSON.parse(a);n&&document.documentElement.classList.add("toc-hidden")}catch(e){}})()</script>
4<script type=application/ld+json>{"@context":"https://schema.org","@graph":[{"@type":"Person","@id":"https://blog.17lai.site#person","name":"夜法之书"},{"@type":"Organization","@id":"https://blog.17lai.site#organization","name":"夜法之书","url":"https://blog.17lai.site"},{"@type":"WebSite","@id":"https://blog.17lai.site#website","url":"https://blog.17lai.site","name":"夜法之书","description":"~软件驱动世界~个人独立技术博客,关于Linux,开源,Nas,Docker,嵌入式,理财,健身等主题!","inLanguage":"zh-CN","publisher":{"@id":"https://blog.17lai.site#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://blog.17lai.site/search/?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}</script>
4<script>(()=>{try{var e,i,t,a,l,n,s,o,c=["zh-cn","en"],h="zh-cn",d=localStorage.getItem("wiki_lang");!d||c.indexOf(d)<0||/bot|crawl|spider|slurp|Googlebot|Baiduspider|bingbot|yandex|DuckDuck/i.test(navigator.userAgent)||(i="/"===(e=location.pathname).slice(-1),t=/\.html?$/i.test(e),!i&&!t)||d===((l=(a=e.split("/").filter(Boolean))[0])&&0<=c.indexOf(l)?l:h)||(n=a.slice(),0<=c.indexOf(n[0])&&n.shift(),t&&n.length<=1)||n.length&&0<=["assets","cheatsheets","css","doc","html-file","js","lib","libs","live2d","medias","medias_webp","admin","nav"].indexOf(n[0])||(o=""===(s=n.join("/"))?d===h?"/":"/"+d+"/":(d===h?"":"/"+d)+"/"+s+(i?"/":""),location.replace(o+location.search+location.hash))}catch(e){}})()</script>
4<meta name=generator content="Hexo 8.1.2"></head><style type=text/css>#loading-container{position:fixed;top:0;left:0;min-height:100vh;width:100vw;z-index:9999;display:flex;flex-direction:column;justify-content:center;align-items:center;background:var(--loading-bg);text-align:center;-webkit-transition:opacity 1s ease;-moz-transition:opacity 1s ease;-o-transition:opacity 1s ease;transition:opacity 1s ease}.loading-image{width:120px;height:50px;transform:translate(-50%)}.loading-image div:nth-child(2){-webkit-animation:pacman-balls 1s linear 0s infinite;animation:pacman-balls 1s linear 0s infinite}.loading-image div:nth-child(3){-webkit-animation:pacman-balls 1s linear .33s infinite;animation:pacman-balls 1s linear .33s infinite}.loading-image div:nth-child(4){-webkit-animation:pacman-balls 1s linear .66s infinite;animation:pacman-balls 1s linear .66s infinite}.loading-image div:nth-child(5){-webkit-animation:pacman-balls 1s linear .99s infinite;animation:pacman-balls 1s linear .99s infinite}.loading-image div:first-of-type{width:0;height:0;border:25px solid var(--loading-accent);border-right-color:transparent;border-radius:25px;-webkit-animation:rotate_pacman_half_up .5s 0s infinite;animation:rotate_pacman_half_up .5s 0s infinite}.loading-image div:nth-child(2){width:0;height:0;border:25px solid var(--loading-accent);border-right-color:transparent;border-radius:25px;-webkit-animation:rotate_pacman_half_down .5s 0s infinite;animation:rotate_pacman_half_down .5s 0s infinite;margin-top:-50px}@-webkit-keyframes rotate_pacman_half_up{0%{transform:rotate(270deg)}50%{transform:rotate(1turn)}to{transform:rotate(270deg)}}@keyframes rotate_pacman_half_up{0%{transform:rotate(270deg)}50%{transform:rotate(1turn)}to{transform:rotate(270deg)}}@-webkit-keyframes rotate_pacman_half_down{0%{transform:rotate(90deg)}50%{transform:rotate(0)}to{transform:rotate(90deg)}}@keyframes rotate_pacman_half_down{0%{transform:rotate(90deg)}50%{transform:rotate(0)}to{transform:rotate(90deg)}}@-webkit-keyframes pacman-balls{75%{opacity:.7}to{transform:translate(-100px,-6.25px)}}@keyframes pacman-balls{75%{opacity:.7}to{transform:translate(-100px,-6.25px)}}.loading-image div:nth-child(3),.loading-image div:nth-child(4),.loading-image div:nth-child(5),.loading-image div:nth-child(6){background-color:var(--loading-accent);width:15px;height:15px;border-radius:100%;margin:2px;width:10px;height:10px;position:absolute;transform:translateY(-6.25px);top:25px;left:100px}.loading-text{margin-bottom:20vh;text-align:center;color:var(--loading-accent);font-size:2rem;box-sizing:border-box;padding:0 10px;text-shadow:0 2px 10px rgba(0,0,0,.2)}@media only screen and (max-width:500px){.loading-text{font-size:1.5rem}}.fadeout{opacity:0}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0)}}</style><div id=loading-container><p class=loading-text>加载中...</p><div class=loading-image><div></div><div></div><div></div><div></div><div></div><div></div></div></div>
4<script>(()=>{let e=document.getElementById("loading-container");e&&"none"!==e.style.display&&setTimeout(function(){e.className="fadeout",setTimeout(function(){e.style.display="none"},500)},350)})()</script>
4<style type=text/css>#loading-box .loading-left-bg,#loading-box .loading-right-bg{position:fixed;z-index:1000;width:50%;height:100%;background-color:var(--loading-bg);transition:all .5s}#loading-box .loading-right-bg{right:0}#loading-box>.spinner-box{position:fixed;z-index:1001;display:flex;justify-content:center;align-items:center;width:100%;height:100vh}#loading-box .spinner-box .configure-border-1{position:absolute;padding:3px;width:115px;height:115px;background:var(--loading-accent);animation:configure-clockwise 3s ease-in-out 0s infinite alternate}#loading-box .spinner-box .configure-border-2{left:-115px;padding:3px;width:115px;height:115px;background:#3ff9dc;transform:rotate(45deg);animation:configure-xclockwise 3s ease-in-out 0s infinite alternate}#loading-box .spinner-box .loading-word{position:absolute;color:var(--loading-accent);font-size:.8rem}#loading-box .spinner-box .configure-core{width:100%;height:100%;background-color:var(--loading-bg)}div.loaded div.loading-left-bg{transform:translate(-100%,0)}div.loaded div.loading-right-bg{transform:translate(100%,0)}div.loaded div.spinner-box{display:none!important}@keyframes configure-clockwise{0%{transform:rotate(0)}25%{transform:rotate(90deg)}50%{transform:rotate(180deg)}75%{transform:rotate(270deg)}100%{transform:rotate(360deg)}}@keyframes configure-xclockwise{0%{transform:rotate(45deg)}25%{transform:rotate(-45deg)}50%{transform:rotate(-135deg)}75%{transform:rotate(-225deg)}100%{transform:rotate(-315deg)}}</style><div id=loading-box><div class=loading-left-bg></div><div class=loading-right-bg></div><div class=spinner-box><div class=configure-border-1><div class=configure-core></div></div><div class=configure-border-2><div class=configure-core></div></div><div class=loading-word>加载中...</div></div></div>
4<script>function initLoadingBox(){var o=document.getElementById("loading-box");"none"!==o.style.display&&(document.body.style.overflow="hidden",setTimeout(function(){document.body.style.overflow=""},600),o.classList.add("loaded"))}"loading"===document.readyState?document.addEventListener("DOMContentLoaded",initLoadingBox):initLoadingBox()</script>
4<style type=text/css>#Loadanimation{background-color:var(--loading-bg);height:100%;width:100%;position:fixed;z-index:1;margin-top:0;top:0}#Loadanimation-center{width:100%;height:100%;position:relative}#Loadanimation-center-absolute{position:absolute;left:50%;top:50%;height:200px;width:200px;margin-top:-100px;margin-left:-100px}.xccx_object{-moz-border-radius:50% 50% 50% 50%;-webkit-border-radius:50% 50% 50% 50%;border-radius:50% 50% 50% 50%;position:absolute;border-left:5px solid var(--loading-accent);border-right:5px solid var(--loading-accent);border-top:5px solid transparent;border-bottom:5px solid transparent;-webkit-animation:animate 2.5s infinite;animation:animate 2.5s infinite}#xccx_one{left:75px;top:75px;width:50px;height:50px}#xccx_two{left:65px;top:65px;width:70px;height:70px;-webkit-animation-delay:.1s;animation-delay:.1s}#xccx_three{left:55px;top:55px;width:90px;height:90px;-webkit-animation-delay:.2s;animation-delay:.2s}#xccx_four{left:45px;top:45px;width:110px;height:110px;-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes animate{50%{-ms-transform:rotate(180deg);-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-ms-transform:rotate(0);-webkit-transform:rotate(0);transform:rotate(0)}}@keyframes animate{50%{-ms-transform:rotate(180deg);-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-ms-transform:rotate(0);-webkit-transform:rotate(0);transform:rotate(0)}}</style><div id=Loadanimation style=z-index:999999><div id=Loadanimation-center><div id=Loadanimation-center-absolute><div class=xccx_object id=xccx_four></div><div class=xccx_object id=xccx_three></div><div class=xccx_object id=xccx_two></div><div class=xccx_object id=xccx_one></div></div></div></div>
4<script>var _loadAnim=document.getElementById("Loadanimation");function fadeOut(n,i){n.style.transition="opacity "+i+"ms",n.style.opacity="0",setTimeout(function(){n.style.display="none"},i)}function initCircleLoading(){_loadAnim&&"none"!==_loadAnim.style.display&&fadeOut(_loadAnim,500)}"loading"===document.readyState?document.addEventListener("DOMContentLoaded",initCircleLoading):initCircleLoading()</script>
4<script>(()=>{var e=localStorage.getItem("matery.loading"),o=null===e?"off":e,t={1:"loading-container",2:"loading-box",3:"Loadanimation"};Object.keys(t).forEach(function(e){var n=document.getElementById(t[e]);n&&(n.style.display=o===e?"":"none")}),"off"===o&&Object.keys(t).forEach(function(e){e=document.getElementById(t[e]);e&&(e.style.display="none")})})()</script>
4<body class="lazy-background layout-wiki"><header class=navbar-fixed><nav id=headNav class="bg-color nav-transparent"><div id=navContainer class="nav-wrapper container"><div class=brand-logo><a href=/ class="waves-effect waves-light"><img no-lazy fetchpriority=high src=/favicon.webp width="108" height="108" style=width:40px;height:45px class=logo-img alt=LOGO> <span class=logo-span>夜法之书</span></a></div><a href=# data-target=mobile-nav class="sidenav-trigger button-collapse" aria-label=侧边菜单><i class="fas fa-bars"></i></a><ul class="right nav-menu"><li class="hide-on-med-and-down nav-item menu-2d-home"><a href=/ class=nav-link target=_self><i class="fas fa-home"></i> 首页</a></li><li class="hide-on-med-and-down nav-item menu-2d-nav"><a href=https://nav.17lai.site/ rel="external nofollow noreferrer" class=nav-link target=_blank><i class="fas fa-suitcase"></i> 导航</a></li><li class="hide-on-med-and-down nav-item menu-2d-sosuo"><a href=https://so.17lai.site/ rel="external nofollow noreferrer" class=nav-link target=_blank><i class="fas fa-mask"></i> SO</a></li><li class="hide-on-med-and-down nav-item menu-2d-media"><a href=# class=nav-link><i class="fas fa-music"></i> 多媒体 <i class="fas fa-chevron-down" aria-hidden=true></i></a><ul class="sub-nav menus_item_child"><li class=menu-2d-musics><a class=nav-link href=/musics/ target=_self><i class="fas fa-music fa-fw"></i> 音乐</a></li><li class=menu-2d-galleries><a class=nav-link href=/galleries/ target=_self><i class="fas fa-image fa-fw"></i> 相册</a></li><li class=menu-2d-movies><a class=nav-link href=/movies/ target=_self><i class="fas fa-film fa-fw"></i> 视频</a></li><li class=menu-2d-musicplayer><a class=nav-link href=https://musicplayer.17lai.site/ rel="external nofollow noreferrer" target=_self><i class="fas fa-music fa-fw"></i> 在线云音乐</a></li><li class=menu-2d-music><a class=nav-link href=https://music.17lai.site/ rel="external nofollow noreferrer" target=_self><i class="fas fa-music fa-fw"></i> 音乐播放器</a></li></ul></li><li class="hide-on-med-and-down nav-item menu-2d-posts"><a href=# class=nav-link><i class="fas fa-folder-plus"></i> 文章 <i class="fas fa-chevron-down" aria-hidden=true></i></a><ul class="sub-nav menus_item_child"><li class=menu-2d-tags><a class=nav-link href=/tags/ target=_self><i class="fas fa-tags fa-fw"></i> 标签</a></li><li class=menu-2d-categories><a class=nav-link href=/categories/ target=_self><i class="fas fa-bookmark fa-fw"></i> 分类</a></li><li class=menu-2d-archives><a class=nav-link href=/archives/ target=_self><i class="fas fa-archive fa-fw"></i> 归档</a></li></ul></li><li class="hide-on-med-and-down nav-item menu-2d-docs"><a href=# class=nav-link><i class="fas fa-book"></i> 文档 <i class="fas fa-chevron-down" aria-hidden=true></i></a><ul class="sub-nav menus_item_child"><li class=menu-2d-doc><a class=nav-link href=/docs/ target=_self><i class="fas fa-book fa-fw"></i> 文档</a></li><li class=menu-2d-api><a class=nav-link href=/api/ target=_self><i class="fas fa-code fa-fw"></i> API</a></li><li class=menu-2d-tutorial><a class=nav-link href=/tutorial/ target=_self><i class="fas fa-graduation-cap fa-fw"></i> 教程</a></li><li class=menu-2d-dev><a class=nav-link href=/dev/ target=_self><i class="fas fa-code-branch fa-fw"></i> dev</a></li></ul></li><li class="hide-on-med-and-down nav-item menu-2d-toolbox"><a href=# class=nav-link><i class="fas fa-toolbox"></i> 工具 <i class="fas fa-chevron-down" aria-hidden=true></i></a><ul class="sub-nav menus_item_child"><li class=menu-2d-tg><a class=nav-link href=https://t.me/chat_17laisite rel="external nofollow noreferrer" target=_self><i class="fab fa-telegram-plane fa-fw"></i> TG交流群</a></li><li class=menu-2d-linuxtool><a class=nav-link href=https://linux-command.17lai.site/ rel="external nofollow noreferrer" target=_self><i class="fas fa-terminal fa-fw"></i> Linux命令</a></li><li class=menu-2d-cheatsheets><a class=nav-link href=/dash/ target=_self><i class="fas fa-laptop-code fa-fw"></i> 各种快查表</a></li><li class=menu-2d-onebox><a class=nav-link href=https://alist.17lai.site/ rel="external nofollow noreferrer" target=_self><i class="fas fa-cloud fa-fw"></i> 私人网盘</a></li><li class=menu-2d-staticnav><a class=nav-link href=/nav/ target=_self><i class="fas fa-tools fa-fw"></i> 网址导航</a></li></ul></li><li class="hide-on-med-and-down nav-item menu-2d-mirror"><a href=# class=nav-link><i class="fas fa-link"></i> 镜像 <i class="fas fa-chevron-down" aria-hidden=true></i></a><ul class="sub-nav menus_item_child"><li class=menu-2d-mirror-cf><a class=nav-link href=https://cfblog.17lai.site/ target=_self><i class="fas fa-link fa-fw"></i> CF镜像</a></li><li class=menu-2d-mirror-vps20><a class=nav-link href=https://v20blog.17lai.site/ target=_self><i class="fas fa-link fa-fw"></i> VPS镜像</a></li><li class=menu-2d-mirror-main><a class=nav-link href=https://blog.17lai.site/ target=_self><i class="fas fa-link fa-fw"></i> 主站</a></li></ul></li><li class="hide-on-med-and-down nav-item menu-2d-friends"><a href=/friends/ class=nav-link target=_self><i class="fas fa-link"></i> 友情链接</a></li><li class="hide-on-med-and-down nav-item menu-2d-msg"><a href=/msg/ class=nav-link target=_self><i class="fas fa-comment-alt"></i> 留言</a></li><li class="hide-on-med-and-down nav-item menu-2d-about"><a href=/about/ class=nav-link target=_self><i class="fas fa-user-circle"></i> 关于</a></li><li class="nav-item menu-2d-search"><a href=javascript:; rel="external nofollow noreferrer" class=nav-link data-umami-event-search="search modal click" onclick=openSearchModal()>
4<i id=searchIcon class="fas fa-search" title=搜索></i></a></li><li class="nav-item menu-2d-dark" data-umami-event-color="color toggle" id=color-toggle-btn><a class=nav-link target=_self href=javascript:; rel="external nofollow noreferrer" aria-label=颜色切换>&nbsp; <i class="fas fa-sun" id=color-toggle-icon></i>&nbsp;</a></li></ul><div id=mobile-nav class="side-nav sidenav"><div class="mobile-head bg-color"><div><img fetchpriority=high src=/favicon.webp width="108" height="108" data-lazy-src-light="/medias_webp/loading2.svg" data-lazy-src-dark="/medias_webp/loading2-dark.svg" loading="lazy" lazyload style=width:45px;height:45px class="logo-img circle responsive-img" alt=LOGO><div class=logo-name>夜法之书</div><div class=logo-desc>~软件驱动世界~个人独立技术博客,关于Linux,开源,Nas,Docker,嵌入式,理财,健身等主题!</div></div></div><ul class="menu-list mobile-menu-list"><li><a href=/ class="waves-effect waves-light sidenav-close" target=_self><i class="fa-fw fas fa-home"></i> <span class=menu-text>首页</span></a></li><li><a href=https://nav.17lai.site/ rel="external nofollow noreferrer" class="waves-effect waves-light sidenav-close" target=_blank><i class="fa-fw fas fa-suitcase"></i> <span class=menu-text>导航</span></a></li><li><a href=https://so.17lai.site/ rel="external nofollow noreferrer" class="waves-effect waves-light sidenav-close" target=_blank><i class="fa-fw fas fa-mask"></i> <span class=menu-text>SO</span></a></li><li><ul class="collapsible collapsible-accordion"><li><a class=collapsible-header href=# onclick=return!1 tabindex=0><i class="fa-fw fas fa-music"></i> <span class=menu-text>多媒体</span></a><div class=collapsible-body><ul><li><a href=/musics/ class=sidenav-close target=_self><i class="fas fa-music fa-fw"></i> <span class=menu-text>音乐</span></a></li><li><a href=/galleries/ class=sidenav-close target=_self><i class="fas fa-image fa-fw"></i> <span class=menu-text>相册</span></a></li><li><a href=/movies/ class=sidenav-close target=_self><i class="fas fa-film fa-fw"></i> <span class=menu-text>视频</span></a></li><li><a href=https://musicplayer.17lai.site/ rel="external nofollow noreferrer" class=sidenav-close target=_self><i class="fas fa-music fa-fw"></i> <span class=menu-text>在线云音乐</span></a></li><li><a href=https://music.17lai.site/ rel="external nofollow noreferrer" class=sidenav-close target=_self><i class="fas fa-music fa-fw"></i> <span class=menu-text>音乐播放器</span></a></li></ul></div></li></ul></li><li><ul class="collapsible collapsible-accordion"><li><a class=collapsible-header href=# onclick=return!1 tabindex=0><i class="fa-fw fas fa-folder-plus"></i> <span class=menu-text>文章</span></a><div class=collapsible-body><ul><li><a href=/tags/ class=sidenav-close target=_self><i class="fas fa-tags fa-fw"></i> <span class=menu-text>标签</span></a></li><li><a href=/categories/ class=sidenav-close target=_self><i class="fas fa-bookmark fa-fw"></i> <span class=menu-text>分类</span></a></li><li><a href=/archives/ class=sidenav-close target=_self><i class="fas fa-archive fa-fw"></i> <span class=menu-text>归档</span></a></li></ul></div></li></ul></li><li><ul class="collapsible collapsible-accordion"><li><a class=collapsible-header href=# onclick=return!1 tabindex=0><i class="fa-fw fas fa-book"></i> <span class=menu-text>文档</span></a><div class=collapsible-body><ul><li><a href=/docs/ class=sidenav-close target=_self><i class="fas fa-book fa-fw"></i> <span class=menu-text>文档</span></a></li><li><a href=/api/ class=sidenav-close target=_self><i class="fas fa-code fa-fw"></i> <span class=menu-text>API</span></a></li><li><a href=/tutorial/ class=sidenav-close target=_self><i class="fas fa-graduation-cap fa-fw"></i> <span class=menu-text>教程</span></a></li><li><a href=/dev/ class=sidenav-close target=_self><i class="fas fa-code-branch fa-fw"></i> <span class=menu-text>dev</span></a></li></ul></div></li></ul></li><li><ul class="collapsible collapsible-accordion"><li><a class=collapsible-header href=# onclick=return!1 tabindex=0><i class="fa-fw fas fa-toolbox"></i> <span class=menu-text>工具</span></a><div class=collapsible-body><ul><li><a href=https://t.me/chat_17laisite rel="external nofollow noreferrer" class=sidenav-close target=_self><i class="fab fa-telegram-plane fa-fw"></i> <span class=menu-text>TG交流群</span></a></li><li><a href=https://linux-command.17lai.site/ rel="external nofollow noreferrer" class=sidenav-close target=_self><i class="fas fa-terminal fa-fw"></i> <span class=menu-text>
4Linux命令</span></a></li><li><a href=/dash/ class=sidenav-close target=_self><i class="fas fa-laptop-code fa-fw"></i> <span class=menu-text>各种快查表</span></a></li><li><a href=https://alist.17lai.site/ rel="external nofollow noreferrer" class=sidenav-close target=_self><i class="fas fa-cloud fa-fw"></i> <span class=menu-text>私人网盘</span></a></li><li><a href=/nav/ class=sidenav-close target=_self><i class="fas fa-tools fa-fw"></i> <span class=menu-text>网址导航</span></a></li></ul></div></li></ul></li><li><ul class="collapsible collapsible-accordion"><li><a class=collapsible-header href=# onclick=return!1 tabindex=0><i class="fa-fw fas fa-link"></i> <span class=menu-text>镜像</span></a><div class=collapsible-body><ul><li><a href=https://cfblog.17lai.site/ class=sidenav-close target=_self><i class="fas fa-link fa-fw"></i> <span class=menu-text>CF镜像</span></a></li><li><a href=https://v20blog.17lai.site/ class=sidenav-close target=_self><i class="fas fa-link fa-fw"></i> <span class=menu-text>VPS镜像</span></a></li><li><a href=https://blog.17lai.site/ class=sidenav-close target=_self><i class="fas fa-link fa-fw"></i> <span class=menu-text>主站</span></a></li></ul></div></li></ul></li><li><a href=/friends/ class="waves-effect waves-light sidenav-close" target=_self><i class="fa-fw fas fa-link"></i> <span class=menu-text>友情链接</span></a></li><li><a href=/msg/ class="waves-effect waves-light sidenav-close" target=_self><i class="fa-fw fas fa-comment-alt"></i> <span class=menu-text>留言</span></a></li><li><a href=/about/ class="waves-effect waves-light sidenav-close" target=_self><i class="fa-fw fas fa-user-circle"></i> <span class=menu-text>关于</span></a></li></ul></div></div></nav></header><div id=banner false class="bg-cover pd-header about-cover"><div class=bg-cover-before></div><div class=container><div class=row><div class="col s10 offset-s1 m8 offset-m2 l8 offset-l2"><div class=brand><div class="title center-align"><h2 id=post-title class="description center-align post-title">文档首页 <span class="typed-cursor h2 typed-cursor--blink" aria-hidden=true></span></h2></div><div class="description center-align">~软件驱动世界~个人独立技术博客,关于Linux,开源,Nas,Docker,嵌入式,理财,健身等主题!</div></div></div></div></div><div class=bg-cover-after></div></div><main class="post-container content wiki-main"><div class="row wiki-layout"><aside class="col s12 l2"><div class=wiki-sidebar><div class=wiki-sidebar-inner><strong class=wiki-nav-title>开始使用</strong><a href=/docs/ class="wiki-nav-link current">概述</a><a class='wiki-nav-link' href='/docs/setup'>建站</a><a class='wiki-nav-link' href='/docs/writing'>写作</a><a class='wiki-nav-link' href='/docs/migration'>迁移</a><strong class=wiki-nav-title>基础用法</strong><a class='wiki-nav-link' href='/docs/commands'>命令</a><a class='wiki-nav-link' href='/docs/configuration'>配置</a><a class='wiki-nav-link' href='/docs/front-matter'>Front-matter</a><a class='wiki-nav-link' href='/docs/permalinks'>永久链接</a><a class='wiki-nav-link' href='/docs/asset-folders'>资源文件夹</a><a class='wiki-nav-link' href='/docs/data-files'>数据文件</a><a class='wiki-nav-link' href='/docs/server'>服务器</a><a class='wiki-nav-link' href='/docs/generating'>生成器</a><a class='wiki-nav-link' href='/docs/syntax-highlight'>代码高亮</a><a class='wiki-nav-link' href='/docs/tag-plugins'>标签插件</a><a class='wiki-nav-link' href='/docs/helpers'>辅助函数</a><a class='wiki-nav-link' href='/docs/templates'>模板</a><a class='wiki-nav-link' href='/docs/variables'>变量</a><strong class=wiki-nav-title>国际化与部署</strong><a class='wiki-nav-link' href='/docs/internationalization'>国际化</a><a class='wiki-nav-link' href='/docs/one-command-deployment'>一键部署</a><a class='wiki-nav-link' href='/docs/github-pages'>GitHub Pages</a><a class='wiki-nav-link' href='/docs/gitlab-pages'>GitLab Pages</a><strong class=wiki-nav-title>主题与插件</strong><a class='wiki-nav-link' href='/docs/themes'>主题</a><a class='wiki-nav-link' href='/docs/plugins'>插件</a><a class='wiki-nav-link' href='/docs/contributing'>贡献</a><a class='wiki-nav-link' href='/docs/troubleshooting'>问题排查</a></div></div></aside><div class="col s12 l8 wiki-content-wrap" id=wiki-main-content><div class="card wiki-card"><div class="card-content article-card-content wiki-content markdown-body" id=articleContent data-pagefind-body><h1 id=文档>文档</h1><p>欢迎使用文档系统。这是简介页(第一个章节)。</p>
4<script data-pjax src="/libs/hbe/hbe-bundle.js?v=13.22"></script>
4<link href="/libs/hbe/hbe-style.css?v=13.22" rel=stylesheet type=text/css></div></div><article id="comments" lazyload><div class="card waline-card" data-aos=fade-up><div class=comment_headling style=font-size:20px;font-weight:700;position:relative;padding-left:20px;top:15px;padding-bottom:5px><i class="fas fa-comments fa-fw" aria-hidden=true></i> <span>评论</span></div><div class="center hvcenter loading-small" id=loading_data><i class="fas fa-spinner fa-pulse"></i> <span>数据加载中 ...</span></div><div id=waline class=card-content style=display:grid></div></div>
4<script>(()=>{var e=document.getElementById("to_comment");e&&(e.style.display="block")})()</script>
4</article></div><aside class="col l2 hide-on-med-and-down" id=wiki-toc-aside><div class=wiki-toc><div id=wiki-toc class=tocbot-list></div></div></aside></div></main><footer class="page-footer bg-color"><div class="container row center-align" style=margin-bottom:15px!important><div class="col s12 m8 l8 copy-right">Copyright&nbsp;&copy; <span id=year>2020-2026</span> <a href=/about target=_blank>夜法之书</a> |&nbsp;Powered by&nbsp;<a href=https://hexo.io/ rel="external nofollow noreferrer" target=_blank>Hexo</a> |&nbsp;Theme&nbsp;<a href=https://github.com/blinkfox/hexo-theme-matery rel="external nofollow noreferrer" target=_blank>Matery</a> v2.0.0<br>&nbsp;<i class="fas fa-chart-area"></i>&nbsp;站点总字数:&nbsp;<span class=white-color>1327k</span> <span id=busuanzi_container_site_pv style=display:none>&nbsp;|&nbsp;<i class="far fa-eye"></i>&nbsp;总访问量:&nbsp; <span id=busuanzi_value_site_pv class=white-color></span><i id=busuanzi_loading_icon_site_pv class="fas fa-sync fa-spin"></i> </span><span id=busuanzi_container_site_uv style=display:none>&nbsp;|&nbsp;<i class="fas fa-users"></i>&nbsp;总访问人数:&nbsp; <span id=busuanzi_value_site_uv class=white-color></span><i id=busuanzi_loading_icon_site_uv class="fas fa-sync fa-spin"></i></span><br><span id=sitetime>Loading ...</span>
4<script>var calcSiteTime=function(){var e=new Date,t="2020",n=e.getFullYear(),o=e.getMonth()+1,a=e.getDate(),r=e.getHours(),i=e.getMinutes(),e=e.getSeconds(),s=Date.UTC(t,"6","28","0","0","0"),o=Date.UTC(n,o,a,r,i,e)-s,a=Math.floor(o/31536e6),r=Math.floor(o/864e5-365*a),i="zh-cn";t===String(n)?(document.getElementById("year").innerHTML=n,e="This site has been running for "+r+" days",0<=i.toLowerCase().indexOf("zh")&&(e="zh-hk"===i.toLowerCase()||"zh-tw"===i.toLowerCase()?"本站已運行 "+r+" 天":"本站已运行 "+r+" 天"),document.getElementById("sitetime").innerHTML=e):(document.getElementById("year").innerHTML=t+" - "+n,s="This site has been running for "+a+" years and "+r+" days",0<=i.toLowerCase().indexOf("zh")&&(s="zh-hk"===i.toLowerCase()||"zh-tw"===i.toLowerCase()?"本站已運行 "+a+" 年 "+r+" 天":"本站已运行 "+a+" 年 "+r+" 天"),document.getElementById("sitetime").innerHTML=s)};calcSiteTime()</script>
4<br></div><div class="col s12 m4 l4 social-link social-statis"><a href=https://github.com/appotry rel="external nofollow noreferrer" class=tooltipped target=_blank aria-label=访问我的GitHub data-tooltip=访问我的GitHub data-position=top data-delay=50><i class="fab fa-github fa-fw"></i> </a><a href=https://hub.docker.com/u/bloodstar rel="external nofollow noreferrer" class=tooltipped target=_blank aria-label=访问我的DockerHub data-tooltip=访问我的DockerHub data-position=top data-delay=50><i class="fab fa-docker fa-fw"></i> </a><a href=mailto:[email protected] rel="external nofollow noreferrer" class=tooltipped target=_blank aria-label=邮件联系我 data-tooltip=邮件联系我 data-position=top data-delay=50><i class="fas fa-envelope-open fa-fw"></i> </a><a href=/atom.xml class=tooltipped target=_blank aria-label="RSS 订阅" data-tooltip="RSS 订阅" data-position=top data-delay=50><i class="fas fa-rss fa-fw"></i></a></div></div></footer><div class=progress-bar></div><div id=searchModal class="modal search-modal" popover><div class=search-header><span class=search-icon id=searchEngineBtn title=切换搜索引擎><i class="fas fa-search" id=searchEngineIcon></i> <i class="fas fa-caret-down" id=searchEngineCaret></i><ul class="dropdown-content search-engine-menu" id=searchEngineMenu><li data-engine=local><a><i class="fas fa-search"></i> 本地搜索</a></li><li data-engine=algolia><a><i class="fab fa-algolia"></i> Algolia 搜索</a></li><li data-engine=pagefind><a><i class="fas fa-file-alt"></i> Pagefind 搜索</a></li></ul></span><div class=search-input-container><input type=search id=searchInput class=search-input autocomplete=off autocapitalize=off maxlength=80 spellcheck=false placeholder="请输入搜索的关键字 (Ctrl + K)"></div><span class=popup-btn-close role=button onclick=closeSearchModal()><i class="fas fa-times-circle"></i></span></div><div class=search-result-container id=searchResult><div class=search-result-icon><i class="fas fa-search fa-5x"></i></div></div></div><div class=floating-col-container><div class=row><div class="col s12 floating-col-item"><div class=floating-panel-wrap id=floating-panel-wrap><div id=floating-panel class=floating-panel style=display:none><div class=fp-header><span class=fp-title>偏好设置</span> <span class=fp-close id=fp-close>✕</span></div><div class=fp-div></div><div class=fp-body><div class=fp-sec><div class=fp-label-row><span class=fp-label>字体大小</span> <span class=fp-reset id=fp-font-reset>↺ 恢复默认字号</span></div><div class=fp-font-row><button type=button class=fp-btn id=fp-font-minus>A−</button> <button type=button class="fp-btn fp-cur" id=fp-font-cur>100%</button> <button type=button class=fp-btn id=fp-font-plus>A+</button></div></div><div class=fp-div></div><div class="fp-sec fp-row-inline" id=fp-lang-row><span class=fp-label>语言</span> <select id=fp-lang-select class="fp-select fp-lang-select-wide"><option value=zh-cn data-flag=🇨🇳>🇨🇳 简体中文</option><option value=en data-flag=🇬🇧>🇬🇧 English</option></select><div class=fp-seg id=fp-lang><span class=fp-seg-item data-lang=simp>简</span> <span class=fp-seg-item data-lang=trad>繁</span></div></div><div class=fp-div></div><div class="fp-sec fp-row-inline"><span class=fp-label>显示模式</span><div class=fp-seg id=fp-theme><span class=fp-seg-item data-theme=light><i class="fas fa-sun"></i> 亮</span> <span class=fp-seg-item data-theme=auto><i class="fas fa-adjust"></i> 自动</span> <span class=fp-seg-item data-theme=dark><i class="fas fa-moon"></i> 暗</span></div></div><div class=fp-div></div><div class=fp-sec><div class=fp-label-row><span class=fp-label>页面特效</span><div class="fp-seg fp-seg-sm" id=fp-effect-page><span class=fp-seg-item data-effect=off>关闭</span> <span class=fp-seg-item data-effect=random><i class="fas fa-random"></i> 随机</span></div></div><div class=fp-fx-list id=fp-fx-list-page></div><div class="fp-label-row fp-label-gap"><span class=fp-label>鼠标特效</span><div class="fp-seg fp-seg-sm" id=fp-effect-mouse><span class=fp-seg-item data-effect=off>关闭</span> <span class=fp-seg-item data-effect=random><i class="fas fa-random"></i> 随机</span></div></div><div class=fp-fx-list id=fp-fx-list-mouse></div></div><div class=fp-div></div><div class=fp-sec><div class=fp-label>网页背景</div><div class=fp-seg id=fp-bg><span class=fp-seg-item data-bg=off>关闭</span> <span class=fp-seg-item data-bg=image>图片</span> <span class=fp-seg-item data-bg=video>视频</span></div><div class="fp-label fp-label-gap">加载动画</div><div class=fp-seg id=fp-loading><span class=fp-seg-item data-bg=off>关闭</span> <span class=fp-seg-item data-bg=1>吃豆豆</span> <span class=fp-seg-item data-bg=2>方块</span> <span class=fp-seg-item data-bg=3>圆圈</span></div></div></div></div><div id=fp-toggle data-umami-event-panel="floating panel toggle"><a class="btn-floating btn-large bg-color" href=javascript:; rel="external nofollow noreferrer" title=偏好设置><i class="fas fa-cog"></i></a></div></div></div><div class="col s12 floating-col-item"><div id=floating-toc-btn data-umami-event-tocbtn="toc btn click" class=hide-on-med-and-down style=display:none><a class="btn-floating btn-large bg-color" href=javascript:; rel="external nofollow noreferrer" title=显示/隐藏目录><i class="fas fa-list-ul"></i></a></div></div><div class="col s12 floating-col-item"><div id=to_comment data-umami-event-commentbtn="comment btn click" class=comment-scroll style=display:none><a class="btn-floating btn-large waves-effect waves-light" href=javascript:; title=直达评论><i class="fas fa-comments"></i></a></div></div><div class="col s12 floating-col-item"><div id=backTop data-umami-event-backtop="backtop click" class=top-scroll><a class="btn-floating btn-large waves-effect waves-light" href=# title=回到顶部><i class="fas fa-arrow-up"></i></a></div></div></div></div>
4<script>(()=>{var a,e,c=document.getElementById("to_comment"),t=(c&&document.getElementById("comments")?c.style.display="block":c&&((a=new MutationObserver(function(e){for(var t=0;t<e.length;t++)if(e[t].addedNodes.length)for(var n=0;n<e[t].addedNodes.length;n++){var o=e[t].addedNodes[n];if(1===o.nodeType&&("comments"===o.id||o.querySelector&&o.querySelector("#comments")))return c.style.display="block",void a.disconnect()}})).observe(document.body,{childList:!0,subtree:!0}),setTimeout(function(){a.disconnect()},5e3)),document.getElementById("floating-toc-btn"));t&&(document.getElementById("toc-content")||document.getElementById("aside-container")||document.getElementById("wiki-toc-aside"))?t.style.display="block":t&&((e=new MutationObserver(function(){(document.getElementById("toc-content")||document.getElementById("aside-container")||document.getElementById("wiki-toc-aside"))&&(t.style.display="block",e.disconnect())})).observe(document.body,{childList:!0,subtree:!0}),setTimeout(function(){e.disconnect()},5e3))})(),(()=>{var d,r,t,n,u,o,a,c=document.getElementById("floating-panel-wrap"),l=document.getElementById("floating-panel"),e=document.getElementById("fp-toggle");function i(){var e=parseFloat(d(t));return isNaN(e)?1:e}function f(e){e=Math.min(1.3,Math.max(.85,Math.round(100*e)/100)),document.documentElement.style.setProperty("--font-scale",String(e)),r(t,String(e)),n&&(n.textContent=Math.round(100*e)+"%"),s()}function s(){"undefined"!=typeof Matery&&Matery.events&&"function"==typeof Matery.events.refresh&&Matery.events.refresh()}function g(o,e,t,n){var a,c=document.getElementById(e),l=window.Matery&&window.Matery.effects,i=l&&l[o];c&&i&&i.available&&(Object.keys(i.available).forEach(function(e){var t=document.createElement("span"),n=(t.className="fp-fx-tag",t.setAttribute("data-effect",e),t.setAttribute("data-group",o),"panel.fx_"+e);t.textContent=u[n]||i.available[e].label||e,c.appendChild(t)}),document.querySelectorAll("#"+t+" .fp-seg-item, #"+e+" .fp-fx-tag").forEach(function(e){e.__fpBound||(e.__fpBound=!0,e.addEventListener("click",function(){r(n,e.getAttribute("data-effect")),location.reload()}))}),"off"===(a=d(n)||i.default||"off")||"random"===a||i.available[a]||(a="off"),document.querySelectorAll("#"+t+" .fp-seg-item, #"+e+" .fp-fx-tag").forEach(function(e){e.classList.toggle("fp-seg-active",e.getAttribute("data-effect")===a)}))}function m(){g("page","fp-fx-list-page","fp-effect-page","matery.effect.page"),g("mouse","fp-fx-list-mouse","fp-effect-mouse","matery.effect.mouse")}function y(e,t,n){var o,e=document.getElementById(e);e&&(o=d(t)||n,e.querySelectorAll(".fp-seg-item").forEach(function(e){e.classList.toggle("fp-seg-active",e.getAttribute("data-bg")===o),e.__bgBound||(e.__bgBound=!0,e.addEventListener("click",function(){e.classList.contains("fp-seg-disabled")||(r(t,e.getAttribute("data-bg")),location.reload())}))}))}function p(){y("fp-bg","matery.bg","off"),y("fp-loading","matery.loading","off")}function E(t){document.querySelectorAll("#fp-theme .fp-seg-item").forEach(function(e){e.classList.toggle("fp-seg-active",e.getAttribute("data-theme")===t)})}function b(n){document.querySelectorAll("#fp-lang .fp-seg-item").forEach(function(e){var t="trad"===e.getAttribute("data-lang");e.classList.toggle("fp-seg-active",1===n==t)})}function v(){var t,e=document.getElementById("fp-lang-row");e&&(t=e.scrollWidth>e.clientWidth+2,Array.prototype.forEach.call(a.options,function(e){e.text=t?e.getAttribute("data-flag")||e.text:e.getAttribute("data-label")}))}c&&l&&e&&(d=function(e){try{return localStorage.getItem(e)}catch(e){return null}},r=function(e,t){try{localStorage.setItem(e,t)}catch(e){}},e.addEventListener("click",function(e){e.preventDefault(),l.style.position="fixed",l.style.display="none"===l.style.display?"flex":"none"}),document.getElementById("fp-close").addEventListener("click",function(){l.style.display="none"}),document.addEventListener("click",function(e){"none"===l.style.display||c.contains(e.target)||(l.style.display="none")}),t="matery.font-scale",n=document.getElementById("fp-font-cur"),1!==(e=i())?f(e):n&&(n.textContent="100%"),document.getElementById("fp-font-minus").addEventListener("click",function(){f(i()-.1)}),document.getElementById("fp-font-plus").addEventListener("click",function(){f(i()+.1)}),document.getElementById("fp-font-reset").addEventListener("click",function(){r(t,"1"),document.documentElement.style.setProperty("--font-scale","1"),n&&(n.textContent="100%"),s()}),u={"panel.fx_sakura":"樱花","panel.fx_ripples":"水波","panel.fx_leaf":"落叶","panel.fx_snowdown":"飘雪","panel.fx_snowflake":"雪花","panel.fx_buble":"冒泡","panel.fx_canvas_nest":"网络","panel.fx_ribbon":"彩带","panel.fx_ribbon_dynamic":"动态彩带","panel.fx_clicklove":"爱心","panel.fx_popupText":"弹出文字","panel.fx_mouseStar":"星星","panel.fx_fireworks":"爆炸"},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",m):m(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",p):p(),o="Matery_Color_Scheme",document.querySelectorAll("#fp-theme .fp-seg-item").forEach(function(n){n.addEventListener("click",function(){var e=n.getAttribute("data-theme");if("auto"===e){document.documentElement.removeAttribute("data-user-color-scheme");try{Matery.utils.removeLS(o)}catch(e){}document.documentElement.setAttribute("data-user-color-scheme","auto");try{Matery.utils.setLS(o,"auto")}catch(e){}}else{document.documentElement.setAttribute("data-user-color-scheme",e);try{Matery.utils.setLS(o,e)}catch(e){}}E(e);var t=document.getElementById("color-toggle-icon");t&&(t.className="fas fa-"+("dark"===e?"sun":"moon"))})}),E((()=>{var e=document.documentElement.getAttribute("data-user-color-scheme");if(e&&"auto"!==e)return e;try{var t=Matery.utils.getLS(o);if(t)return t}catch(e){}return"light"})()),document.querySelectorAll("#fp-lang .fp-seg-item").forEach(function(n){n.addEventListener("click",function(e){e.stopPropagation();var e="trad"===n.getAttribute("data-lang")?1:2,t=window.Matery&&Matery.plugins&&Matery.plugins.languageToggle;t&&"function"==typeof t.setEncoding&&t.setEncoding(e),b(e)})}),b((()=>{try{if(window.Matery&&Matery.plugins&&Matery.plugins.languageToggle&&"function"==typeof Matery.plugins.languageToggle.getEncoding)return Matery.plugins.languageToggle.getEncoding()}catch(e){}return 2})()),a=document.getElementById("fp-lang-select"))&&(Array.prototype.forEach.call(a.options,function(e){e.setAttribute("data-label",e.text)}),v(),e=document.getElementById("fp-toggle"))&&e.addEventListener("click",function(){setTimeout(v,80)})})()</script>
4<script>window.MATERY_LANG={enable:!0,default_lang:"zh-cn",fallback_lang:"en",langs:["zh-cn","en"],lang_meta:{"zh-cn":{name:"简体中文",flag:"🇨🇳"},en:{name:"English",flag:"🇬🇧"}}}</script>
4<script>window.WIKI_CONFIG=window.WIKI_CONFIG||window.MATERY_LANG</script>
4<script>window.MATERY_I18N={codeLang:"代码语言",codeCopy:"复制代码",codeShrink:"收起代码",codeFullscreen:"全屏显示",codeExpand:"展开完整代码",copySuccess:"复制成功",copyFail:"复制失败",searchLoadFail:"搜索数据加载失败",searchFail:"搜索失败,请重试",searchPagefindFail:"Pagefind 索引未生成或加载失败",searchNoResult:"未找到相关结果",searchResultCount:"%s 条结果",searchShowMore:"显示更多(%s 条)",langDetectPrompt:"检测到您的浏览器语言为 %s,是否切换到对应语言版本?",imgRetry:"重新加载图片",hbeWrongPass:"抱歉,密码不正确,请重试。"}</script>
4<script defer=defer src="/js/wiki.js?v=13.22"></script>
4<script src="/js/ana.js?v=13.22" async></script>
4<script type=module async>// var pagePath = window.location.pathname.replace(/\/$/,'') + '/';
5      import { pageviewCount } from "/libs/waline/pageview.js?v=3.15.2";
6        /**
7        * 检测对象是否是空对象(不包含任何可读属性)。
8        * 方法只既检测对象本身的属性,不检测从原型继承的属性。 
9        * null与undefined区别:
10        * 对已声明但未初始化的和未声明的变量执行typeof,都返回 "undefined" 。
11        * null表示一个空对象指针,typeof操作会返回 "object" 。*/
12      function isOwnEmpty(obj) {
13        for (var name in obj) {
14          if (obj.hasOwnProperty(name)) {
15            return false;
16          }
17        } return true;
18      }
19      function upDatePageview() {
20        const pvabort = pageviewCount({
21          serverURL: 'https://waline.17lai.site',
22          path: '/docs/',
23        });
24        setTimeout(() => pvabort(), 2000);
25
26        var wa_csp = "waline_container_site_pv";
27        var ewacsp=document.getElementById(wa_csp);
28        //ewacsp.style.display = 'inline';
29
30        var wa_cpv = "waline_container_page_pv";
31        var ewacpv=document.getElementById(wa_cpv);
32        if( !ewacpv ){
33          console.log("[waline]home page!");
34        }else{
35          if( isOwnEmpty(ewacpv.style) != true ){
36            ewacpv.style.display = 'inline';
37            console.log("[waline]update pageview count!");
38          }else{
39            console.log("[waline]ewacpv.style null!");
40          }
41        }
42      }
43      //upDatePageview();
44      function delayupDatePageview() {
45        setTimeout(function() { upDatePageview(); }, 3000);
46        console.log("[waline]delay update comment count!");
47      }
48      delayupDatePageview();</script>
48<link rel=preload as=image fetchpriority=high href=/medias_webp/featureimages/1.webp>
48<script>window.Matery=window.Matery||{},window.Matery.bannerConfig={enable:!0,bannerUrl:"/medias_webp/featureimages/1.webp",isHome:!1,bgEnabled:!0,bgDefault:"off"}</script>
48<script>window.Matery=window.Matery||{},window.Matery.coverConfig={duration:Number("180"),showIndicators:!0,autoLoop:!0,intervalTime:8e3,showPrevNext:!0}</script>
48<script defer=defer src="/js/search.js?v=13.22"></script>
48<script type=text/javascript>(()=>{var e,a=(window.CONFIG||{}).search||{local:{enable:!1},algolia:{enable:!1}},o=[],r=(a.local&&a.local.enable&&o.push("local"),a.algolia&&a.algolia.enable&&o.push("algolia"),a.pagefind&&a.pagefind.enable&&o.push("pagefind"),{local:"fas fa-search",algolia:"fab fa-algolia",pagefind:"fas fa-file-alt"}),l=(o.length<=1&&(e=document.getElementById("searchEngineCaret"))&&(e.style.display="none"),a.local&&a.local.enable&&a.local.preload&&document.addEventListener("DOMContentLoaded",function(){var e=s("local");e&&e.init(null)}),null),c={},i="search_engine";function s(e){var n;return c[e]||((n=window.SearchEngines&&window.SearchEngines[e])?(n=new n("local"===e?a.local:a.algolia),c[e]=n):null)}function d(e){var n,t;o.indexOf(e)<0||(l&&c[l]&&c[l].destroy(),l=e,Matery.utils.setLS(i,e),(n=document.getElementById("searchEngineIcon"))&&(n.className=r[e]||"fas fa-search"),(n=document.getElementById("searchInput"))&&(t=n.nextElementSibling)&&"LABEL"===t.tagName&&(t.textContent="algolia"===e?a.algolia.labels&&a.algolia.labels.input_placeholder||"Search for Posts":"请输入搜索的关键字 (Ctrl + K)"),(t=document.getElementById("searchResult"))&&(t.innerHTML=""),(e=s(e))&&t&&(e.init(t),n)&&n.value&&n.value.trim()&&e.search(n.value))}function n(){var e,n=document.getElementById("searchModal");n&&!n.matches(":popover-open")&&(n.showPopover(),n=document.getElementById("searchInput"),e=document.getElementById("searchResult"),n.value="",e&&(e.innerHTML='<div class="search-result-icon"><i class="fas fa-search fa-5x"></i></div>'),!l&&(l=(()=>{var e=Matery.utils.getLS(i);if(0<=o.indexOf(e))return e;if(e=a.default){if(0<=o.indexOf(e))return e;if(0<o.length)return console.warn('[search] 配置的默认引擎 "'+e+'" 未启用,降级为第一个可用引擎 "'+o[0]+'"'),o[0]}return 0<=o.indexOf("algolia")?"algolia":o[0]})(),n=document.getElementById("searchEngineIcon"))&&(n.className=r[l]||"fas fa-search"),(n=s(l))&&e&&(n.init(e),"algolia"===l)&&n._ensureClient&&n._ensureClient(function(){}),setTimeout(function(){document.getElementById("searchInput")?.focus()},50))}function u(){var e=document.getElementById("searchEngineMenu");e&&e.classList.remove("show")}document.addEventListener("keydown",function(e){(e.ctrlKey||e.metaKey)&&"k"===e.key&&(e.preventDefault(),n())}),document.addEventListener("input",function(e){var n;e.target&&"searchInput"===e.target.id&&l&&!e.isComposing&&(n=c[l])&&n.search&&n.search(e.target.value)}),document.addEventListener("compositionend",function(e){var n;e.target&&"searchInput"===e.target.id&&l&&(n=c[l])&&n.search&&n.search(e.target.value)}),document.addEventListener("click",function(e){var n,t=e.target.closest&&e.target.closest("#searchEngineMenu li[data-engine]");t?(d(t.dataset.engine),u()):(t=document.getElementById("searchEngineBtn"),(n=document.getElementById("searchEngineMenu"))&&t&&(e.target===t||t.contains&&t.contains(e.target))?o.length<=1||(n.classList.contains("show")?u():n.classList.add("show")):n&&n.classList.contains("show")&&u())}),document.addEventListener("keyup",function(e){"Escape"===e.key&&u()}),window.openSearchModal=n,window.closeSearchModal=function(){var e=document.getElementById("searchModal");e&&e.matches(":popover-open")&&e.hidePopover()},window.Matery=window.Matery||{},window.Matery.search={switchEngine:d,loadMore:function(){l&&c[l]&&c[l].loadMore&&c[l].loadMore()}}})(),(()=>{var s,e=new URL(location.href).searchParams.get("highlight");function n(){var e=document.querySelector("#articleContent")||document.querySelector(".post-body")||document.querySelector(".markdown-body");if(e){for(var n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null),t=[];n.nextNode();)(e=>{for(var n=e.parentNode;n;){var t=n.tagName?n.tagName.toLowerCase():"";if("pre"===t||"code"===t||"a"===t)return 1;if(n.classList&&(n.classList.contains("search-keyword")||n.classList.contains("token")))return 1;n=n.parentNode}})(n.currentNode)||t.push(n.currentNode);t.forEach(function(e){var n=e.nodeValue,t=n.toLowerCase(),a=!1;if(s.forEach(function(e){0<=t.indexOf(e)&&(a=!0)}),a){for(var o=document.createDocumentFragment(),r=n;0<r.length;){var l=-1,c="";if(s.forEach(function(e){var n=r.toLowerCase().indexOf(e);0<=n&&(l<0||n<l)&&(l=n,c=e)}),l<0){o.appendChild(document.createTextNode(r));break}0<l&&o.appendChild(document.createTextNode(r.substring(0,l)));var i=document.createElement("mark");i.className="search-keyword",i.appendChild(document.createTextNode(r.substring(l,l+c.length))),o.appendChild(i),r=r.substring(l+c.length)}e.parentNode.replaceChild(o,e)}})}}e&&0!==(s=e.split(" ").filter(function(e){return 0<e.length})).length&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",n):n())})()</script>
48<script src="/libs/materialize/materialize.min.js?v=2.3.3" defer=defer></script>
48<script src=https://lib.baomitu.com/masonry/4.2.2/masonry.pkgd.min.js defer=defer></script>
48<script src="/libs/imagesloaded/imagesloaded.pkgd.min.js?v=5.0.0" defer=defer></script>
48<script src=https://lib.baomitu.com/aos/2.3.4/aos.js defer=defer></script>
48<script defer=defer src="/js/events.js?v=13.22"></script>
48<script defer=defer src="/js/plugins.js?v=13.22"></script>
48<script>document.addEventListener("DOMContentLoaded",()=>Matery.plugins.githubCardsLoader.init()),document.addEventListener("pjax:complete",()=>Matery.plugins.githubCardsLoader.init())</script>
48<script>var bgActiveV=Matery.utils.getBgActive("off");"video"===bgActiveV&&Matery.utils.whenReady(function(){return Matery.plugins&&Matery.plugins.videobg},function(){Matery.plugins.videobg.init(BP.lg,Matery.utils.getLS("viewCount")),Matery.plugins.videobg.initThemeListener(BP.lg,Matery.utils.getLS("viewCount")),document.addEventListener("pjax:complete",function(){Matery.plugins.videobg.cleanup(),Matery.plugins.videobg.init(BP.lg,Matery.utils.getLS("viewCount"))})})</script>
48<script src=https://lib.baomitu.com/typed.js/2.1.0/typed.umd.js defer=defer></script>
48<script>document.addEventListener("DOMContentLoaded",function(){Matery.plugins.postTyped()})</script>
48<script>document.addEventListener("DOMContentLoaded",function(){Matery.plugins.subTitleTyped()})</script>
48<script>var tocSchemaStorageKey=Matery.utils.normalizePagePath().replace(/\/$/,"")+"/toc";Matery.utils.getLS(tocSchemaStorageKey)||Matery.utils.setLS(tocSchemaStorageKey,"show")</script>
48<script src=https://lib.baomitu.com/tocbot/4.36.4/tocbot.min.js></script>
48<script src="/js/toc-state.js?v=13.22"></script>
48<script>window.Matery=window.Matery||{},window.Matery.tocCfg={collapseDepth:0,headingSelector:"h2,h3,h4,h5,h6"}</script>
48<script>Matery.utils.whenReady(()=>Matery.plugins&&Matery.plugins.imgLazyload,()=>Matery.plugins.imgLazyload())</script>
48<script>var index,img,image,colorSchemaInitStorageKey="Matery_Color_Scheme_Now",colorToggleButtonSelector="#color-toggle-btn";function getRandomBackgroundPic(e){return"dark"==e?(index=Math.ceil(22*Math.random())-1,img="/medias_webp/featureimages/dark/","dark"):(index=Math.ceil(45*Math.random())-1,img="/medias_webp/featureimages/","light")}function setBackgroundPic(){window.__materyBgPicBound||(window.__materyBgPicBound=!0,document.addEventListener("theme-changed",function(e){var e=e.detail&&e.detail.scheme;e&&(getRandomBackgroundPic(e),e=document.getElementsByClassName("lazy-background")[0])&&(e.style.backgroundImage="url("+img+index+".webp)")}))}var bgActive=Matery.utils.getBgActive("off");if(1<Number(Matery.utils.getLS("viewCount"))&&"image"===bgActive)try{getRandomBackgroundPic(Matery.utils.getLS(colorSchemaInitStorageKey)),document.getElementsByClassName("lazy-background")[0].style.backgroundImage="url("+img+index+".webp)"}catch(e){console.log("随机背景图片 error.")}function clearLazyBackground(e){e.classList.remove("lazy-background"),e.classList.remove("bg-lazy-loading"),e.classList.remove("bg-lazy-loaded"),e.removeAttribute("bg-lazy"),e.style.setProperty("background-image","none","important")}if("off"===bgActive)for(var bgEls=Array.prototype.slice.call(document.getElementsByClassName("lazy-background")),i=0;i<bgEls.length;i++)clearLazyBackground(bgEls[i]);else{for(var bgEls2=Array.prototype.slice.call(document.getElementsByClassName("lazy-background")),j=0;j<bgEls2.length;j++)bgEls2[j].removeAttribute("bg-lazy"),bgEls2[j].classList.remove("bg-lazy-loading");if("video"===bgActive)for(var bgEls3=Array.prototype.slice.call(document.getElementsByClassName("lazy-background")),k=0;k<bgEls3.length;k++)clearLazyBackground(bgEls3[k]);"image"===bgActive&&setBackgroundPic()}</script>
48<script src=https://lib.baomitu.com/scrollprogress/3.0.2/scrollProgress.min.js defer=defer></script>
48<script src="/libs/lightGallery/js/lightgallery-all.min.js?v=1.4.0" defer=defer></script>
48<script>Matery.utils.whenReady(()=>Matery.plugins&&Matery.plugins.languageToggle,()=>Matery.plugins.languageToggle())</script>
48<script type=text/javascript>var viewCount=Matery.utils.getLS("viewCount");viewCount?(Matery.utils.setLS("viewCount",Number(viewCount)+1),console.log("[Matery]Welcome to visited again!")):(Matery.utils.setLS("viewCount",1),console.log("[Matery]Welcome! New Reader!"))</script>
48<script type=text/javascript>var themeStorage=window.localStorage;window.localStorage?(console.log("设定waline count title"),themeStorage.setItem("title","夜法之书")):console.log("浏览器不支持localstorage")</script>
48<script>var s;windowWidth>BP.fun&&2<Number(Matery.utils.getLS("viewCount"))&&((s=document.createElement("script")).src="/libs/live2d/autoload.js?v=13.22",document.body.appendChild(s))</script>
48<script src="/libs/tag-common/index.js?v=13.22" async></script>
48<script type=module>import { init, commentCount } from "/libs/waline/waline.min.js?v=3.15.2";
49
50  // 文章元信息区评论数独立显示(2026-08-08 修复)
51  // 不依赖评论组件懒加载(loadComments 滚动才触发 initWaline)——
52  // 评论数在页面顶部,应 import 后立即获取显示
53  // page.layout 限制:仅 post/friends/contact 有评论数元素(post-cover.ejs)
54  if ( false) {
55    try {
56      var _countAbort = commentCount({
57        serverURL: 'https://waline.17lai.site',
58        path: '/docs/',
59      });
60      setTimeout(function() { _countAbort(); }, 8000);
61      var _countEl = document.getElementById('waline_comments_count');
62      if (_countEl) {
63        _countEl.style.display = 'inline-block';
64        var _loadingEl = document.getElementById('waline_commentcount_loading_icon');
65        if (_loadingEl) _loadingEl.style.display = 'none';
66      }
67    } catch (err) { console.log('[waline-count][Error]', err); }
68  }
69
70  // var pagePath = window.location.pathname.replace(/\/$/,'') + '/';
71  const locale = {
72    lang: 'zh-cn',
73    nick: '🧊 昵称',
74    nickError: '昵称不能少于3个字符',
75    mail: '📧 邮箱',
76    mailError: '请填写正确的邮件地址',
77    link: '🔗 网址',
78    optional: '可选',
79    placeholder: '🤣一起来玩,留下你的足迹吧~。评论支持邮箱回复通知!📧\r\n 🚀支持注册登录,并支持weibo QQ Github 社交登录(⊙o⊙)!💖\r\n 💣请文明评论哦禁止恶意评论🈲\r\n ⚠️公开网络空间,请不要发表任何包含个人或其他人的隐私信息⛔',
80    sofa: '🌌 来发评论吧~',
81    submit: '发送留言',
82    like: '喜欢',
83    cancelLike: '取消喜欢',
84    reply: '回复',
85    cancelReply: '取消回复',
86    comment: '评论',
87    refresh: '刷新',
88    more: '加载更多评论...',
89    preview: '预览',
90    emoji: '表情',
91    uploadImage: '上传图片',
92    seconds: '秒前',
93    minutes: '分钟前',
94    hours: '小时前',
95    days: '天前',
96    now: '刚刚',
97    uploading: '正在上传',
98    login: '登录',
99    logout: '退出',
100    admin: '博主',
101    sticky: '置顶',
102    word: '个字',
103    wordHint: '评论字数应在 $0 到 $1 字之间!\n当前字数:$2',
104    anonymous: '匿名',
105    level0: '潜水',
106    level1: '冒泡',
107    level2: '吐槽',
108    level3: '活跃',
109    level4: '话痨',
110    level5: '传说',
111    gif: '表情包',
112    gifSearchPlaceholder: '搜索表情包',
113    profile: '个人资料',
114    approved: '通过',
115    waiting: '待审核',
116    spam: '垃圾',
117    unsticky: '取消置顶',
118    oldest: '按倒序',
119    latest: '按正序',
120    hottest: '按热度',
121    reactionTitle: '雁过留声!人过留名!',
122    reaction0: '赞一个',
123    reaction1: '踩一下',
124    reaction2: '有点酷',
125    reaction3: '看不懂',
126    reaction4: '啥玩意',
127    reaction5: '想睡觉',
128  };
129
130  function initWaline() {
131    console.log('[WALINE]init waline');
132    init({
133      el: '#waline',
134      locale,
135      serverURL: 'https://waline.17lai.site',
136      //path: "",
137      path: '/docs/',
138      avatar: 'mp',
139      emoji: [
140        '//fastly.jsdelivr.net/gh/walinejs/emojis@latest/weibo',
141      ],
142      lang: 'zh-CN',
143      dark: 'html[data-user-color-scheme="dark"]',
144      login: 'enable',
145      wordLimit: '1000',
146      pageSize: '10',
147      highlighter: (code, lang) => {
148  if (!window.Prism.languages[lang]) {
149    window.Prism.plugins.autoloader.loadLanguages(lang);
150  }
151
152  return window.Prism.highlight(
153    code,
154    window.Prism.languages[lang] || window.Prism.languages.text,
155    lang,
156  );
157}
158,
159      pageview: false,
160      comment: true,
161      reaction: [
162  'https://testingcf.jsdelivr.net/npm/@waline/emojis/tieba/tieba_agree.png',
163  'https://testingcf.jsdelivr.net/npm/@waline/emojis/tieba/tieba_look_down.png',
164  'https://testingcf.jsdelivr.net/npm/@waline/emojis/tieba/tieba_
164sunglasses.png',
165  'https://testingcf.jsdelivr.net/npm/@waline/emojis/tieba/tieba_pick_nose.png',
166  'https://testingcf.jsdelivr.net/npm/@waline/emojis/tieba/tieba_awkward.png',
167  'https://testingcf.jsdelivr.net/npm/@waline/emojis/tieba/tieba_sleep.png'
168]
169,
170      search: false,
171      imageUploader: false,
172      meta: ['nick', 'mail', 'link'],
173      recaptchaV3Key: '',
174      requiredMeta: ['nick', 'mail'],
175    });
176    Matery.utils.hideLoading('loading_data');
177
178    if (true) {
179      // 评论数初始显示已由顶层独立逻辑处理(import 后立即执行,不依赖懒加载)
180      // 这里仅绑定评论发送按钮:用户发布评论后刷新评论数
181      try {
182        var btnsubmit = document.body.getElementsByClassName('wl-btn primary');
183        if (typeof btnsubmit[0] !== "undefined" && typeof window.addEventListener !== "undefined") {
184          btnsubmit[0].addEventListener('click', function() {
185            setTimeout(function() {
186              try {
187                commentCount({
188                  serverURL: 'https://waline.17lai.site',
189                  path: '/docs/',
190                });
191              } catch (err) { console.log('[waline-count][Error]', err); }
192            }, 500);
193          }, false);
194        }
195      } catch (error) {
196        console.error("An error occurred while handling the element:", error);
197      }
198
199    }
200    
201    
202
203    if (typeof Matery !== 'undefined' && Matery.events && typeof Matery.events.refreshLayout === 'function') Matery.events.refreshLayout();
204  }
205  function loadWaline() {
206    try {
207      // 加载 Waline CSS 文件
208      const walineCss = document.createElement('link');
209      walineCss.rel = 'stylesheet';
210      walineCss.href = '/libs/waline/waline.min.css?v=3.15.2';
211      document.head.appendChild(walineCss);
212
213      // 加载 Waline commonjs 文件
214      //const walineJs = document.createElement('script');
215      //walineJs.src = '/libs/waline/waline.min.js?v=3.15.2';
216      //walineJs.async = true;
217      //walineJs.onload = initWaline;
218      //document.body.appendChild(walineJs);
219
220
221      // 动态导入 waline esm 脚本
222      const walineSrc = '/libs/waline/waline.min.js?v=3.15.2';
223      import(walineSrc)
224        .then(() => {
225          // 脚本加载成功后的初始化操作
226          initWaline();
227        })
228        .catch((error) => {
229          console.error('Failed to load waline script:', error);
230        });
231
232    } catch (err) {
233      console.log("[SHARE][Error] Failed to load Waline:", err);
234    }
235  }
236
237  // 评论懒加载统一入口(移植自 fluid 架构)
238  // 服务端 lazyload.js 已给 #comments 打 lazyload 标记:
239  //   - 带 lazyload → 滚动到可见区域才加载 waline(等待浏览器空闲)
240  //   - 无 lazyload(如 lazyload 关闭)→ 立即加载
241  // 兼容处理:爬虫/无 IO 浏览器由 waitElementVisible 内部判断,直接执行
242  setTimeout(function () {
243    Matery.utils.loadComments('#waline', function() {
244      loadWaline();
245    });
246  }, 1);</script>
246<script type=text/javascript defer=defer>"undefined"!=typeof Matery&&Matery.events&&"function"==typeof Matery.events.refreshLayout&&Matery.events.refreshLayout()</script>
246<script>window.Matery=window.Matery||{},window.Matery.effects={desktopOnly:!0,page:{default:"off",available:{sakura:{label:"樱花",url:"/libs/others/sakura.js?v=13.22",type:"page",params:{}},ripples:{label:"水波",url:"/libs/others/ripples.js?v=13.22",type:"page",params:{}},leaf:{label:"落叶",url:"/libs/others/ginkgo-leaf.js?v=13.22",type:"page",params:{}},snowdown:{label:"飘雪",url:"/libs/others/snow.js?v=13.22",type:"page",params:{}},snowflake:{label:"雪花",url:"/libs/others/snowflake.js?v=13.22",type:"page",params:{}},buble:{label:"冒泡",url:"/libs/others/buble.js?v=13.22",type:"page",params:{}},canvas_nest:{label:"网络",url:"/libs/background/canvas-nest.js?v=13.22",type:"page",params:{color:"0,0,255",pointColor:"0,0,255",opacity:.7,zIndex:-1,count:99}},ribbon:{label:"彩带",url:"/libs/background/ribbon.min.js?v=13.22",type:"page",params:{size:150,alpha:.6,zIndex:-1,clickChange:!0}},ribbon_dynamic:{label:"动态彩带",url:"/libs/background/ribbon-dynamic.js?v=13.22",type:"page",params:{}}}},mouse:{default:"off",available:{clicklove:{label:"爱心",url:"/libs/others/clicklove.js?v=13.22",type:"mouse"},popupText:{label:"弹出文字",url:"/libs/others/popupText.js?v=13.22",type:"mouse"},mouseStar:{label:"星星",url:"/libs/others/star.js?v=13.22",type:"mouse"},fireworks:{label:"爆炸",url:"/libs/others/fireworks.js?v=13.22",type:"mouse",deps:["/libs/anime/anime.min.js?v=3.2.2"]}}},cdn:""}</script>
246<script defer=defer src=/libs/prism/components/prism-core.min.js></script>
246<script defer=defer src=/libs/prism/plugins/autoloader/prism-autoloader.min.js></script>
246<script defer=defer src=/libs/prism/plugins/line-numbers/prism-line-numbers.min.js></script>
246<script>Matery.utils.whenReady(()=>Matery.plugins&&Matery.plugins.imageCaption,()=>Matery.plugins.imageCaption())</script>
246<script>Matery.utils.whenReady(()=>Matery.plugins&&Matery.plugins.codeWidget,()=>Matery.plugins.codeWidget())</script>
246<script src="/libs/instantpage/instantpage.min.js?v=5.2.0" type=module></script>
246<script defer=defer src="/js/boot.js?v=13.22"></script>
246<noscript><div class=noscript-warning>博客在允许 JavaScript 运行的环境下浏览效果更佳</div></noscript>
246<script defer>if (localStorage.viewCount > 1) {
247            (function (w, d, s, id) {
248            if (typeof (w.webpushr) !== 'undefined' || isBot) return; 
249            w.webpushr = w.webpushr || function () { (w.webpushr.q = w.webpushr.q || []).push(arguments) }; 
250            var js, fjs = d.getElementsByTagName(s)[0]; 
251            js = d.createElement(s); 
252            js.id = id; 
253            js.async = true; 
254            js.src = "https://cdn.webpushr.com/app.min.js";
255            fjs.parentNode.appendChild(js);
256            }(window, document, 'script', 'webpushr-jssdk'));
257            webpushr('setup', { 'key': 'BDHamjevXR9yPJrttxl80MjCYEwm3CKzwsi3rwMXxq4Lnbzhr2fNQARqXJVhfBn_ucmy9QHixa3qps8eEFXBwmw' });
258        }</script>
258</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.