This commit is contained in:
naiba committed 2022-05-17 15:58:37 +00:00
1 parent 2634e0a57d
commit c65dcaa5f6
155 files changed
+1032 -1601

No files matched your search

-1
View File
@@ -1 +0,0 @@
const Io="modulepreload",Ms={},Oo="/",rn=function(t,n){return!n||n.length===0?t():Promise.all(n.map(s=>{if(s=`${Oo}${s}`,s in Ms)return;Ms[s]=!0;const r=s.endsWith(".css"),o=r?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${o}`))return;const i=document.createElement("link");if(i.rel=r?"stylesheet":Io,r||(i.as="script",i.crossOrigin=""),i.href=s,document.head.appendChild(i),r)return new Promise((l,c)=>{i.addEventListener("load",l),i.addEventListener("error",()=>c(new Error(`Unable to preload CSS for ${s}`)))})})).then(()=>t())};function ss(e,t){const n=Object.create(null),s=e.split(",");for(let r=0;r<s.length;r++)n[s[r]]=!0;return t?r=>!!n[r.toLowerCase()]:r=>!!n[r]}const Ro="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Mo=ss(Ro);function gr(e){return!!e||e===""}function rs(e){if(M(e)){const t={};for(let n=0;n<e.length;n++){const s=e[n],r=pe(s)?No(s):rs(s);if(r)for(const o in r)t[o]=r[o]}return t}else{if(pe(e))return e;if(fe(e))return e}}const So=/;(?![^(]*\))/g,Fo=/:(.+)/;function No(e){const t={};return e.split(So).forEach(n=>{if(n){const s=n.split(Fo);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ut(e){let t="";if(pe(e))t=e;else if(M(e))for(let n=0;n<e.length;n++){const s=ut(e[n]);s&&(t+=s+" ")}else if(fe(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()}const xe=e=>pe(e)?e:e==null?"":M(e)||fe(e)&&(e.toString===xr||!H(e.toString))?JSON.stringify(e,mr,2):String(e),mr=(e,t)=>t&&t.__v_isRef?mr(e,t.value):vt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r])=>(n[`${s} =>`]=r,n),{})}:vr(t)?{[`Set(${t.size})`]:[...t.values()]}:fe(t)&&!M(t)&&!yr(t)?String(t):t,Z={},mt=[],Re=()=>{},Ho=()=>!1,Uo=/^on[^a-z]/,Vt=e=>Uo.test(e),os=e=>e.startsWith("onUpdate:"),ye=Object.assign,is=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Bo=Object.prototype.hasOwnProperty,q=(e,t)=>Bo.call(e,t),M=Array.isArray,vt=e=>xn(e)==="[object Map]",vr=e=>xn(e)==="[object Set]",H=e=>typeof e=="function",pe=e=>typeof e=="string",ls=e=>typeof e=="symbol",fe=e=>e!==null&&typeof e=="object",br=e=>fe(e)&&H(e.then)&&H(e.catch),xr=Object.prototype.toString,xn=e=>xr.call(e),Do=e=>xn(e).slice(8,-1),yr=e=>xn(e)==="[object Object]",cs=e=>pe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ot=ss(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),yn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},jo=/-(\w)/g,He=yn(e=>e.replace(jo,(t,n)=>n?n.toUpperCase():"")),Ko=/\B([A-Z])/g,kt=yn(e=>e.replace(Ko,"-$1").toLowerCase()),wn=yn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Sn=yn(e=>e?`on${wn(e)}`:""),Ut=(e,t)=>!Object.is(e,t),Fn=(e,t)=>{for(let n=0;n<e.length;n++)e[n](t)},ln=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Wo=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Ss;const qo=()=>Ss||(Ss=typeof globalThis!="undefined"?globalThis:typeof self!="undefined"?self:typeof window!="undefined"?window:typeof global!="undefined"?global:{});let Fe;class Vo{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&Fe&&(this.parent=Fe,this.index=(Fe.scopes||(Fe.scopes=[])).push(this)-1)}run(t){if(this.active){const n=Fe;try{return Fe=this,t()}finally{Fe=n}}}on(){Fe=this}off(){Fe=this.parent}stop(t){if(this.active){let n,s;for(n=0,s=this.effects.length;n<s;n++)this.effects[n].stop();for(n=0,s=this.cleanups.length;n<s;n++)this.cleanups[n]();if(this.scopes)for(n=0,s=this.scopes.length;n<s;n++)this.scopes[n].stop(!0);if(this.parent&&!t){const r=this.parent.scopes.pop();r&&r!==this&&(this.parent.scopes[this.index]=r,r.index=this.index)}this.active=!1}}}function zo(e,t=Fe){t&&t.active&&t.effects.push(e)}const us=e=>{const t=new Set(e);return t.w=0,t.n=0,t},wr=e=>(e.w&Ge)>0,kr=e=>(e.n&Ge)>0,Yo=({deps:e})=>{if(e.length)for(let t=0;t<e.length;t++)e[t].w|=Ge},Jo=e=>{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s<t.length;s++){const r=t[s];wr(r)&&!kr(r)?r.delete(e):t[n++]=r,r.w&=~Ge,r.n&=~Ge}t.length=n}},Wn=new WeakMap;let Lt=0,Ge=1;const qn=30;let Ie;const rt=Symbol(""),Vn=Symbol("");class as{constructor(t,n=null,s){this.fn=t,this.scheduler=n,this.active=!0,this.deps=[],this.parent=void 0,zo(this,s)}run(){if(!this.active)return this.fn();let t=Ie,n=Ze;for(;t;){if(t===this)return;t=t.parent}try{return this.parent=Ie,Ie=this,Ze=!0,Ge=1<<++Lt,Lt<=qn?Yo(this):Fs(this),this.fn()}finally{Lt<=qn&&Jo(this),Ge=1<<--Lt,Ie=this.parent,Ze=n,this.parent=void 0,this.deferStop&&this.stop()}}stop(){Ie===this?this.deferStop=!0:this.active&&(Fs(this),this.onStop&&this.onStop(),this.active=!1)}}function Fs(e){const{deps:t}=e;if(t.length){for(let n=0;n<t.length;n++)t[n].delete(e);t.length=0}}let Ze=!0;const $r=[];function $t(){$r.push(Ze),Ze=!1}function Et(){const e=$r.pop();Ze=e===void 0?!0:e}function Te(e,t,n){if(Ze&&Ie){let s=Wn.get(e);s||Wn.set(e,s=new Map);let r=s.get(n);r||s.set(n,r=us()),Er(r)}}function Er(e,t){let n=!1;Lt<=qn?kr(e)||(e.n|=Ge,n=!wr(e)):n=!e.has(Ie),n&&(e.addLine truncated
+1
View File
@@ -0,0 +1 @@
const Si="modulepreload",As={},Ti="/",Ai=function(t,n){return!n||n.length===0?t():Promise.all(n.map(s=>{if(s=`${Ti}${s}`,s in As)return;As[s]=!0;const r=s.endsWith(".css"),i=r?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${i}`))return;const o=document.createElement("link");if(o.rel=r?"stylesheet":Si,r||(o.as="script",o.crossOrigin=""),o.href=s,document.head.appendChild(o),r)return new Promise((l,c)=>{o.addEventListener("load",l),o.addEventListener("error",()=>c(new Error(`Unable to preload CSS for ${s}`)))})})).then(()=>t())};function es(e,t){const n=Object.create(null),s=e.split(",");for(let r=0;r<s.length;r++)n[s[r]]=!0;return t?r=>!!n[r.toLowerCase()]:r=>!!n[r]}const Li="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Pi=es(Li);function fr(e){return!!e||e===""}function ts(e){if(O(e)){const t={};for(let n=0;n<e.length;n++){const s=e[n],r=he(s)?Oi(s):ts(s);if(r)for(const i in r)t[i]=r[i]}return t}else{if(he(e))return e;if(ue(e))return e}}const Ii=/;(?![^(]*\))/g,Mi=/:(.+)/;function Oi(e){const t={};return e.split(Ii).forEach(n=>{if(n){const s=n.split(Mi);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ct(e){let t="";if(he(e))t=e;else if(O(e))for(let n=0;n<e.length;n++){const s=ct(e[n]);s&&(t+=s+" ")}else if(ue(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()}const be=e=>he(e)?e:e==null?"":O(e)||ue(e)&&(e.toString===_r||!F(e.toString))?JSON.stringify(e,dr,2):String(e),dr=(e,t)=>t&&t.__v_isRef?dr(e,t.value):mt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r])=>(n[`${s} =>`]=r,n),{})}:hr(t)?{[`Set(${t.size})`]:[...t.values()]}:ue(t)&&!O(t)&&!gr(t)?String(t):t,Z={},gt=[],Me=()=>{},Ui=()=>!1,Ri=/^on[^a-z]/,Wt=e=>Ri.test(e),ns=e=>e.startsWith("onUpdate:"),xe=Object.assign,ss=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Fi=Object.prototype.hasOwnProperty,q=(e,t)=>Fi.call(e,t),O=Array.isArray,mt=e=>mn(e)==="[object Map]",hr=e=>mn(e)==="[object Set]",F=e=>typeof e=="function",he=e=>typeof e=="string",rs=e=>typeof e=="symbol",ue=e=>e!==null&&typeof e=="object",pr=e=>ue(e)&&F(e.then)&&F(e.catch),_r=Object.prototype.toString,mn=e=>_r.call(e),Ni=e=>mn(e).slice(8,-1),gr=e=>mn(e)==="[object Object]",is=e=>he(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Lt=es(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),vn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Hi=/-(\w)/g,Ne=vn(e=>e.replace(Hi,(t,n)=>n?n.toUpperCase():"")),Bi=/\B([A-Z])/g,yt=vn(e=>e.replace(Bi,"-$1").toLowerCase()),bn=vn(e=>e.charAt(0).toUpperCase()+e.slice(1)),On=vn(e=>e?`on${bn(e)}`:""),Ft=(e,t)=>!Object.is(e,t),Un=(e,t)=>{for(let n=0;n<e.length;n++)e[n](t)},sn=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Di=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Ls;const ji=()=>Ls||(Ls=typeof globalThis!="undefined"?globalThis:typeof self!="undefined"?self:typeof window!="undefined"?window:typeof global!="undefined"?global:{});let Re;class qi{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&Re&&(this.parent=Re,this.index=(Re.scopes||(Re.scopes=[])).push(this)-1)}run(t){if(this.active){const n=Re;try{return Re=this,t()}finally{Re=n}}}on(){Re=this}off(){Re=this.parent}stop(t){if(this.active){let n,s;for(n=0,s=this.effects.length;n<s;n++)this.effects[n].stop();for(n=0,s=this.cleanups.length;n<s;n++)this.cleanups[n]();if(this.scopes)for(n=0,s=this.scopes.length;n<s;n++)this.scopes[n].stop(!0);if(this.parent&&!t){const r=this.parent.scopes.pop();r&&r!==this&&(this.parent.scopes[this.index]=r,r.index=this.index)}this.active=!1}}}function Ki(e,t=Re){t&&t.active&&t.effects.push(e)}const os=e=>{const t=new Set(e);return t.w=0,t.n=0,t},mr=e=>(e.w&Ge)>0,vr=e=>(e.n&Ge)>0,Wi=({deps:e})=>{if(e.length)for(let t=0;t<e.length;t++)e[t].w|=Ge},zi=e=>{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s<t.length;s++){const r=t[s];mr(r)&&!vr(r)?r.delete(e):t[n++]=r,r.w&=~Ge,r.n&=~Ge}t.length=n}},Dn=new WeakMap;let Tt=0,Ge=1;const jn=30;let Pe;const rt=Symbol(""),qn=Symbol("");class ls{constructor(t,n=null,s){this.fn=t,this.scheduler=n,this.active=!0,this.deps=[],this.parent=void 0,Ki(this,s)}run(){if(!this.active)return this.fn();let t=Pe,n=Xe;for(;t;){if(t===this)return;t=t.parent}try{return this.parent=Pe,Pe=this,Xe=!0,Ge=1<<++Tt,Tt<=jn?Wi(this):Ps(this),this.fn()}finally{Tt<=jn&&zi(this),Ge=1<<--Tt,Pe=this.parent,Xe=n,this.parent=void 0,this.deferStop&&this.stop()}}stop(){Pe===this?this.deferStop=!0:this.active&&(Ps(this),this.onStop&&this.onStop(),this.active=!1)}}function Ps(e){const{deps:t}=e;if(t.length){for(let n=0;n<t.length;n++)t[n].delete(e);t.length=0}}let Xe=!0;const br=[];function wt(){br.push(Xe),Xe=!1}function kt(){const e=br.pop();Xe=e===void 0?!0:e}function Se(e,t,n){if(Xe&&Pe){let s=Dn.get(e);s||Dn.set(e,s=new Map);let r=s.get(n);r||s.set(n,r=os()),xr(r)}}function xr(e,t){let n=!1;Tt<=jn?vr(e)||(e.n|=Ge,n=!mr(e)):n=!e.has(Pe),n&&(e.addLine truncated
@@ -1,13 +0,0 @@
import{g as Sr,u as Er,k as wr,w as Ct,i as jr,l as Pr,o as Ir,c as kr,m as Cr}from"../app.54944ef9.js";/*! @docsearch/js 3.0.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */function Dt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function P(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Dt(Object(n),!0).forEach(function(r){Dr(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Dt(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Oe(e){return Oe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Oe(e)}function Dr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ut(){return ut=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ut.apply(this,arguments)}function xr(e,t){if(e==null)return{};var n,r,o=function(i,u){if(i==null)return{};var s,l,c={},d=Object.keys(i);for(l=0;l<d.length;l++)s=d[l],u.indexOf(s)>=0||(c[s]=i[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Fe(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,r){var o=n==null?null:typeof Symbol!="undefined"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var a,i,u=[],s=!0,l=!1;try{for(o=o.call(n);!(s=(a=o.next()).done)&&(u.push(a.value),!r||u.length!==r);s=!0);}catch(c){l=!0,i=c}finally{try{s||o.return==null||o.return()}finally{if(l)throw i}}return u}}(e,t)||qn(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Be(e){return function(t){if(Array.isArray(t))return lt(t)}(e)||function(t){if(typeof Symbol!="undefined"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}(e)||qn(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function qn(e,t){if(e){if(typeof e=="string")return lt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?lt(e,t):void 0}}function lt(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var E,_e,Mn,xt,Hn,Ve={},Ot=[],Ar=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function z(e,t){for(var n in t)e[n]=t[n];return e}function Un(e){var t=e.parentNode;t&&t.removeChild(e)}function F(e,t,n){var r,o,a,i=arguments,u={};for(a in t)a=="key"?r=t[a]:a=="ref"?o=t[a]:u[a]=t[a];if(arguments.length>3)for(n=[n],a=3;a<arguments.length;a++)n.push(i[a]);if(n!=null&&(u.children=n),typeof e=="function"&&e.defaultProps!=null)for(a in e.defaultProps)u[a]===void 0&&(u[a]=e.defaultProps[a]);return ge(e,u,r,o,null)}function ge(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:o==null?++E.__v:o};return E.vnode!=null&&E.vnode(a),a}function Q(e){return e.children}function B(e,t){this.props=e,this.context=t}function Se(e,t){if(t==null)return e.__?Se(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?Se(e):null}function Fn(e){var t,n;if((e=e.__)!=null&&e.__c!=null){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null){e.__e=e.__c.base=n.__e;break}return Fn(e)}}function st(e){(!e.__d&&(e.__d=!0)&&_e.push(e)&&!ze.__r++||xt!==E.debounceRendering)&&((xt=E.debounceRendering)||Mn)(ze)}function ze(){for(var e;ze.__r=_e.length;)e=_e.sort(function(t,n){return t.__v.__b-n.__v.__b}),_e=[],e.some(function(t){var n,r,o,a,i,u;t.__d&&(i=(a=(n=t).__v).__e,(u=n.__P)&&(r=[],(o=z({},a)).__v=a.__v+1,St(u,a,o,n.__n,u.ownerSVGElement!==void 0,a.__h!=null?[i]:null,r,i==null?Se(a):i,a.__h),Kn(r,a),a.__e!=i&&Fn(a)))})}function Bn(e,t,n,r,o,a,i,u,s,l){var c,d,m,p,v,h,y,_=r&&r.__k||Ot,g=_.length;for(n.__k=[],c=0;c<t.length;c++)if((p=n.__k[c]=(p=t[c])==null||typeof p=="boolean"?null:typeof p=="string"||typeof p=="number"?ge(null,p,null,null,p):Array.isArray(p)?ge(Q,{children:p},null,null,null):p.__b>0?ge(p.type,p.props,p.key,null,p.__v):p)!=null){if(p.__=n,p.__b=n.__b+1,(m=_[c])===null||m&&p.key==m.key&&p.type===m.type)_[c]=void 0;else for(d=0;d<g;d++){if((m=_[d])&&p.key==m.key&&p.type===m.type){_[d]=void 0;break}m=null}St(e,p,m=m||Ve,o,a,i,u,s,l),v=p.__e,(d=p.ref)&&m.ref!=d&&(y||(y=[]),m.ref&&y.push(m.ref,null,p),y.push(d,p.__c||v,p)),v!=null?(h==null&&(h=v),typeof p.type=="function"&&p.__k!=null&&p.__k===m.__k?p.__d=s=Vn(p,s,e):s=zn(e,p,m,_,v,s),l||n.type!=="option"?typeof n.type=="function"&&(n.__d=s):e.value=""):s&&m.__e==s&&s.parentNode!=e&&(s=Se(m))}for(n.__e=h,c=g;c--;)_[c]!=null&&(typeof n.type=="function"&&_[c].__e!=null&&_[c].__e==n.__d&&(n.__d=Se(r,c+1)),Jn(_[c],_[c]));if(y)for(c=0;c<y.length;c++)Wn(y[c],y[++c],y[++c])}function Vn(e,t,n){var r,o;for(r=0;r<e.__k.length;r++)(o=e.__k[r])&&(o.__=e,t=typeof o.type=="function"?Vn(o,t,n):zn(n,o,o,e.__k,o.__e,t));return t}function K(e,t){return t=t||[],e==null||typeof e=="boolean"||(Array.isArray(e)?e.some(function(n){K(n,t)}):t.push(e)),t}function zn(e,t,n,r,o,a){var i,u,s;if(t.__d!==void 0)i=t.__d,t.__d=void 0;else if(n==null||o!=a||o.parentNode==null)e:if(a==null||a.parentNode!==e)e.appendChild(o),i=null;else{for(u=a,s=0;(u=u.nextSibling)&&s<r.length;s+=2)if(u==o)break e;e.insertBefore(o,a),i=a}return i!==void 0?i:o.nextSibling}function At(e,t,n){t[0]==="-"?e.setProperty(t,n):e[t]=n==null?"":typeof n!="number"||Ar.test(t)?n:n+"px"}function ke(e,t,n,r,o){var a;e:if(t==="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof r=="string"&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||At(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||At(e.style,t,n[t])}else if(t[0]==="o"&&t[1]==="n")a=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r||e.addEventListener(t,a?Rt:Nt,a):e.removeEventListener(t,a?Rt:Nt,a);else if(t!=="dangerouslySetInnerHTML"){if(o)t=t.replace(/xlink[H:h]/,"h").replace(/sName$/,"s");else if(t!=="href"&&t!=="list"&&t!=="form"&&t!=="download"&&t in e)try{e[t]=n==null?"":n;break e}catch{}typeof n=="function"||(n!=null&&(n!==!1||t[0]==="a"&&t[1]==="r")?e.setAttribute(t,n):e.removeAttribute(t))}}function Nt(e){this.l[e.type+!1](E.event?E.event(e):e)}function Rt(e){this.l[e.type+!0](E.event?E.event(e):e)}function St(e,t,n,r,o,a,i,u,s){var l,c,d,m,p,v,h,y,_,g,b,O=t.type;if(t.constructor!==void 0)return null;n.__h!=null&&(s=n.__h,u=t.__e=n.__e,t.__h=null,a=[u]),(l=E.__b)&&l(t);try{e:if(typeof O=="function"){if(y=t.props,_=(l=O.contextType)&&r[l.__c],g=l?_?_.props.value:l.__:r,n.__c?h=(c=t.__c=n.__c).__=c.__E:("prototype"i Line truncated
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function nt(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function on(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function te(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?on(Object(n),!0).forEach(function(r){uo(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):on(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function uo(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function an(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Ae(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?an(Object(n),!0).forEach(function(r){rr(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):an(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function rr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function lo(e){return function(t){if(Array.isArray(t))return rt(t)}(e)||function(t){if(typeof Symbol!="undefined"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}(e)||function(t,n){if(!!t){if(typeof t=="string")return rt(t,n);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return rt(t,n)}}(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function rt(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function cn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function un(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?cn(Object(n),!0).forEach(function(r){so(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cn(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function so(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ne(e){return Boolean(e.execute)}function fo(e,t){return n=e,Boolean(n==null?void 0:n.execute)?un(un({},e),{},{requests:e.queries.map(function(r){return{query:r,sourceId:t,transformResponse:e.transformResponse}})}):{items:e,sourceId:t};var n}function po(e){var t=e.reduce(function(n,r){if(!Ne(r))return n.push(r),n;var o=r.searchClient,a=r.execute,i=r.requests,u=n.find(function(c){return Ne(r)&&Ne(c)&&c.searchClient===o&&c.execute===a});if(u){var s;(s=u.items).push.apply(s,lo(i))}else{var l={execute:a,items:i,searchClient:o};n.push(l)}return n},[]).map(function(n){if(!Ne(n))return Promise.resolve(n);var r=n,o=r.execute,a=r.items;return o({searchClient:r.searchClient,requests:a})});return Promise.all(t).then(function(n){return je(n)})}function mo(e,t){return t.map(function(n){var r=e.filter(function(u){return u.sourceId===n.sourceId}),o=r.map(function(u){return u.items}),a=r[0].transformResponse,i=a?a(function(u){var s=u.map(function(l){var c;return De(De({},l),{},{hits:(c=l.hits)===null||c===void 0?void 0:c.map(function(d){return De(De({},d),{},{__autocomplete_indexName:l.index,__autocomplete_queryID:l.queryID})})})});return{results:s,hits:s.map(function(l){return l.hits}).filter(Boolean),facetHits:s.map(function(l){var c;return(c=l.facetHits)===null||c===void 0?void 0:c.map(function(d){return{label:d.value,count:d.count,_highlightResult:{label:{value:d.highlighted}}}})}).filter(Boolean)}}(o)):o;return i.every(Boolean),'The `getItems` function from source "'.concat(n.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),`.
Did you forget to return items?
See: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems`),{source:n,items:i}})}var ho=["event","nextState","props","query","refresh","store"];function ln(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function me(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?ln(Object(n),!0).forEach(function(r){vo(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ln(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function vo(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yo(e,t){if(e==null)return{};var n,r,o=function(i,u){if(i==null)return{};var s,l,c={},d=Object.keys(i);for(l=0;l<d.length;l++)s=d[l],u.indexOf(s)>=0||(c[s]=i[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var sn,ot,Re,de=null,fn=(sn=-1,ot=-1,Re=void 0,function(e){var t=++sn;return Promise.resolve(e).then(function(n){return Re&&t<ot?Re:(ot=t,Re=n,n)})});function re(e){var t=e.event,n=e.nextState,r=n===void 0?{}:n,o=e.props,a=e.query,i=e.refresh,u=e.store,s=yo(e,ho);de&&o.environment.clearTimeout(de);var l=s.setCollections,c=s.setIsOpen,d=s.setQuery,m=s.setActiveItemId,p=s.setStatus;if(d(a),m(o.defaultActiveItemId),!a&&o.openOnFocus===!1){var v,h=u.getState().collections.map(function(g){return me(me({},g),{},{items:[]})});p("idle"),l(h),c((v=r.isOpen)!==null&&v!==void 0?v:o.shouldPanelOpen({state:u.getState()}));var y=Zt(fn(h).then(function(){return Promise.resolve()}));return u.pendingRequests.add(y)}p("loading"),de=o.environment.setTimeout(function(){p("stalled")},o.stallThreshold);var _=Zt(fn(o.getSources(me({query:a,refresh:i,state:u.getState()},s)).then(function(g){return Promise.all(g.map(function(b){return Promise.resolve(b.getItems(me({query:a,refresh:i,state:u.getState()},s))).then(function(O){return fo(O,b.sourceId)})})).then(po).then(function(b){return mo(b,g)}).then(function(b){return function(O){var S=O.collections,I=O.props,D=O.state,A=S.reduce(function(k,N){return Ae(Ae({},k),{},rr({},N.source.sourceId,Ae(Ae({},N.source),{},{getItems:function(){return je(N.items)}})))},{});return je(I.reshape({sources:Object.values(A),sourcesBySourceId:A,state:D})).filter(Boolean).map(function(k){return{source:k,items:k.getItems()}})}({collections:b,props:o,state:u.getState()})})}))).then(function(g){var b;p("idle"),l(g);var O=o.shouldPanelOpen({state:u.getState()});c((b=r.isOpen)!==null&&b!==void 0?b:o.openOnFocus&&!a&&O||O);var S=ae(u.getState());if(u.getState().activeItemId!==null&&S){var I=S.item,D=S.itemInputValue,A=S.itemUrl,k=S.source;k.onActive(me({event:t,item:I,itemInputValue:D,itemUrl:A,refresh:i,source:k,state:u.getState()},s))}}).finally(function(){p("idle"),de&&o.environment.clearTimeout(de)});return u.pendingRequests.add(_)}var _o=["event","props","refresh","store"];function pn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function G(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?pn(Object(n),!0).forEach(function(r){go(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pn(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function go(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function bo(e,t){if(e==null)return{};var n,r,o=function(i,u){if(i==null)return{};var s,l,c={},d=Object.keys(i);for(l=0;l<d.length;l++)s=d[l],u.indexOf(s)>=0||(c[s]=i[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Oo=["props","refresh","store"],So=["inputElement","formElement","panelElement"],Eo=["inputElement"],wo=["inputElement","maxLength"],jo=["item","source"];function mn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function T(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?mn(Object(n),!0).forEach(function(r){Po(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):mn(Object(n)).forEach(function(r){Object.definePr Line truncated
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function at(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Qo(e,t){if(e==null)return{};var n,r,o=function(i,u){if(i==null)return{};var s,l,c={},d=Object.keys(i);for(l=0;l<d.length;l++)s=d[l],u.indexOf(s)>=0||(c[s]=i[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Yo(e){var t=e.translations,n=t===void 0?{}:t,r=Qo(e,Jo),o=n.noResultsText,a=o===void 0?"No results for":o,i=n.suggestedQueryText,u=i===void 0?"Try searching for":i,s=n.reportMissingResultsText,l=s===void 0?"Believe this query should return results?":s,c=n.reportMissingResultsLinkText,d=c===void 0?"Let us know.":c,m=r.state.context.searchSuggestions;return f.createElement("div",{className:"DocSearch-NoResults"},f.createElement("div",{className:"DocSearch-Screen-Icon"},f.createElement(Ko,null)),f.createElement("p",{className:"DocSearch-Title"},a,' "',f.createElement("strong",null,r.state.query),'"'),m&&m.length>0&&f.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},f.createElement("p",{className:"DocSearch-Help"},u,":"),f.createElement("ul",null,m.slice(0,3).reduce(function(p,v){return[].concat($o(p),[f.createElement("li",{key:v},f.createElement("button",{className:"DocSearch-Prefill",key:v,type:"button",onClick:function(){r.setQuery(v.toLowerCase()+" "),r.refresh(),r.inputRef.current.focus()}},v))])},[]))),r.getMissingResultsUrl&&f.createElement("p",{className:"DocSearch-Help"},"".concat(l," "),f.createElement("a",{href:r.getMissingResultsUrl({query:r.state.query}),target:"_blank",rel:"noopener noreferrer"},d)))}var Go=["hit","attribute","tagName"];function gn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function bn(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?gn(Object(n),!0).forEach(function(r){Zo(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):gn(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Zo(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Xo(e,t){if(e==null)return{};var n,r,o=function(i,u){if(i==null)return{};var s,l,c={},d=Object.keys(i);for(l=0;l<d.length;l++)s=d[l],u.indexOf(s)>=0||(c[s]=i[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function On(e,t){return t.split(".").reduce(function(n,r){return n!=null&&n[r]?n[r]:null},e)}function ne(e){var t=e.hit,n=e.attribute,r=e.tagName;return F(r===void 0?"span":r,bn(bn({},Xo(e,Go)),{},{dangerouslySetInnerHTML:{__html:On(t,"_snippetResult.".concat(n,".value"))||On(t,n)}}))}function Sn(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,r){var o=n==null?null:typeof Symbol!="undefined"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var a,i,u=[],s=!0,l=!1;try{for(o=o.call(n);!(s=(a=o.next()).done)&&(u.push(a.value),!r||u.length!==r);s=!0);}catch(c){l=!0,i=c}finally{try{s||o.return==null||o.return()}finally{if(l)throw i}}return u}}(e,t)||function(n,r){if(!!n){if(typeof n=="string")return En(n,r);var o=Object.prototype.toString.call(n).slice(8,-1);if(o==="Object"&&n.constructor&&(o=n.constructor.name),o==="Map"||o==="Set")return Array.from(n);if(o==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return En(n,r)}}(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function En(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ke(){return Ke=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ke.apply(this,arguments)}function _t(e){return e.collection&&e.collection.items.length!==0?f.createElement("section",{className:"DocSearch-Hits"},f.createElement("div",{className:"DocSearch-Hit-source"},e.title),f.createElement("ul",e.getListProps(),e.collection.items.map(function(t,n){return f.createElement(ea,Ke({key:[e.title,t.objectID].join(":"),item:t,index:n},e))}))):null}function ea(e){var t=e.item,n=e.index,r=e.renderIcon,o=e.renderAction,a=e.getItemProps,i=e.onItemClick,u=e.collection,s=e.hitComponent,l=Sn(f.useState(!1),2),c=l[0],d=l[1],m=Sn(f.useState(!1),2),p=m[0],v=m[1],h=f.useRef(null),y=s;return f.createElement("li",Ke({className:["DocSearch-Hit",t.__docsearch_parent&&"DocSearch-Hit--Child",c&&"DocSearch-Hit--deleting",p&&"DocSearch-Hit--favoriting"].filter(Boolean).join(" "),onTransitionEnd:function(){h.current&&h.current()}},a({item:t,source:u.source,onClick:function(){i(t)}})),f.createElement(y,{hit:t},f.createElement("div",{className:"DocSearch-Hit-Container"},r({item:t,index:n}),t.hierarchy[t.type]&&t.type==="lvl1"&&f.createElement("div",{className:"DocSearch-Hit-content-wrapper"},f.createElement(ne,{className:"DocSearch-Hit-title",hit:t,attribute:"hierarchy.lvl1"}),t.content&&f.createElement(ne,{className:"DocSearch-Hit-path",hit:t,attribute:"content"})),t.hierarchy[t.type]&&(t.type==="lvl2"||t.type==="lvl3"||t.type==="lvl4"||t.type==="lvl5"||t.type==="lvl6")&&f.createElement("div",{className:"DocSearch-Hit-content-wrapper"},f.createElement(ne,{className:"DocSearch-Hit-title",hit:t,attribute:"hierarchy.".concat(t.type)}),f.createElement(ne,{className:"DocSearch-Hit-path",hit:t,attribute:"hierarchy.lvl1"})),t.type==="content"&&f.createElement("div",{className:"DocSearch-Hit-content-wrapper"},f.createElement(ne,{className:"DocSearch-Hit-title",hit:t,attribute:"content"}),f.createElement(ne,{className:"DocSearch-Hit-path",hit:t,attribute:"hierarchy.lvl1"})),o({item:t,runDeleteTransition:function(_){d(!0),h.current=_},runFavoriteTransition:function(_){v(!0),h.current=_}}))))}function wn(e,t){return e.reduce(function(n,r){var o=t(r);return n.hasOwnProperty(o)||(n[o]=[]),n[o].length<5&&n[o].push(r),n},{})}function jn(e){return e}function ta(){}var ar=/(<mark>|<\/mark>)/g,na=RegExp(ar.source);function ir(e){var t,n,r,o,a,i=e;if(!i.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var u=((i.__docsearch_parent?(t=i.__docsearch_parent)===null||t===void 0||(n=t._highlightResult)===null||n===void 0||(r=n.hierarchy)===null||r===void 0?void 0:r.lvl0:(o=e._highlightResult)===null||o===void 0||(a=o.hierarchy)===null||a===void 0?void 0:a.lvl0)||{}).value;return u&&na.test(u)?u.replace(ar,""):u}function gt(){return gt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},gt.apply(this,arguments)}function ra(e){return f.createElement("div",{className:"DocSearch-Dropdown-Container"},e.state.collections.map(function(t){if(t.items.length===0)return null;var n=ir(t.items[0]);return f.createElement(_t,gt({},e,{key:t.source.sourceId,title:n,collection:t,renderIcon:function(r){var o,a=r.item,i=r.index;return f.createElement(f.Fragment,null,a.__docsearch_parent&&f.createElement("svg",{className:"DocSearch-Hit-Tree",viewBox:"0 0 24 54"},f.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},a.__docsearch_parent!==((o=t.items[i+1])===null||o===void 0?void 0:o.__docsearch_parent)?f.createElement("path",{d:"M8 6v21M20 27H8.3"}):f.createElement("path",{d:"M8 6v42M20 27H8.3"}))),f.createElement("div",{className:"DocSearch-Hit-icon"},f.createElement(Fo,{type:a.type})))},renderAction:function(){return f.createElement("div",{className:"DocSearch-Hit-action"},f.createElement(Ho,null))}}))}),e.resultsFooterComponent&&f.createElement("section",{className:"DocSearch-HitsFooter"},f.createElement(e.resultsFooterComponent,{state:e.state})))}var oa=["translations"];function We(){return We=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},We.apply(this,arguments)}function aa(e,t){if(e==null)return{};var n,r,o=function(i,u){if(i==null)return{};var s,l,c={},d=Object.keys(i);for(l=0;l<d.length;l++)s=d[l],u.indexOf(s)>=0||(c[s]=i[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ia(e){var t=e.translation Line truncated
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Rn(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Aa(e,t){if(e==null)return{};var n,r,o=function(i,u){if(i==null)return{};var s,l,c={},d=Object.keys(i);for(l=0;l<d.length;l++)s=d[l],u.indexOf(s)>=0||(c[s]=i[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Na(e){var t=e.appId,n=e.apiKey,r=e.indexName,o=e.placeholder,a=o===void 0?"Search docs":o,i=e.searchParameters,u=e.onClose,s=u===void 0?ta:u,l=e.transformItems,c=l===void 0?jn:l,d=e.hitComponent,m=d===void 0?Lo:d,p=e.resultsFooterComponent,v=p===void 0?function(){return null}:p,h=e.navigator,y=e.initialScrollY,_=y===void 0?0:y,g=e.transformSearchClient,b=g===void 0?jn:g,O=e.disableUserPersonalization,S=O!==void 0&&O,I=e.initialQuery,D=I===void 0?"":I,A=e.translations,k=A===void 0?{}:A,N=e.getMissingResultsUrl,R=k.footer,Ge=k.searchBox,Ze=Aa(k,Ca),Pe=xa(f.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),W=Pe[0],yr=Pe[1],wt=f.useRef(null),Xe=f.useRef(null),jt=f.useRef(null),Ie=f.useRef(null),ue=f.useRef(null),J=f.useRef(10),Pt=f.useRef(typeof window!="undefined"?window.getSelection().toString().slice(0,64):"").current,Y=f.useRef(D||Pt).current,It=function(j,C,q){return f.useMemo(function(){var M=vr(j,C);return M.addAlgoliaAgent("docsearch","3.0.0"),/docsearch.js \(.*\)/.test(M.transporter.userAgent.value)===!1&&M.addAlgoliaAgent("docsearch-react","3.0.0"),q(M)},[j,C,q])}(t,n,b),X=f.useRef(Pn({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(r),limit:10})).current,le=f.useRef(Pn({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(r),limit:X.getAll().length===0?7:4})).current,se=f.useCallback(function(j){if(!S){var C=j.type==="content"?j.__docsearch_parent:j;C&&X.getAll().findIndex(function(q){return q.objectID===C.objectID})===-1&&le.add(C)}},[X,le,S]),fe=f.useMemo(function(){return No({id:"docsearch",defaultActiveItemId:0,placeholder:a,openOnFocus:!0,initialState:{query:Y,context:{searchSuggestions:[]}},navigator:h,onStateChange:function(j){yr(j.state)},getSources:function(j){var C=j.query,q=j.state,M=j.setContext,$=j.setStatus;return C?It.search([{query:C,indexName:r,params:ct({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(J.current),"hierarchy.lvl2:".concat(J.current),"hierarchy.lvl3:".concat(J.current),"hierarchy.lvl4:".concat(J.current),"hierarchy.lvl5:".concat(J.current),"hierarchy.lvl6:".concat(J.current),"content:".concat(J.current)],snippetEllipsisText:"\u2026",highlightPreTag:"<mark>",highlightPostTag:"</mark>",hitsPerPage:20},i)}]).catch(function(x){throw x.name==="RetryError"&&$("error"),x}).then(function(x){var H=x.results[0],U=H.hits,br=H.nbHits,et=wn(U,function(tt){return ir(tt)});return q.context.searchSuggestions.length<Object.keys(et).length&&M({searchSuggestions:Object.keys(et)}),M({nbHits:br}),Object.values(et).map(function(tt,Or){return{sourceId:"hits".concat(Or),onSelect:function(V){var pe=V.item,ee=V.event;se(pe),ee.shiftKey||ee.ctrlKey||ee.metaKey||s()},getItemUrl:function(V){return V.item.url},getItems:function(){return Object.values(wn(tt,function(V){return V.hierarchy.lvl1})).map(c).map(function(V){return V.map(function(pe){return ct(ct({},pe),{},{__docsearch_parent:pe.type!=="lvl1"&&V.find(function(ee){return ee.type==="lvl1"&&ee.hierarchy.lvl1===pe.hierarchy.lvl1})})})}).flat()}}})}):S?[]:[{sourceId:"recentSearches",onSelect:function(x){var H=x.item,U=x.event;se(H),U.shiftKey||U.ctrlKey||U.metaKey||s()},getItemUrl:function(x){return x.item.url},getItems:function(){return le.getAll()}},{sourceId:"favoriteSearches",onSelect:function(x){var H=x.item,U=x.event;se(H),U.shiftKey||U.ctrlKey||U.metaKey||s()},getItemUrl:function(x){return x.item.url},getItems:function(){return X.getAll()}}]}})},[r,i,It,s,le,X,se,Y,a,h,c,S]),_r=fe.getEnvironmentProps,gr=fe.getRootProps,kt=fe.refresh;return function(j){var C=j.getEnvironmentProps,q=j.panelElement,M=j.formElement,$=j.inputElement;f.useEffect(function(){if(q&&M&&$){var x=C({panelElement:q,formElement:M,inputElement:$}),H=x.onTouchStart,U=x.onTouchMove;return window.addEventListener("touchstart",H),window.addEventListener("touchmove",U),function(){window.removeEventListener("touchstart",H),window.removeEventListener("touchmove",U)}}},[C,q,M,$])}({getEnvironmentProps:_r,panelElement:Ie.current,formElement:jt.current,inputElement:ue.current}),function(j){var C=j.container;f.useEffect(function(){if(C){var q=C.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), input:not([disabled])"),M=q[0],$=q[q.length-1];return C.addEventListener("keydown",x),function(){C.r Line truncated
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Ln(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ra(e){var t,n,r=f.useRef(null),o=Tn(f.useState(!1),2),a=o[0],i=o[1],u=Tn(f.useState((e==null?void 0:e.initialQuery)||void 0),2),s=u[0],l=u[1],c=f.useCallback(function(){i(!0)},[i]),d=f.useCallback(function(){i(!1)},[i]);return function(m){var p=m.isOpen,v=m.onOpen,h=m.onClose,y=m.onInput,_=m.searchButtonRef;f.useEffect(function(){function g(b){(b.keyCode===27&&p||b.key==="k"&&(b.metaKey||b.ctrlKey)||!function(O){var S=O.target,I=S.tagName;return S.isContentEditable||I==="INPUT"||I==="SELECT"||I==="TEXTAREA"}(b)&&b.key==="/"&&!p)&&(b.preventDefault(),p?h():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||v()),_&&_.current===document.activeElement&&y&&/[a-zA-Z0-9]/.test(String.fromCharCode(b.keyCode))&&y(b)}return window.addEventListener("keydown",g),function(){window.removeEventListener("keydown",g)}},[p,v,h,y,_])}({isOpen:a,onOpen:c,onClose:d,onInput:f.useCallback(function(m){i(!0),l(m.key)},[i,l]),searchButtonRef:r}),f.createElement(f.Fragment,null,f.createElement(Gr,{ref:r,translations:e==null||(t=e.translations)===null||t===void 0?void 0:t.button,onClick:c}),a&&Zn(f.createElement(Na,bt({},e,{initialScrollY:window.scrollY,initialQuery:s,translations:e==null||(n=e.translations)===null||n===void 0?void 0:n.modal,onClose:d})),document.body))}function Ta(e){er(f.createElement(Ra,ut({},e,{transformSearchClient:function(t){return t.addAlgoliaAgent("docsearch.js","3.0.0"),e.transformSearchClient?e.transformSearchClient(t):t}})),function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:window;return typeof t=="string"?n.document.querySelector(t):t}(e.container,e.environment))}const La={class:"algolia-search-box",id:"docsearch"},Ma=Sr({props:{options:null,multilang:{type:Boolean}},setup(e){var d;const t=e,n=Cr(),r=Er(),o=wr();Ct(()=>t.options,m=>{u(m)}),jr(()=>{c(t.options)});function a(m){return m.button===1||m.altKey||m.ctrlKey||m.metaKey||m.shiftKey}function i(m){const{pathname:p,hash:v}=new URL(m);return p+v}function u(m){n&&n.vnode.el&&(n.vnode.el.innerHTML='<div class="algolia-search-box" id="docsearch"></div>',c(m))}const{lang:s}=Pr(),l=t.multilang?["lang:"+s.value]:[];(d=t.options.searchParameters)!=null&&d.facetFilters&&l.push(...t.options.searchParameters.facetFilters),Ct(s,(m,p)=>{const v=l.findIndex(h=>h==="lang:"+p);v>-1&&l.splice(v,1,"lang:"+m)});function c(m){Ta(Object.assign({},m,{container:"#docsearch",searchParameters:Object.assign({},m.searchParameters,{facetFilters:l}),navigator:{navigate:({itemUrl:p})=>{const{pathname:v}=new URL(window.location.origin+p);r.path===v?window.location.assign(window.location.origin+p):o.go(p)}},transformItems:p=>p.map(v=>Object.assign({},v,{url:i(v.url)})),hitComponent:({hit:p,children:v})=>{const h=p.url.startsWith("http")?i(p.url):p.url;return{type:"a",ref:void 0,constructor:void 0,key:void 0,props:{href:p.url,onClick:y=>{a(y)||r.path!==h&&(r.path!==h&&y.preventDefault(),o.go(h))},children:v},__v:null}}}))}return(m,p)=>(Ir(),kr("div",La))}});export{Ma as default};
-1
View File
@@ -1 +0,0 @@
import{_ as o,g as t,h as r,i as l,o as _,c as d}from"../app.54944ef9.js";const p=t({props:{code:null,placement:null},setup(n){const{code:c,placement:s}=n,a=r();return l(()=>{const e=document.createElement("script");e.id="_carbonads_js",e.src=`//cdn.carbonads.com/carbon.js?serve=${c}&placement=${s}`,a.value.appendChild(e)}),(e,u)=>(_(),d("div",{class:"carbon-ads",ref_key:"el",ref:a},null,512))}});var i=o(p,[["__scopeId","data-v-5941b830"]]);export{i as default};
-1
View File
@@ -1 +0,0 @@
import{_ as n,g as d,i as l,o as p,c as _,p as i,j as r,b as u}from"../app.54944ef9.js";const m=s=>(i("data-v-4ce5ad17"),s=s(),r(),s),b={class:"buy-sell-ads"},f=m(()=>u("div",{class:"bsa-cpc"},null,-1)),y=[f],h=d({props:{code:null,placement:null},setup(s){const{code:a,placement:o}=s,t="bsa-cpc-script";l(()=>{if(document.getElementById(t))c();else{const e=document.createElement("script");e.id=t,e.src="//m.servedby-buysellads.com/monetization.js",document.head.appendChild(e),e.onload=()=>{c()}}});function c(){if(typeof _bsa!="undefined"&&_bsa){const e=document.querySelector(".bsa-cpc");e.innerHTML="",_bsa.init("default",a,`placement:${o}`,{target:".bsa-cpc",align:"horizontal",disable_css:"true"})}}return(e,v)=>(p(),_("div",b,y))}});var I=n(h,[["__scopeId","data-v-4ce5ad17"]]);export{I as default};
@@ -1 +0,0 @@
import{_ as a,c as n,o as s,a as e}from"./app.54944ef9.js";const y='{"title":"Theme Config: Algolia Search","description":"","frontmatter":{},"headers":[{"level":2,"title":"Internationalization (i18n)","slug":"internationalization-i18n"}],"relativePath":"config/algolia-search.md","lastUpdated":1652768268000}',t={},p=e("",9),o=[p];function r(l,c,i,u,k,d){return s(),n("div",null,o)}var g=a(t,[["render",r]]);export{y as __pageData,g as default};
-1
View File
@@ -1 +0,0 @@
import{_ as e,c as a,o as s,a as t}from"./app.54944ef9.js";const f='{"title":"App Config: Basics","description":"","frontmatter":{},"headers":[{"level":2,"title":"base","slug":"base"},{"level":2,"title":"lang","slug":"lang"},{"level":2,"title":"title","slug":"title"},{"level":2,"title":"description","slug":"description"}],"relativePath":"config/basics.md","lastUpdated":1652768268000}',n={},o=t("",19),i=[o];function p(l,r,c,d,u,h){return s(),a("div",null,i)}var b=e(n,[["render",p]]);export{f as __pageData,b as default};
@@ -1 +0,0 @@
import{_ as a,c as n,o as s,a as e}from"./app.54944ef9.js";const h='{"title":"Theme Config: Carbon Ads","description":"","frontmatter":{},"headers":[],"relativePath":"config/carbon-ads.md","lastUpdated":1652768268000}',t={},o=e("",3),p=[o];function r(c,l,i,d,u,_){return s(),n("div",null,p)}var f=a(t,[["render",r]]);export{h as __pageData,f as default};
@@ -1 +0,0 @@
import{_ as n,c as a,o as s,a as e}from"./app.54944ef9.js";const h='{"title":"Theme Config: Homepage","description":"","frontmatter":{},"headers":[],"relativePath":"config/homepage.md","lastUpdated":1652768268000}',t={},o=e("",3),p=[o];function c(u,i,l,r,k,d){return s(),a("div",null,p)}var g=n(t,[["render",c]]);export{h as __pageData,g as default};
@@ -1,4 +1,4 @@
import{_ as a,c as n,o as s,a as e}from"./app.54944ef9.js";const y='{"title":"Theme Config: Algolia Search","description":"","frontmatter":{},"headers":[{"level":2,"title":"Internationalization (i18n)","slug":"internationalization-i18n"}],"relativePath":"config/algolia-search.md","lastUpdated":1652768268000}',t={},p=e(`<h1 id="theme-config-algolia-search" tabindex="-1">Theme Config: Algolia Search <a class="header-anchor" href="#theme-config-algolia-search" aria-hidden="true">#</a></h1><p>The <code>themeConfig.algolia</code> option allows you to use <a href="https://docsearch.algolia.com" target="_blank" rel="noopener noreferrer">Algolia DocSearch</a>. To enable it, you need to provide at least appId, apiKey and indexName:</p><div class="language-js"><pre><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span> import{_ as a,c as n,o as s,a as e}from"./app.61e847e1.js";const y='{"title":"Theme Config: Algolia Search","description":"","frontmatter":{},"headers":[{"level":2,"title":"Internationalization (i18n)","slug":"internationalization-i18n"}],"relativePath":"developer/algolia-search.md"}',t={},p=e(`<h1 id="theme-config-algolia-search" tabindex="-1">Theme Config: Algolia Search <a class="header-anchor" href="#theme-config-algolia-search" aria-hidden="true">#</a></h1><p>The <code>themeConfig.algolia</code> option allows you to use <a href="https://docsearch.algolia.com" target="_blank" rel="noopener noreferrer">Algolia DocSearch</a>. To enable it, you need to provide at least appId, apiKey and indexName:</p><div class="language-js"><pre><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
<span class="token literal-property property">themeConfig</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">themeConfig</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token literal-property property">algolia</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">algolia</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token literal-property property">appId</span><span class="token operator">:</span> <span class="token string">&#39;your_app_id&#39;</span><span class="token punctuation">,</span> <span class="token literal-property property">appId</span><span class="token operator">:</span> <span class="token string">&#39;your_app_id&#39;</span><span class="token punctuation">,</span>
@@ -0,0 +1 @@
import{_ as a,c as n,o as s,a as e}from"./app.61e847e1.js";const y='{"title":"Theme Config: Algolia Search","description":"","frontmatter":{},"headers":[{"level":2,"title":"Internationalization (i18n)","slug":"internationalization-i18n"}],"relativePath":"developer/algolia-search.md"}',t={},p=e("",9),o=[p];function r(l,c,i,u,k,d){return s(),n("div",null,o)}var g=a(t,[["render",r]]);export{y as __pageData,g as default};
@@ -1,4 +1,4 @@
import{_ as e,c as a,o as s,a as t}from"./app.54944ef9.js";const f='{"title":"App Config: Basics","description":"","frontmatter":{},"headers":[{"level":2,"title":"base","slug":"base"},{"level":2,"title":"lang","slug":"lang"},{"level":2,"title":"title","slug":"title"},{"level":2,"title":"description","slug":"description"}],"relativePath":"config/basics.md","lastUpdated":1652768268000}',n={},o=t(`<h1 id="app-config-basics" tabindex="-1">App Config: Basics <a class="header-anchor" href="#app-config-basics" aria-hidden="true">#</a></h1><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>The config reference is incomplete since the config format may still receive further changes. For a complete reference of the current available options, refer to <a href="https://github.com/vuejs/vitepress/blob/45b65ce8b63bd54f345bfc3383eb2416b6769dc9/src/node/config.ts#L30-L65" target="_blank" rel="noopener noreferrer">config.ts</a>.</p></div><h2 id="base" tabindex="-1">base <a class="header-anchor" href="#base" aria-hidden="true">#</a></h2><ul><li>Type: <code>string</code></li><li>Default: <code>/</code></li></ul><p>The base URL the site will be deployed at. You will need to set this if you plan to deploy your site under a sub path, for example, GitHub pages. If you plan to deploy your site to <code>https://foo.github.io/bar/</code>, then you should set base to <code>&#39;/bar/&#39;</code>. It should always start and end with a slash.</p><p>The <code>base</code> is automatically prepended to all the URLs that start with <code>/</code> in other options, so you only need to specify it once.</p><div class="language-js"><pre><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span> import{_ as e,c as a,o as s,a as t}from"./app.61e847e1.js";const f='{"title":"App Config: Basics","description":"","frontmatter":{},"headers":[{"level":2,"title":"base","slug":"base"},{"level":2,"title":"lang","slug":"lang"},{"level":2,"title":"title","slug":"title"},{"level":2,"title":"description","slug":"description"}],"relativePath":"developer/basics.md"}',n={},o=t(`<h1 id="app-config-basics" tabindex="-1">App Config: Basics <a class="header-anchor" href="#app-config-basics" aria-hidden="true">#</a></h1><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>The config reference is incomplete since the config format may still receive further changes. For a complete reference of the current available options, refer to <a href="https://github.com/vuejs/vitepress/blob/45b65ce8b63bd54f345bfc3383eb2416b6769dc9/src/node/config.ts#L30-L65" target="_blank" rel="noopener noreferrer">config.ts</a>.</p></div><h2 id="base" tabindex="-1">base <a class="header-anchor" href="#base" aria-hidden="true">#</a></h2><ul><li>Type: <code>string</code></li><li>Default: <code>/</code></li></ul><p>The base URL the site will be deployed at. You will need to set this if you plan to deploy your site under a sub path, for example, GitHub pages. If you plan to deploy your site to <code>https://foo.github.io/bar/</code>, then you should set base to <code>&#39;/bar/&#39;</code>. It should always start and end with a slash.</p><p>The <code>base</code> is automatically prepended to all the URLs that start with <code>/</code> in other options, so you only need to specify it once.</p><div class="language-js"><pre><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
<span class="token literal-property property">base</span><span class="token operator">:</span> <span class="token string">&#39;/base/&#39;</span> <span class="token literal-property property">base</span><span class="token operator">:</span> <span class="token string">&#39;/base/&#39;</span>
<span class="token punctuation">}</span> <span class="token punctuation">}</span>
</code></pre></div><h2 id="lang" tabindex="-1">lang <a class="header-anchor" href="#lang" aria-hidden="true">#</a></h2><ul><li>Type: <code>string</code></li><li>Default: <code>en-US</code></li></ul><p>The <code>lang</code> attribute for the site. This will render as a <code>&lt;html lang=&quot;en-US&quot;&gt;</code> tag in the page HTML.</p><div class="language-js"><pre><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span> </code></pre></div><h2 id="lang" tabindex="-1">lang <a class="header-anchor" href="#lang" aria-hidden="true">#</a></h2><ul><li>Type: <code>string</code></li><li>Default: <code>en-US</code></li></ul><p>The <code>lang</code> attribute for the site. This will render as a <code>&lt;html lang=&quot;en-US&quot;&gt;</code> tag in the page HTML.</p><div class="language-js"><pre><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
@@ -0,0 +1 @@
import{_ as e,c as a,o as s,a as t}from"./app.61e847e1.js";const f='{"title":"App Config: Basics","description":"","frontmatter":{},"headers":[{"level":2,"title":"base","slug":"base"},{"level":2,"title":"lang","slug":"lang"},{"level":2,"title":"title","slug":"title"},{"level":2,"title":"description","slug":"description"}],"relativePath":"developer/basics.md"}',n={},o=t("",19),i=[o];function p(l,r,c,d,u,h){return s(),a("div",null,i)}var b=e(n,[["render",p]]);export{f as __pageData,b as default};
@@ -1,4 +1,4 @@
import{_ as a,c as n,o as s,a as e}from"./app.54944ef9.js";const h='{"title":"Theme Config: Carbon Ads","description":"","frontmatter":{},"headers":[],"relativePath":"config/carbon-ads.md","lastUpdated":1652768268000}',t={},o=e(`<h1 id="theme-config-carbon-ads" tabindex="-1">Theme Config: Carbon Ads <a class="header-anchor" href="#theme-config-carbon-ads" aria-hidden="true">#</a></h1><p>VitePress has built in native support for <a href="https://www.carbonads.net" target="_blank" rel="noopener noreferrer">Carbon Ads</a>. By defining the Carbon Ads credentials in config, VitePress will display ads on the page.</p><div class="language-js"><pre><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span> import{_ as n,c as a,o as s,a as e}from"./app.61e847e1.js";const h='{"title":"Theme Config: Carbon Ads","description":"","frontmatter":{},"headers":[],"relativePath":"developer/carbon-ads.md"}',t={},o=e(`<h1 id="theme-config-carbon-ads" tabindex="-1">Theme Config: Carbon Ads <a class="header-anchor" href="#theme-config-carbon-ads" aria-hidden="true">#</a></h1><p>VitePress has built in native support for <a href="https://www.carbonads.net" target="_blank" rel="noopener noreferrer">Carbon Ads</a>. By defining the Carbon Ads credentials in config, VitePress will display ads on the page.</p><div class="language-js"><pre><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
<span class="token literal-property property">themeConfig</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">themeConfig</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token literal-property property">carbonAds</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">carbonAds</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token literal-property property">carbon</span><span class="token operator">:</span> <span class="token string">&#39;your-carbon-key&#39;</span><span class="token punctuation">,</span> <span class="token literal-property property">carbon</span><span class="token operator">:</span> <span class="token string">&#39;your-carbon-key&#39;</span><span class="token punctuation">,</span>
@@ -7,4 +7,4 @@ import{_ as a,c as n,o as s,a as e}from"./app.54944ef9.js";const h='{"title":"Th
<span class="token punctuation">}</span> <span class="token punctuation">}</span>
<span class="token punctuation">}</span> <span class="token punctuation">}</span>
<span class="token punctuation">}</span> <span class="token punctuation">}</span>
</code></pre></div>`,3),p=[o];function r(c,l,i,d,u,_){return s(),n("div",null,p)}var f=a(t,[["render",r]]);export{h as __pageData,f as default}; </code></pre></div>`,3),p=[o];function r(c,l,i,d,u,_){return s(),a("div",null,p)}var f=n(t,[["render",r]]);export{h as __pageData,f as default};
@@ -0,0 +1 @@
import{_ as n,c as a,o as s,a as e}from"./app.61e847e1.js";const h='{"title":"Theme Config: Carbon Ads","description":"","frontmatter":{},"headers":[],"relativePath":"developer/carbon-ads.md"}',t={},o=e("",3),p=[o];function r(c,l,i,d,u,_){return s(),a("div",null,p)}var f=n(t,[["render",r]]);export{h as __pageData,f as default};
@@ -1,4 +1,4 @@
import{_ as n,c as a,o as s,a as e}from"./app.54944ef9.js";const h='{"title":"Theme Config: Homepage","description":"","frontmatter":{},"headers":[],"relativePath":"config/homepage.md","lastUpdated":1652768268000}',t={},o=e(`<h1 id="theme-config-homepage" tabindex="-1">Theme Config: Homepage <a class="header-anchor" href="#theme-config-homepage" aria-hidden="true">#</a></h1><p>VitePress provides a homepage layout. To use it, specify <code>home: true</code> plus some other metadata in your root <code>index.md</code>&#39;s <a href="./../guide/frontmatter.html">YAML frontmatter</a>. This is an example of how it works:</p><div class="language-yaml"><pre><code><span class="token punctuation">---</span> import{_ as n,c as a,o as s,a as e}from"./app.61e847e1.js";const h='{"title":"Theme Config: Homepage","description":"","frontmatter":{},"headers":[],"relativePath":"developer/homepage.md"}',t={},o=e(`<h1 id="theme-config-homepage" tabindex="-1">Theme Config: Homepage <a class="header-anchor" href="#theme-config-homepage" aria-hidden="true">#</a></h1><p>VitePress provides a homepage layout. To use it, specify <code>home: true</code> plus some other metadata in your root <code>index.md</code>&#39;s YAML frontmatter. This is an example of how it works:</p><div class="language-yaml"><pre><code><span class="token punctuation">---</span>
<span class="token key atrule">home</span><span class="token punctuation">:</span> <span class="token boolean important">true</span> <span class="token key atrule">home</span><span class="token punctuation">:</span> <span class="token boolean important">true</span>
<span class="token key atrule">heroImage</span><span class="token punctuation">:</span> /logo.png <span class="token key atrule">heroImage</span><span class="token punctuation">:</span> /logo.png
<span class="token key atrule">heroAlt</span><span class="token punctuation">:</span> Logo image <span class="token key atrule">heroAlt</span><span class="token punctuation">:</span> Logo image
@@ -15,4 +15,4 @@ import{_ as n,c as a,o as s,a as e}from"./app.54944ef9.js";const h='{"title":"Th
<span class="token key atrule">details</span><span class="token punctuation">:</span> VitePress generates pre<span class="token punctuation">-</span>rendered static HTML for each page<span class="token punctuation">,</span> and runs as an SPA once a page is loaded. <span class="token key atrule">details</span><span class="token punctuation">:</span> VitePress generates pre<span class="token punctuation">-</span>rendered static HTML for each page<span class="token punctuation">,</span> and runs as an SPA once a page is loaded.
<span class="token key atrule">footer</span><span class="token punctuation">:</span> MIT Licensed <span class="token punctuation">|</span> Copyright \xA9 2019<span class="token punctuation">-</span>present Evan You <span class="token key atrule">footer</span><span class="token punctuation">:</span> MIT Licensed <span class="token punctuation">|</span> Copyright \xA9 2019<span class="token punctuation">-</span>present Evan You
<span class="token punctuation">---</span> <span class="token punctuation">---</span>
</code></pre></div>`,3),p=[o];function c(u,i,l,r,k,d){return s(),a("div",null,p)}var g=n(t,[["render",c]]);export{h as __pageData,g as default}; </code></pre></div>`,3),p=[o];function c(u,l,i,r,k,d){return s(),a("div",null,p)}var _=n(t,[["render",c]]);export{h as __pageData,_ as default};
@@ -0,0 +1 @@
import{_ as n,c as a,o as s,a as e}from"./app.61e847e1.js";const h='{"title":"Theme Config: Homepage","description":"","frontmatter":{},"headers":[],"relativePath":"developer/homepage.md"}',t={},o=e("",3),p=[o];function c(u,l,i,r,k,d){return s(),a("div",null,p)}var _=n(t,[["render",c]]);export{h as __pageData,_ as default};
@@ -0,0 +1 @@
import{_ as a,c as o,o as t,b as e,d as r}from"./app.61e847e1.js";const m='{"title":"Theme Config: Algolia Search","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/developer/algolia-search.md"}',c={},s=e("h1",{id:"theme-config-algolia-search",tabindex:"-1"},[r("Theme Config: Algolia Search "),e("a",{class:"header-anchor",href:"#theme-config-algolia-search","aria-hidden":"true"},"#")],-1),i=[s];function n(l,h,d,_,f,g){return t(),o("div",null,i)}var u=a(c,[["render",n]]);export{m as __pageData,u as default};
@@ -0,0 +1 @@
import{_ as a,c as o,o as t,b as e,d as r}from"./app.61e847e1.js";const m='{"title":"Theme Config: Algolia Search","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/developer/algolia-search.md"}',c={},s=e("h1",{id:"theme-config-algolia-search",tabindex:"-1"},[r("Theme Config: Algolia Search "),e("a",{class:"header-anchor",href:"#theme-config-algolia-search","aria-hidden":"true"},"#")],-1),i=[s];function n(l,h,d,_,f,g){return t(),o("div",null,i)}var u=a(c,[["render",n]]);export{m as __pageData,u as default};
@@ -0,0 +1 @@
import{_ as a,c as s,o as t,b as e,d as c}from"./app.61e847e1.js";const m='{"title":"App Config: Basics","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/developer/basics.md"}',o={},r=e("h1",{id:"app-config-basics",tabindex:"-1"},[c("App Config: Basics "),e("a",{class:"header-anchor",href:"#app-config-basics","aria-hidden":"true"},"#")],-1),i=[r];function n(d,p,_,f,h,l){return t(),s("div",null,i)}var u=a(o,[["render",n]]);export{m as __pageData,u as default};
@@ -0,0 +1 @@
import{_ as a,c as s,o as t,b as e,d as c}from"./app.61e847e1.js";const m='{"title":"App Config: Basics","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/developer/basics.md"}',o={},r=e("h1",{id:"app-config-basics",tabindex:"-1"},[c("App Config: Basics "),e("a",{class:"header-anchor",href:"#app-config-basics","aria-hidden":"true"},"#")],-1),i=[r];function n(d,p,_,f,h,l){return t(),s("div",null,i)}var u=a(o,[["render",n]]);export{m as __pageData,u as default};
@@ -0,0 +1 @@
import{_ as a,c as o,o as t,b as e,d as r}from"./app.61e847e1.js";const b='{"title":"Theme Config: Carbon Ads","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/developer/carbon-ads.md"}',n={},s=e("h1",{id:"theme-config-carbon-ads",tabindex:"-1"},[r("Theme Config: Carbon Ads "),e("a",{class:"header-anchor",href:"#theme-config-carbon-ads","aria-hidden":"true"},"#")],-1),c=[s];function d(i,_,h,f,p,l){return t(),o("div",null,c)}var u=a(n,[["render",d]]);export{b as __pageData,u as default};
@@ -0,0 +1 @@
import{_ as a,c as o,o as t,b as e,d as r}from"./app.61e847e1.js";const b='{"title":"Theme Config: Carbon Ads","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/developer/carbon-ads.md"}',n={},s=e("h1",{id:"theme-config-carbon-ads",tabindex:"-1"},[r("Theme Config: Carbon Ads "),e("a",{class:"header-anchor",href:"#theme-config-carbon-ads","aria-hidden":"true"},"#")],-1),c=[s];function d(i,_,h,f,p,l){return t(),o("div",null,c)}var u=a(n,[["render",d]]);export{b as __pageData,u as default};
@@ -0,0 +1 @@
import{_ as a,c as o,o as t,b as e,d as r}from"./app.61e847e1.js";const l='{"title":"Theme Config: Homepage","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/developer/homepage.md"}',n={},s=e("h1",{id:"theme-config-homepage",tabindex:"-1"},[r("Theme Config: Homepage "),e("a",{class:"header-anchor",href:"#theme-config-homepage","aria-hidden":"true"},"#")],-1),c=[s];function d(i,h,p,m,_,f){return t(),o("div",null,c)}var u=a(n,[["render",d]]);export{l as __pageData,u as default};
@@ -0,0 +1 @@
import{_ as a,c as o,o as t,b as e,d as r}from"./app.61e847e1.js";const l='{"title":"Theme Config: Homepage","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/developer/homepage.md"}',n={},s=e("h1",{id:"theme-config-homepage",tabindex:"-1"},[r("Theme Config: Homepage "),e("a",{class:"header-anchor",href:"#theme-config-homepage","aria-hidden":"true"},"#")],-1),c=[s];function d(i,h,p,m,_,f){return t(),o("div",null,c)}var u=a(n,[["render",d]]);export{l as __pageData,u as default};
+24
View File
@@ -0,0 +1,24 @@
import{_ as n,c as e,o as a,a as t}from"./app.61e847e1.js";const b='{"title":"Install Agent using one-click script","description":"","frontmatter":{},"headers":[{"level":2,"title":"Install Agent using one-click script","slug":"install-agent-using-one-click-script"},{"level":3,"title":"\u51C6\u5907\u5DE5\u4F5C","slug":"\u51C6\u5907\u5DE5\u4F5C"},{"level":3,"title":"Linux\u4E00\u952E\u5B89\u88C5","slug":"linux\u4E00\u952E\u5B89\u88C5"},{"level":3,"title":"Windows\u4E00\u952E\u5B89\u88C5","slug":"windows\u4E00\u952E\u5B89\u88C5"},{"level":2,"title":"\u5176\u4ED6\u65B9\u5F0F\u5B89\u88C5Agent","slug":"\u5176\u4ED6\u65B9\u5F0F\u5B89\u88C5agent"},{"level":3,"title":"Linux\u5B89\u88C5Agent","slug":"linux\u5B89\u88C5agent"},{"level":3,"title":"Windows\u5B89\u88C5Agent","slug":"windows\u5B89\u88C5agent"},{"level":3,"title":"OpenWRT\u5B89\u88C5Agent","slug":"openwrt\u5B89\u88C5agent"},{"level":2,"title":"\u81EA\u5B9A\u4E49Agent\u76D1\u63A7\u9879\u76EE","slug":"\u81EA\u5B9A\u4E49agent\u76D1\u63A7\u9879\u76EE"}],"relativePath":"en_US/guide/agent.md"}',s={},i=t(`<p><strong>\u54EA\u5412\u76D1\u63A7\u7684\u88AB\u63A7\u7AEF\u670D\u52A1\u88AB\u79F0\u4E3AAgent\uFF0C\u672C\u6587\u6863\u5C06\u4ECB\u7ECD\u5982\u4F55\u5728\u88AB\u63A7\u7AEF\u670D\u52A1\u5668\u4E0A\u5B89\u88C5Agent\uFF0C\u5E76\u4E0EDashboard\u8FDE\u63A5</strong><br><br></p><h2 id="install-agent-using-one-click-script" tabindex="-1">Install Agent using one-click script <a class="header-anchor" href="#install-agent-using-one-click-script" aria-hidden="true">#</a></h2><p>\u76EE\u524D\u54EA\u5412\u76D1\u63A7\u5DF2\u652F\u6301\u5728WIndows\u548CLinux\u4E0A\u4E00\u952E\u5B89\u88C5Agent\uFF0C\u9075\u5FAA\u672C\u6587\u6863\u7684\u6B65\u9AA4\uFF0C\u4F60\u53EF\u4EE5\u5F88\u8F7B\u677E\u7684\u5728\u670D\u52A1\u5668\u4E0A\u90E8\u7F72\u5B83<br><br></p><h3 id="\u51C6\u5907\u5DE5\u4F5C" tabindex="-1">\u51C6\u5907\u5DE5\u4F5C <a class="header-anchor" href="#\u51C6\u5907\u5DE5\u4F5C" aria-hidden="true">#</a></h3><hr><p>\u4F60\u9700\u8981\u63D0\u524D\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u8BBE\u7F6E\u597D\u901A\u4FE1\u57DF\u540D\uFF0C\u6B64\u57DF\u540D\u4E0D\u53EF\u4EE5\u63A5\u5165CDN\uFF0C\u8FD9\u91CC\u4EE5\u524D\u9762\u63D0\u5230\u8FC7\u7684\u793A\u4F8B\u901A\u4FE1\u57DF\u540D \u201C<a href="http://data.example.com" target="_blank" rel="noopener noreferrer">data.example.com</a>\u201D \u6765\u505A\u6F14\u793A<br> \u8FDB\u5165\u540E\u53F0\u7BA1\u7406\u9762\u677F\uFF0C\u8F6C\u5230\u201C\u8BBE\u7F6E\u201D\u9875\uFF0C\u5728\u201C\u672A\u63A5\u5165CDN\u7684\u9762\u677F\u670D\u52A1\u5668\u57DF\u540D/IP\u201D\u9879\u4E2D\u586B\u5165\u901A\u4FE1\u57DF\u540D\uFF0C\u7136\u540E\u70B9\u51FB&quot;\u4FDD\u5B58&quot;<br><br></p><h3 id="linux\u4E00\u952E\u5B89\u88C5" tabindex="-1">Linux\u4E00\u952E\u5B89\u88C5 <a class="header-anchor" href="#linux\u4E00\u952E\u5B89\u88C5" aria-hidden="true">#</a></h3><hr><ul><li>\u9996\u5148\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u6DFB\u52A0\u4E00\u53F0\u670D\u52A1\u5668</li><li>\u70B9\u51FB\u65B0\u6DFB\u52A0\u7684\u670D\u52A1\u5668\u65C1\uFF0C\u7EFF\u8272\u7684Linux\u56FE\u6807\u6309\u94AE\uFF0C\u590D\u5236\u4E00\u952E\u5B89\u88C5\u547D\u4EE4</li><li>\u5728\u88AB\u63A7\u7AEF\u670D\u52A1\u5668\u4E2D\u8FD0\u884C\u590D\u5236\u7684\u4E00\u952E\u5B89\u88C5\u547D\u4EE4\uFF0C\u7B49\u5F85\u5B89\u88C5\u5B8C\u6210\u540E\u8FD4\u56DE\u5230Dashboard\u4E3B\u9875\u67E5\u770B\u670D\u52A1\u5668\u662F\u5426\u4E0A\u7EBF<br><br></li></ul><h3 id="windows\u4E00\u952E\u5B89\u88C5" tabindex="-1">Windows\u4E00\u952E\u5B89\u88C5 <a class="header-anchor" href="#windows\u4E00\u952E\u5B89\u88C5" aria-hidden="true">#</a></h3><hr><ul><li>\u9996\u5148\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u6DFB\u52A0\u4E00\u53F0\u670D\u52A1\u5668</li><li>\u70B9\u51FB\u65B0\u6DFB\u52A0\u7684\u670D\u52A1\u5668\u65C1\uFF0C\u7EFF\u8272\u7684Windows\u56FE\u6807\u6309\u94AE\uFF0C\u590D\u5236\u4E00\u952E\u5B89\u88C5\u547D\u4EE4</li><li>\u8FDB\u5165Windows\u670D\u52A1\u5668\uFF0C\u8FD0\u884CPowerShell\uFF0C\u5728PowerShell\u4E2D\u8FD0\u884C\u590D\u5236\u7684\u5B89\u88C5\u547D\u4EE4</li><li>\u5982\u9047\u5230\u786E\u8BA4\u300C\u6267\u884C\u7B56\u7565\u53D8\u66F4\u300D\u8BF7\u9009\u62E9 Y</li><li>\u7B49\u5F85\u5B89\u88C5\u5B8C\u6210\u540E\u8FD4\u56DEDashboard\u4E3B\u9875\u67E5\u770B\u670D\u52A1\u5668\u662F\u5426\u4E0A\u7EBF<br><br><br><br></li></ul><h2 id="\u5176\u4ED6\u65B9\u5F0F\u5B89\u88C5agent" tabindex="-1">\u5176\u4ED6\u65B9\u5F0F\u5B89\u88C5Agent <a class="header-anchor" href="#\u5176\u4ED6\u65B9\u5F0F\u5B89\u88C5agent" aria-hidden="true">#</a></h2><hr><br><h3 id="linux\u5B89\u88C5agent" tabindex="-1">Linux\u5B89\u88C5Agent <a class="header-anchor" href="#linux\u5B89\u88C5agent" aria-hidden="true">#</a></h3><hr><ul><li>\u9996\u5148\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u6DFB\u52A0\u4E00\u53F0\u670D\u52A1\u5668</li><li>\u5728\u88AB\u63A7\u670D\u52A1\u5668\u4E2D\uFF0C\u8FD0\u884C\u811A\u672C\uFF08\u4F4D\u4E8E\u4E2D\u56FD\u5927\u9646\u7684\u670D\u52A1\u5668\u8BF7\u4F7F\u7528\u955C\u50CF\uFF09\uFF1A</li></ul><div class="langu Line truncated
</code></pre></div><ul><li>\u9009\u62E9\u201C\u5B89\u88C5\u76D1\u63A7Agent\u201D</li><li>\u8F93\u5165\u901A\u4FE1\u57DF\u540D\uFF0C\u5982\uFF1A\u201D<a href="http://data.example.com" target="_blank" rel="noopener noreferrer">data.example.com</a>\u201C</li><li>\u8F93\u5165\u9762\u677F\u901A\u4FE1\u7AEF\u53E3\uFF0C\u9ED8\u8BA4\u4E3A5555</li><li>\u8F93\u5165Agent\u5BC6\u94A5\uFF0CAgent\u5BC6\u94A5\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u6DFB\u52A0\u670D\u52A1\u5668\u65F6\u751F\u6210\uFF0C\u53EF\u4EE5\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u7684\u201C\u4E3B\u673A\u201D\u9875\u4E2D\u627E\u5230</li><li>\u7B49\u5F85\u5B89\u88C5\u5B8C\u6210\u540E\u8FD4\u56DEDashboard\u4E3B\u9875\u67E5\u770B\u670D\u52A1\u5668\u662F\u5426\u4E0A\u7EBF<br><br></li></ul><h3 id="windows\u5B89\u88C5agent" tabindex="-1">Windows\u5B89\u88C5Agent <a class="header-anchor" href="#windows\u5B89\u88C5agent" aria-hidden="true">#</a></h3><hr><ul><li>\u8BF7\u53C2\u8003\u793E\u533A\u6587\u7AE0\uFF1A<br><a href="https://nyko.me/2020/12/13/nezha-windows-client.html" target="_blank" rel="noopener noreferrer">\u54EA\u5412\u63A2\u9488 - Windows \u5BA2\u6237\u7AEF\u5B89\u88C5</a><br><br></li></ul><h3 id="openwrt\u5B89\u88C5agent" tabindex="-1">OpenWRT\u5B89\u88C5Agent <a class="header-anchor" href="#openwrt\u5B89\u88C5agent" aria-hidden="true">#</a></h3><hr><p><strong>\u5982\u4F55\u4F7F \u65E7\u7248OpenWRT/LEDE \u81EA\u542F\u52A8</strong></p><ul><li>\u8BF7\u53C2\u8003\u9879\u76EE\uFF1A<br><a href="https://github.com/Erope/openwrt_nezha" target="_blank" rel="noopener noreferrer">\u54EA\u5412\u76D1\u63A7 For OpenWRT</a><br><br></li></ul><p><strong>\u5982\u4F55\u4F7F \u65B0\u7248OpenWRT \u81EA\u542F\u52A8\uFF1F\u6765\u81EA @\u827E\u65AF\u5FB7\u65AF</strong></p><ul><li>\u9996\u5148\u5728 release \u4E0B\u8F7D\u5BF9\u5E94\u7684\u4E8C\u8FDB\u5236\u89E3\u538B zip \u5305\u540E\u653E\u7F6E\u5230 <code>/root</code></li><li>\u8FD0\u884C <code>chmod +x /root/nezha-agent</code> \u8D4B\u4E88\u6267\u884C\u6743\u9650\uFF0C\u7136\u540E\u521B\u5EFA <code>/etc/init.d/nezha-service</code>\uFF1A</li></ul><div class="language-shell"><pre><code><span class="token shebang important">#!/bin/sh /etc/rc.common</span>
<span class="token assign-left variable">START</span><span class="token operator">=</span><span class="token number">99</span>
<span class="token assign-left variable">USE_PROCD</span><span class="token operator">=</span><span class="token number">1</span>
<span class="token function-name function">start_service</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
procd_open_instance
procd_set_param <span class="token builtin class-name">command</span> /root/nezha-agent -s \u9762\u677F\u901A\u4FE1\u5730\u5740:\u7AEF\u53E3 -p \u79D8\u94A5 -d
procd_set_param respawn
procd_close_instance
<span class="token punctuation">}</span>
<span class="token function-name function">stop_service</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token function">killall</span> nezha-agent
<span class="token punctuation">}</span>
<span class="token function-name function">restart</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
stop
<span class="token function">sleep</span> <span class="token number">2</span>
start
<span class="token punctuation">}</span>
</code></pre></div><ul><li>\u8FD0\u884C <code>chmod +x /etc/init.d/nezha-service</code> \u8D4B\u4E88\u6267\u884C\u6743\u9650</li><li>\u542F\u52A8\u670D\u52A1\uFF1A <code>/etc/init.d/nezha-service enable &amp;&amp; /etc/init.d/nezha-service start</code><br><br><br><br></li></ul><h2 id="\u81EA\u5B9A\u4E49agent\u76D1\u63A7\u9879\u76EE" tabindex="-1">\u81EA\u5B9A\u4E49Agent\u76D1\u63A7\u9879\u76EE <a class="header-anchor" href="#\u81EA\u5B9A\u4E49agent\u76D1\u63A7\u9879\u76EE" aria-hidden="true">#</a></h2><hr><h4 id="\u81EA\u5B9A\u4E49\u76D1\u63A7\u7684\u7F51\u5361\u548C\u786C\u76D8\u5206\u533A" tabindex="-1">\u81EA\u5B9A\u4E49\u76D1\u63A7\u7684\u7F51\u5361\u548C\u786C\u76D8\u5206\u533A <a class="header-anchor" href="#\u81EA\u5B9A\u4E49\u76D1\u63A7\u7684\u7F51\u5361\u548C\u786C\u76D8\u5206\u533A" aria-hidden="true">#</a></h4><ul><li>\u6267\u884C <code>/opt/nezha/agent/nezha-agent --edit-agent-config</code> \u6765\u9009\u62E9\u81EA\u5B9A\u4E49\u7684\u7F51\u5361\u548C\u5206\u533A\uFF0C\u7136\u540E\u91CD\u542F Agent \u5373\u53EF\u751F\u6548</li></ul><h4 id="\u5176\u4ED6\u8FD0\u884C\u53C2\u6570" tabindex="-1">\u5176\u4ED6\u8FD0\u884C\u53C2\u6570 <a class="header-anchor" href="#\u5176\u4ED6\u8FD0\u884C\u53C2\u6570" aria-hidden="true">#</a></h4><p>\u901A\u8FC7\u6267\u884C <code>./nezha-agent --help</code> \u67E5\u770B\u652F\u6301\u7684\u53C2\u6570\uFF0C\u5982\u679C\u4F60\u4F7F\u7528\u4E86\u4E00\u952E\u811A\u672C\u5B89\u88C5Agent\uFF0C\u53EF\u4EE5\u7F16\u8F91 <code>/etc/systemd/system/nezha-agent.service</code>\uFF0C\u5728 <code>ExecStart=</code> \u8FD9\u4E00\u884C\u7684\u672B\u5C3E\u52A0\u4E0A\u4EE5\u4E0B\u53C2\u6570</p><ul><li><code>--report-delay</code> \u63A7\u5236\u7CFB\u7EDF\u4FE1\u606F\u4E0A\u62A5\u7684\u95F4\u9694\uFF0C\u9ED8\u8BA4\u4E3A 1 \u79D2\uFF0C\u53EF\u4EE5\u8BBE\u7F6E\u4E3A 3 \u6765\u8FDB\u4E00\u6B65\u964D\u4F4E agent \u7AEF\u7CFB\u7EDF\u8D44\u6E90\u5360\u7528\uFF08\u914D\u7F6E\u533A\u95F4 1-4\uFF09</li><li><code>--skip-conn</code> \u4E0D\u76D1\u63A7\u8FDE\u63A5\u6570\uFF0C\u63A8\u8350 \u673A\u573A/\u8FDE\u63A5\u5BC6\u96C6\u578B\u670D\u52A1\u5668\u6216CPU\u5360\u7528\u8F83\u9AD8\u7684\u670D\u52A1\u5668\u8BBE\u7F6E</li><li><code>--skip-procs</code> \u4E0D\u76D1\u63A7\u8FDB\u7A0B\u6570\uFF0C\u4E5F\u53EF\u4EE5\u964D\u4F4E agent \u5360\u7528</li><li><code>--disable-auto-update</code> \u7981\u6B62 <strong>\u81EA\u52A8\u66F4\u65B0</strong> Agent\uFF08\u5B89\u5168\u7279\u6027\uFF09</li><li><code>--disable-force-update</code> \u7981\u6B62 <strong>\u5F3A\u5236\u66F4\u65B0</strong> Agent\uFF08\u5B89\u5168\u7279\u6027\uFF09</li><li><code>--disable-command-execute</code> \u7981\u6B62\u5728 Agent \u4E0A\u6267\u884C\u5B9A\u65F6\u4EFB\u52A1\u3001\u6253\u5F00\u5728\u7EBF\u7EC8\u7AEF\uFF08\u5B89\u5168\u7279\u6027\uFF09</li><li><code>--tls</code> \u542F\u7528 SSL/TLS \u52A0\u5BC6\uFF08\u4F7F\u7528 nginx \u53CD\u5411\u4EE3\u7406 Agent \u7684 grpc \u8FDE\u63A5\uFF0C\u5E76\u4E14 nginx \u5F00\u542F SSL/TLS \u65F6\uFF0C\u9700\u8981\u542F\u7528\u8BE5\u9879\u914D\u7F6E\uFF09</li></ul>`,38),l=[i];function o(r,c,p,d,h,u){return a(),e("div",null,l)}var k=n(s,[["render",o]]);export{b as __pageData,k as default};
@@ -0,0 +1 @@
import{_ as n,c as e,o as a,a as t}from"./app.61e847e1.js";const b='{"title":"Install Agent using one-click script","description":"","frontmatter":{},"headers":[{"level":2,"title":"Install Agent using one-click script","slug":"install-agent-using-one-click-script"},{"level":3,"title":"\u51C6\u5907\u5DE5\u4F5C","slug":"\u51C6\u5907\u5DE5\u4F5C"},{"level":3,"title":"Linux\u4E00\u952E\u5B89\u88C5","slug":"linux\u4E00\u952E\u5B89\u88C5"},{"level":3,"title":"Windows\u4E00\u952E\u5B89\u88C5","slug":"windows\u4E00\u952E\u5B89\u88C5"},{"level":2,"title":"\u5176\u4ED6\u65B9\u5F0F\u5B89\u88C5Agent","slug":"\u5176\u4ED6\u65B9\u5F0F\u5B89\u88C5agent"},{"level":3,"title":"Linux\u5B89\u88C5Agent","slug":"linux\u5B89\u88C5agent"},{"level":3,"title":"Windows\u5B89\u88C5Agent","slug":"windows\u5B89\u88C5agent"},{"level":3,"title":"OpenWRT\u5B89\u88C5Agent","slug":"openwrt\u5B89\u88C5agent"},{"level":2,"title":"\u81EA\u5B9A\u4E49Agent\u76D1\u63A7\u9879\u76EE","slug":"\u81EA\u5B9A\u4E49agent\u76D1\u63A7\u9879\u76EE"}],"relativePath":"en_US/guide/agent.md"}',s={},i=t("",38),l=[i];function o(r,c,p,d,h,u){return a(),e("div",null,l)}var k=n(s,[["render",o]]);export{b as __pageData,k as default};
@@ -0,0 +1,24 @@
import{_ as e,c as a,o as n,a as t}from"./app.61e847e1.js";const k='{"title":"Preparations","description":"","frontmatter":{},"headers":[{"level":3,"title":"Preparations","slug":"preparations"},{"level":3,"title":"\u83B7\u53D6Github\u7684Client ID\u548C\u5BC6\u94A5","slug":"\u83B7\u53D6github\u7684client-id\u548C\u5BC6\u94A5"},{"level":3,"title":"\u5728\u670D\u52A1\u5668\u4E2D\u5B89\u88C5Dashboard","slug":"\u5728\u670D\u52A1\u5668\u4E2D\u5B89\u88C5dashboard"},{"level":3,"title":"\u914D\u7F6E\u53CD\u5411\u4EE3\u7406","slug":"\u914D\u7F6E\u53CD\u5411\u4EE3\u7406"},{"level":3,"title":"\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u914D\u7F6ESSL","slug":"\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u914D\u7F6Essl"}],"relativePath":"en_US/guide/dashboard.md"}',s={},o=t(`<h3 id="preparations" tabindex="-1">Preparations <a class="header-anchor" href="#preparations" aria-hidden="true">#</a></h3><hr><p>\u642D\u5EFA\u4E00\u4E2A\u54EA\u5412\u76D1\u63A7\uFF0C\u4F60\u9700\u8981\uFF1A</p><ol><li>\u4E00\u53F0\u53EF\u4EE5\u8FDE\u63A5\u516C\u7F51\u7684VPS\uFF0C\u9632\u706B\u5899\u548C\u5B89\u5168\u7B56\u7565\u9700\u8981\u653E\u884C8008\u548C5555\u7AEF\u53E3\uFF0C\u5426\u5219\u4F1A\u65E0\u6CD5\u8BBF\u95EE\u548C\u65E0\u6CD5\u63A5\u6536\u6570\u636E\u3002\u5355\u6838512MB\u5185\u5B58\u7684\u670D\u52A1\u5668\u914D\u7F6E\u5C31\u8DB3\u4EE5\u6EE1\u8DB3\u5927\u591A\u6570\u4F7F\u7528\u573A\u666F</li><li>\u4E00\u4E2A\u5DF2\u7ECF\u8BBE\u7F6E\u597DA\u8BB0\u5F55\uFF0C\u6307\u5411Dashboard\u670D\u52A1\u5668ip\u7684\u57DF\u540D</li></ol><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>\u5982\u679C\u4F60\u60F3\u4F7F\u7528CDN\uFF0C\u8BF7\u51C6\u5907\u4E24\u4E2A\u57DF\u540D\uFF0C\u4E00\u4E2A\u914D\u7F6E\u597DCDN\u7528\u4F5C\u516C\u5F00\u8BBF\u95EE\uFF0CCDN\u9700\u8981\u652F\u6301WebSocket\u534F\u8BAE\uFF1B\u53E6\u4E00\u4E2A\u57DF\u540D\u4E0D\u8981\u4F7F\u7528CDN\uFF0C\u7528\u4F5CAgent\u7AEF\u4E0EDashboard\u7684\u901A\u4FE1<br> \u672C\u6587\u6863\u5206\u522B\u4EE5 &quot;<a href="http://cdn.example.com" target="_blank" rel="noopener noreferrer">cdn.example.com</a>&quot; \u548C &quot;<a href="http://data.example.com" target="_blank" rel="noopener noreferrer">data.example.com</a>&quot; \u4E24\u4E2A\u57DF\u540D\u6765\u6F14\u793A</p></div><ol start="3"><li>\u4E00\u4E2AGithub/Gitee\u8D26\u53F7</li></ol><p><strong>\u672C\u6587\u6863\u5C06\u4EE5\u5B9D\u5854\u9762\u677F\u53CD\u4EE3\u9762\u677F\u7684\u8FC7\u7A0B\u4F5C\u4E3A\u8303\u4F8B\uFF0C\u968F\u7740\u672A\u6765\u7248\u672C\u7684\u53D8\u5316\uFF0C\u90E8\u5206\u529F\u80FD\u7684\u5165\u53E3\u53EF\u80FD\u4F1A\u53D1\u751F\u6539\u53D8\uFF0C\u672C\u6587\u6863\u4EC5\u4F9B\u53C2\u8003</strong><br><br></p><h3 id="\u83B7\u53D6github\u7684client-id\u548C\u5BC6\u94A5" tabindex="-1">\u83B7\u53D6Github\u7684Client ID\u548C\u5BC6\u94A5 <a class="header-anchor" href="#\u83B7\u53D6github\u7684client-id\u548C\u5BC6\u94A5" aria-hidden="true">#</a></h3><hr><p>\u54EA\u5412\u76D1\u63A7\u63A5\u5165Github\u548CGitee\u4F5C\u4E3A\u540E\u53F0\u7BA1\u7406\u5458\u8D26\u53F7</p><ul><li>\u9996\u5148\u6211\u4EEC\u9700\u8981\u65B0\u5EFA\u4E00\u4E2A\u9A8C\u8BC1\u5E94\u7528\uFF0C\u4EE5Github\u4E3A\u4F8B\uFF0C\u767B\u9646Github\u540E\uFF0C\u6253\u5F00 <a href="https://github.com/settings/developers" target="_blank" rel="noopener noreferrer">https://github.com/settings/developers</a> \uFF0C\u4F9D\u6B21\u9009\u62E9\u201COAuth Apps\u201D - \u201CNew OAuth App\u201D<br><code>Application name</code> - \u968F\u610F\u586B\u5199<br><code>Homepage URL</code> - \u586B\u5199\u9762\u677F\u7684\u8BBF\u95EE\u57DF\u540D\uFF0C\u5982\uFF1A&quot;<a href="http://cdn.example.com" target="_blank" rel="noopener noreferrer">http://cdn.example.com</a>&quot;<br><code>Authorization callback URL</code> - \u586B\u5199\u56DE\u8C03\u5730\u5740\uFF0C\u5982\uFF1A&quot;<a href="http://cdn.example.com/oauth2/callback" target="_blank" rel="noopener noreferrer">http://cdn.example.com/oauth2/callback</a>&quot;</li><li>\u70B9\u51FB\u201CRegister application\u201D</li><li>\u4FDD\u5B58\u9875\u9762\u4E2D\u7684Client ID\uFF0C\u7136\u540E\u70B9\u51FB \u201CGenerate a new client secret\u201C\uFF0C\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684Client Secret\uFF0C\u65B0\u5EFA\u7684\u5BC6\u94A5\u4EC5\u4F1A\u663E\u793A\u4E00\u6B21\uFF0C\u8BF7\u59A5\u5584\u4FDD\u5B58 <br><br></li></ul><h3 id="\u5728\u670D\u52A1\u5668\u4E2D\u5B89\u88C5dashboard" tabindex="-1">\u5728\u670D\u52A1\u5668\u4E2D\u5B89\u88C5Dashboard <a class="header-anchor" href="#\u5728\u670D\u52A1\u5668\u4E2D\u5B89\u88C5dashboard" aria-hidden="true">#</a></h3><hr><ul><li>\u5728\u9762\u677F\u670D\u52A1\u5668\u4E2D\uFF0C\u8FD0\u884C\u5B89\u88C5\u811A\u672C\uFF1A</li></ul><div class="language-bash"><pre><code><span class="token function">curl</span> -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh <span class="token operator">&amp;&amp;</span> <span class="token function">chmod</span> +x nezha.sh <span class="token operator">&amp;&amp;</span> <span class="token function">sudo</span> ./nezha.sh
</code></pre></div><p>\u5982\u679C\u4F60\u7684\u9762\u677F\u670D\u52A1\u5668\u4F4D\u4E8E\u4E2D\u56FD\u5927\u9646\uFF0C\u53EF\u4EE5\u4F7F\u7528\u955C\u50CF\uFF1A</p><div class="language-bash"><pre><code><span class="token function">curl</span> -L https://fastly.jsdelivr.net/gh/naiba/nezha@master/script/install.sh -o nezha.sh <span class="token operator">&amp;&amp;</span> <span class="token function">chmod</span> +x nezha.sh <span class="token operator">&amp;&amp;</span> <span class="token function">sudo</span> <span class="token assign-left variable">CN</span><span class="token operator">=</span>true ./nezha.sh
</code></pre></div><ul><li><p>\u7B49\u5F85Docker\u5B89\u88C5\u5B8C\u6BD5\u540E\uFF0C\u5206\u522B\u8F93\u5165\u4EE5\u4E0B\u503C\uFF1A<br><code>OAuth\u63D0\u4F9B\u5546</code> - Github\u6216Gitee<br><code>Client ID</code> - \u4E4B\u524D\u4FDD\u5B58\u7684Client ID<br><code>Client Secret</code> - \u4E4B\u524D\u4FDD\u5B58\u7684\u5BC6\u94A5<br><code>\u7528\u6237\u540D</code> - Github\u6216Gitee\u7684\u7528\u6237\u540D<br><code>\u7AD9\u70B9\u6807\u9898</code> - \u81EA\u5B9A\u4E49\u7AD9\u70B9\u6807\u9898<br><code>\u8BBF\u95EE\u7AEF\u53E3</code> - \u516C\u5F00\u8BBF\u95EE\u7AEF\u53E3\uFF0C\u53EF\u81EA\u5B9A\u4E49\uFF0C\u9ED8\u8BA48008<br><code>Agent\u7684\u901A\u4FE1\u7AEF\u53E3</code> - Agent\u4E0EDashboard\u7684\u901A\u4FE1\u7AEF\u53E3\uFF0C\u9ED8\u8BA45555</p></li><li><p>\u8F93\u5165\u5B8C\u6210\u540E\uFF0C\u7B49\u5F85\u62C9\u53D6\u955C\u50CF<br> \u5B89\u88C5\u7ED3\u675F\u540E\uFF0C\u5982\u679C\u4E00\u5207\u6B63\u5E38\uFF0C\u6B64\u65F6\u4F60\u53EF\u4EE5\u8BBF\u95EE\u57DF\u540D+\u7AEF\u53E3\u53F7\uFF0C\u5982 \u201C<a href="http://cdn.example.com:8008" target="_blank" rel="noopener noreferrer">http://cdn.example.com:8008</a>\u201D \u6765\u67E5\u770B\u9762\u677F</p></li><li><p>\u5C06\u6765\u5982\u679C\u9700\u8981\u518D\u6B21\u8FD0\u884C\u811A\u672C\uFF0C\u53EF\u4EE5\u8FD0\u884C\uFF1A</p></li></ul><div class="language-bash"><pre><code>./nezha.sh
</code></pre></div><p>\u6765\u6253\u5F00\u7BA1\u7406\u811A\u672C<br><br><br></p><h3 id="\u914D\u7F6E\u53CD\u5411\u4EE3\u7406" tabindex="-1">\u914D\u7F6E\u53CD\u5411\u4EE3\u7406 <a class="header-anchor" href="#\u914D\u7F6E\u53CD\u5411\u4EE3\u7406" aria-hidden="true">#</a></h3><hr><ul><li><p>\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u65B0\u5EFA\u4E00\u4E2A\u7AD9\u70B9\uFF0C\u57DF\u540D\u586B\u5199\u516C\u5F00\u8BBF\u95EE\u57DF\u540D\uFF0C\u5982 \u201C<a href="http://cdn.example.com" target="_blank" rel="noopener noreferrer">http://cdn.example.com</a>\u201C \uFF0C\u7136\u540E\u70B9\u51FB\u201C\u8BBE\u7F6E\u201D\u8FDB\u5165\u7AD9\u70B9\u8BBE\u7F6E\u9009\u9879\uFF0C\u9009\u62E9\u201C\u53CD\u5411\u4EE3\u7406\u201D - \u201C\u65B0\u5EFA\u53CD\u5411\u4EE3\u7406\u201D</p></li><li><p>\u81EA\u5B9A\u4E49\u4E00\u4E2A\u4EE3\u7406\u540D\u79F0\uFF0C\u5728\u4E0B\u65B9\u201C\u76EE\u6807URL\u201D\u4E2D\u586B\u5165 <code>http://127.0.0.1</code> \u7136\u540E\u70B9\u51FB\u201C\u4FDD\u5B58\u201D</p></li><li><p>\u6253\u5F00\u521A\u521A\u65B0\u5EFA\u7684\u53CD\u5411\u4EE3\u7406\u53F3\u8FB9\u7684\u201C\u914D\u7F6E\u6587\u4EF6\u201D\uFF0C\u5C06\u914D\u7F6E\u6587\u4EF6\u66FF\u6362\u4E3A\u4EE5\u4E0B\u5185\u5BB9\uFF1A</p></li></ul><div class="language-nginx"><pre><code><span class="token comment">#PROXY-START/</span>
<span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
<span class="token directive"><span class="token keyword">proxy_pass</span> http://127.0.0.1:8008</span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">proxy_set_header</span> Host <span class="token variable">$host</span></span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">proxy_set_header</span> Upgrade <span class="token variable">$http_upgrade</span></span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token directive"><span class="token keyword">location</span> ~ ^/(ws|terminal/.+)$</span> <span class="token punctuation">{</span>
<span class="token directive"><span class="token keyword">proxy_pass</span> http://127.0.0.1:8008</span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">proxy_http_version</span> 1.1</span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">proxy_set_header</span> Upgrade <span class="token variable">$http_upgrade</span></span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">proxy_set_header</span> Connection <span class="token string">&quot;Upgrade&quot;</span></span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">proxy_set_header</span> Host <span class="token variable">$host</span></span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">#PROXY-END/</span>
</code></pre></div><ul><li>\u70B9\u51FB\u201C\u4FDD\u5B58\u201D<br> \u73B0\u5728\uFF0C\u4F60\u5E94\u8BE5\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528\u57DF\u540D\uFF0C\u5982\uFF1A\u201C<a href="http://cdn.example.com" target="_blank" rel="noopener noreferrer">http://cdn.example.com</a>\u201C \u6765\u8BBF\u95EE\u9762\u677F\u4E86<br><br></li></ul><h4 id="\u6269\u5C55\u5185\u5BB9\uFF1A" tabindex="-1">\u6269\u5C55\u5185\u5BB9\uFF1A <a class="header-anchor" href="#\u6269\u5C55\u5185\u5BB9\uFF1A" aria-hidden="true">#</a></h4><ul><li><p>CaddyServer v1\uFF08v2 \u65E0\u9700\u7279\u522B\u914D\u7F6E\uFF09</p><div class="language-"><pre><code>proxy /ws http://ip:8008 {
websocket
}
proxy /terminal/* http://ip:8008 {
websocket
}
</code></pre></div></li></ul><br><br><h3 id="\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u914D\u7F6Essl" tabindex="-1">\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u914D\u7F6ESSL <a class="header-anchor" href="#\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u914D\u7F6Essl" aria-hidden="true">#</a></h3><hr><p>\u9996\u5148\uFF0C\u5148\u6682\u65F6\u5173\u95ED\u53CD\u5411\u4EE3\u7406<br> \u6B63\u5982\u5728\u5176\u4ED6\u7F51\u7AD9\u4E2D\u914D\u7F6ESSL\u8BC1\u4E66\u4E00\u6837\uFF0C\u8FDB\u5165\u7AD9\u70B9\u8BBE\u7F6E\u4E2D\u7684\u201CSSL\u201D\uFF0C\u4F60\u53EF\u4EE5\u9009\u62E9\u81EA\u52A8\u7533\u8BF7 Let\xB4s Encrypt \u8BC1\u4E66\u6216\u624B\u52A8\u914D\u7F6E\u5DF2\u6709\u7684\u8BC1\u4E66<br> \u5B8C\u6210SSL\u7684\u8BBE\u7F6E\u540E\uFF0C\u4F60\u9700\u8981\u56DE\u5230 <a href="https://github.com/settings/developers" target="_blank" rel="noopener noreferrer">https://github.com/settings/developers</a> \uFF0C\u7F16\u8F91\u4E4B\u524D\u521B\u5EFA\u7684\u9A8C\u8BC1\u5E94\u7528\u7A0B\u5E8F\uFF0C\u5C06\u4E4B\u524D\u6211\u4EEC\u586B\u5165\u7684&quot;Homepage URL&quot;\u548C&quot;Authorization callback URL&quot;\u4E2D\u7684\u57DF\u540D\u5168\u90E8\u4ECE<code>http</code>\u6539\u4E3A<code>https</code>\uFF0C\u5982\uFF1A&quot;<a href="https://cdn.example.com" target="_blank" rel="noopener noreferrer">https://cdn.example.com</a>&quot; \u548C &quot;<a href="https://cdn.example.com/oauth2/callback" target="_blank" rel="noopener noreferrer">https://cdn.example.com/oauth2/callback</a>&quot; \uFF0C<strong>\u4E0D\u66F4\u6539\u6B64\u9879\u53EF\u80FD\u4F1A\u5BFC\u81F4\u4F60\u65E0\u6CD5\u767B\u9646\u9762\u677F\u540E\u53F0</strong></p>`,32),r=[o];function p(l,c,i,d,h,u){return n(),a("div",null,r)}var m=e(s,[["render",p]]);export{k as __pageData,m as default};
@@ -0,0 +1 @@
import{_ as e,c as a,o as n,a as t}from"./app.61e847e1.js";const k='{"title":"Preparations","description":"","frontmatter":{},"headers":[{"level":3,"title":"Preparations","slug":"preparations"},{"level":3,"title":"\u83B7\u53D6Github\u7684Client ID\u548C\u5BC6\u94A5","slug":"\u83B7\u53D6github\u7684client-id\u548C\u5BC6\u94A5"},{"level":3,"title":"\u5728\u670D\u52A1\u5668\u4E2D\u5B89\u88C5Dashboard","slug":"\u5728\u670D\u52A1\u5668\u4E2D\u5B89\u88C5dashboard"},{"level":3,"title":"\u914D\u7F6E\u53CD\u5411\u4EE3\u7406","slug":"\u914D\u7F6E\u53CD\u5411\u4EE3\u7406"},{"level":3,"title":"\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u914D\u7F6ESSL","slug":"\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u914D\u7F6Essl"}],"relativePath":"en_US/guide/dashboard.md"}',s={},o=t("",32),r=[o];function p(l,c,i,d,h,u){return n(),a("div",null,r)}var m=e(s,[["render",p]]);export{k as __pageData,m as default};
@@ -0,0 +1 @@
import{_ as t,c as e,o,b as a}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/notifications.md"}',n={},s=a("p",null,"notifications",-1),i=[s];function c(r,_,d,p,f,l){return o(),e("div",null,i)}var h=t(n,[["render",c]]);export{m as __pageData,h as default};
@@ -0,0 +1 @@
import{_ as t,c as e,o,b as a}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/notifications.md"}',n={},s=a("p",null,"notifications",-1),i=[s];function c(r,_,d,p,f,l){return o(),e("div",null,i)}var h=t(n,[["render",c]]);export{m as __pageData,h as default};
+1
View File
@@ -0,0 +1 @@
import{_ as e,c as t,o as a,b as o}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/q1.md"}',s={},r=o("p",null,"q1",-1),n=[r];function c(_,d,i,p,l,f){return a(),t("div",null,n)}var h=e(s,[["render",c]]);export{m as __pageData,h as default};
@@ -0,0 +1 @@
import{_ as e,c as t,o as a,b as o}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/q1.md"}',s={},r=o("p",null,"q1",-1),n=[r];function c(_,d,i,p,l,f){return a(),t("div",null,n)}var h=e(s,[["render",c]]);export{m as __pageData,h as default};
+1
View File
@@ -0,0 +1 @@
import{_ as e,c as t,o as a,b as o}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/q2.md"}',s={},r=o("p",null,"q2",-1),n=[r];function c(_,d,i,p,l,f){return a(),t("div",null,n)}var h=e(s,[["render",c]]);export{m as __pageData,h as default};
@@ -0,0 +1 @@
import{_ as e,c as t,o as a,b as o}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/q2.md"}',s={},r=o("p",null,"q2",-1),n=[r];function c(_,d,i,p,l,f){return a(),t("div",null,n)}var h=e(s,[["render",c]]);export{m as __pageData,h as default};
+1
View File
@@ -0,0 +1 @@
import{_ as e,c as t,o as a,b as o}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/q3.md"}',s={},r=o("p",null,"q3",-1),n=[r];function c(_,d,i,p,l,f){return a(),t("div",null,n)}var h=e(s,[["render",c]]);export{m as __pageData,h as default};
@@ -0,0 +1 @@
import{_ as e,c as t,o as a,b as o}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/q3.md"}',s={},r=o("p",null,"q3",-1),n=[r];function c(_,d,i,p,l,f){return a(),t("div",null,n)}var h=e(s,[["render",c]]);export{m as __pageData,h as default};
+1
View File
@@ -0,0 +1 @@
import{_ as e,c as t,o as a,b as o}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/q4.md"}',s={},r=o("p",null,"q4",-1),n=[r];function c(_,d,i,p,l,f){return a(),t("div",null,n)}var h=e(s,[["render",c]]);export{m as __pageData,h as default};
@@ -0,0 +1 @@
import{_ as e,c as t,o as a,b as o}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/q4.md"}',s={},r=o("p",null,"q4",-1),n=[r];function c(_,d,i,p,l,f){return a(),t("div",null,n)}var h=e(s,[["render",c]]);export{m as __pageData,h as default};
+1
View File
@@ -0,0 +1 @@
import{_ as e,c as t,o as a,b as o}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/q5.md"}',s={},r=o("p",null,"q5",-1),n=[r];function c(_,d,i,p,l,f){return a(),t("div",null,n)}var h=e(s,[["render",c]]);export{m as __pageData,h as default};
@@ -0,0 +1 @@
import{_ as e,c as t,o as a,b as o}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/q5.md"}',s={},r=o("p",null,"q5",-1),n=[r];function c(_,d,i,p,l,f){return a(),t("div",null,n)}var h=e(s,[["render",c]]);export{m as __pageData,h as default};
@@ -0,0 +1 @@
import{_ as e,c as t,o as s,b as r}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/servers.md"}',a={},o=r("p",null,"servers",-1),n=[o];function c(_,d,i,p,l,f){return s(),t("div",null,n)}var v=e(a,[["render",c]]);export{m as __pageData,v as default};
@@ -0,0 +1 @@
import{_ as e,c as t,o as s,b as r}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/servers.md"}',a={},o=r("p",null,"servers",-1),n=[o];function c(_,d,i,p,l,f){return s(),t("div",null,n)}var v=e(a,[["render",c]]);export{m as __pageData,v as default};
@@ -0,0 +1 @@
import{_ as e,c as t,o as s,b as r}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/services.md"}',a={},o=r("p",null,"services",-1),c=[o];function n(_,i,d,p,l,f){return s(),t("div",null,c)}var v=e(a,[["render",n]]);export{m as __pageData,v as default};
@@ -0,0 +1 @@
import{_ as e,c as t,o as s,b as r}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/services.md"}',a={},o=r("p",null,"services",-1),c=[o];function n(_,i,d,p,l,f){return s(),t("div",null,c)}var v=e(a,[["render",n]]);export{m as __pageData,v as default};
@@ -0,0 +1 @@
import{_ as e,c as t,o as s,b as a}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/settings.md"}',n={},o=a("p",null,"settings",-1),r=[o];function c(_,i,d,p,l,f){return s(),t("div",null,r)}var g=e(n,[["render",c]]);export{m as __pageData,g as default};
@@ -0,0 +1 @@
import{_ as e,c as t,o as s,b as a}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/settings.md"}',n={},o=a("p",null,"settings",-1),r=[o];function c(_,i,d,p,l,f){return s(),t("div",null,r)}var g=e(n,[["render",c]]);export{m as __pageData,g as default};
+1
View File
@@ -0,0 +1 @@
import{_ as e,c as t,o as s,b as a}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/tasks.md"}',o={},r=a("p",null,"tasks",-1),n=[r];function c(_,d,i,p,l,f){return s(),t("div",null,n)}var h=e(o,[["render",c]]);export{m as __pageData,h as default};
@@ -0,0 +1 @@
import{_ as e,c as t,o as s,b as a}from"./app.61e847e1.js";const m='{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/tasks.md"}',o={},r=a("p",null,"tasks",-1),n=[r];function c(_,d,i,p,l,f){return s(),t("div",null,n)}var h=e(o,[["render",c]]);export{m as __pageData,h as default};
+1
View File
@@ -0,0 +1 @@
import{_ as e,c as t,o as a}from"./app.61e847e1.js";const m='{"title":"Home","description":"","frontmatter":{"home":true,"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"Nezha Monitoring","tagline":"Self-hosted lightweight multi-server and website monitoring and alerting.","actionText":"Learn more \u2192","actionLink":"/en_US/guide/dashboard","features":[{"title":"\u7279\u60271","details":"\u7279\u60271\u7279\u60271\u7279\u60271"},{"title":"\u7279\u60272","details":"\u7279\u60272\u7279\u60272\u7279\u60272"},{"title":"\u7279\u60273","details":"\u7279\u60273\u7279\u60273\u7279\u60273"}],"footer":"Licence | Copyright \xA9 2022-present Nezhahq"},"headers":[],"relativePath":"en_US/index.md"}',r={};function i(n,o,s,c,d,h){return a(),t("div")}var p=e(r,[["render",i]]);export{m as __pageData,p as default};
+1
View File
@@ -0,0 +1 @@
import{_ as e,c as t,o as a}from"./app.61e847e1.js";const m='{"title":"Home","description":"","frontmatter":{"home":true,"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"Nezha Monitoring","tagline":"Self-hosted lightweight multi-server and website monitoring and alerting.","actionText":"Learn more \u2192","actionLink":"/en_US/guide/dashboard","features":[{"title":"\u7279\u60271","details":"\u7279\u60271\u7279\u60271\u7279\u60271"},{"title":"\u7279\u60272","details":"\u7279\u60272\u7279\u60272\u7279\u60272"},{"title":"\u7279\u60273","details":"\u7279\u60273\u7279\u60273\u7279\u60273"}],"footer":"Licence | Copyright \xA9 2022-present Nezhahq"},"headers":[],"relativePath":"en_US/index.md"}',r={};function i(n,o,s,c,d,h){return a(),t("div")}var p=e(r,[["render",i]]);export{m as __pageData,p as default};
+24
View File
@@ -0,0 +1,24 @@
import{_ as e,c as n,o as a,a as t}from"./app.61e847e1.js";const b='{"title":"\u4E00\u952E\u5B89\u88C5Agent","description":"","frontmatter":{},"headers":[{"level":2,"title":"\u4E00\u952E\u5B89\u88C5Agent","slug":"\u4E00\u952E\u5B89\u88C5agent"},{"level":3,"title":"\u51C6\u5907\u5DE5\u4F5C","slug":"\u51C6\u5907\u5DE5\u4F5C"},{"level":3,"title":"Linux\u4E00\u952E\u5B89\u88C5","slug":"linux\u4E00\u952E\u5B89\u88C5"},{"level":3,"title":"Windows\u4E00\u952E\u5B89\u88C5","slug":"windows\u4E00\u952E\u5B89\u88C5"},{"level":2,"title":"\u5176\u4ED6\u65B9\u5F0F\u5B89\u88C5Agent","slug":"\u5176\u4ED6\u65B9\u5F0F\u5B89\u88C5agent"},{"level":3,"title":"Linux\u5B89\u88C5Agent","slug":"linux\u5B89\u88C5agent"},{"level":3,"title":"Windows\u5B89\u88C5Agent","slug":"windows\u5B89\u88C5agent"},{"level":3,"title":"OpenWRT\u5B89\u88C5Agent","slug":"openwrt\u5B89\u88C5agent"},{"level":2,"title":"\u81EA\u5B9A\u4E49Agent\u76D1\u63A7\u9879\u76EE","slug":"\u81EA\u5B9A\u4E49agent\u76D1\u63A7\u9879\u76EE"}],"relativePath":"guide/agent.md"}',s={},o=t(`<p><strong>\u54EA\u5412\u76D1\u63A7\u7684\u88AB\u63A7\u7AEF\u670D\u52A1\u88AB\u79F0\u4E3AAgent\uFF0C\u672C\u6587\u6863\u5C06\u4ECB\u7ECD\u5982\u4F55\u5728\u88AB\u63A7\u7AEF\u670D\u52A1\u5668\u4E0A\u5B89\u88C5Agent\uFF0C\u5E76\u4E0EDashboard\u8FDE\u63A5</strong><br><br></p><h2 id="\u4E00\u952E\u5B89\u88C5agent" tabindex="-1">\u4E00\u952E\u5B89\u88C5Agent <a class="header-anchor" href="#\u4E00\u952E\u5B89\u88C5agent" aria-hidden="true">#</a></h2><hr><p>\u76EE\u524D\u54EA\u5412\u76D1\u63A7\u5DF2\u652F\u6301\u5728WIndows\u548CLinux\u4E0A\u4E00\u952E\u5B89\u88C5Agent\uFF0C\u9075\u5FAA\u672C\u6587\u6863\u7684\u6B65\u9AA4\uFF0C\u4F60\u53EF\u4EE5\u5F88\u8F7B\u677E\u7684\u5728\u670D\u52A1\u5668\u4E0A\u90E8\u7F72\u5B83<br><br></p><h3 id="\u51C6\u5907\u5DE5\u4F5C" tabindex="-1">\u51C6\u5907\u5DE5\u4F5C <a class="header-anchor" href="#\u51C6\u5907\u5DE5\u4F5C" aria-hidden="true">#</a></h3><hr><p>\u4F60\u9700\u8981\u63D0\u524D\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u8BBE\u7F6E\u597D\u901A\u4FE1\u57DF\u540D\uFF0C\u6B64\u57DF\u540D\u4E0D\u53EF\u4EE5\u63A5\u5165CDN\uFF0C\u8FD9\u91CC\u4EE5\u524D\u9762\u63D0\u5230\u8FC7\u7684\u793A\u4F8B\u901A\u4FE1\u57DF\u540D \u201C<a href="http://data.example.com" target="_blank" rel="noopener noreferrer">data.example.com</a>\u201D \u6765\u505A\u6F14\u793A<br> \u8FDB\u5165\u540E\u53F0\u7BA1\u7406\u9762\u677F\uFF0C\u8F6C\u5230\u201C\u8BBE\u7F6E\u201D\u9875\uFF0C\u5728\u201C\u672A\u63A5\u5165CDN\u7684\u9762\u677F\u670D\u52A1\u5668\u57DF\u540D/IP\u201D\u9879\u4E2D\u586B\u5165\u901A\u4FE1\u57DF\u540D\uFF0C\u7136\u540E\u70B9\u51FB&quot;\u4FDD\u5B58&quot;<br><br></p><h3 id="linux\u4E00\u952E\u5B89\u88C5" tabindex="-1">Linux\u4E00\u952E\u5B89\u88C5 <a class="header-anchor" href="#linux\u4E00\u952E\u5B89\u88C5" aria-hidden="true">#</a></h3><hr><ul><li>\u9996\u5148\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u6DFB\u52A0\u4E00\u53F0\u670D\u52A1\u5668</li><li>\u70B9\u51FB\u65B0\u6DFB\u52A0\u7684\u670D\u52A1\u5668\u65C1\uFF0C\u7EFF\u8272\u7684Linux\u56FE\u6807\u6309\u94AE\uFF0C\u590D\u5236\u4E00\u952E\u5B89\u88C5\u547D\u4EE4</li><li>\u5728\u88AB\u63A7\u7AEF\u670D\u52A1\u5668\u4E2D\u8FD0\u884C\u590D\u5236\u7684\u4E00\u952E\u5B89\u88C5\u547D\u4EE4\uFF0C\u7B49\u5F85\u5B89\u88C5\u5B8C\u6210\u540E\u8FD4\u56DE\u5230Dashboard\u4E3B\u9875\u67E5\u770B\u670D\u52A1\u5668\u662F\u5426\u4E0A\u7EBF<br><br></li></ul><h3 id="windows\u4E00\u952E\u5B89\u88C5" tabindex="-1">Windows\u4E00\u952E\u5B89\u88C5 <a class="header-anchor" href="#windows\u4E00\u952E\u5B89\u88C5" aria-hidden="true">#</a></h3><hr><ul><li>\u9996\u5148\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u6DFB\u52A0\u4E00\u53F0\u670D\u52A1\u5668</li><li>\u70B9\u51FB\u65B0\u6DFB\u52A0\u7684\u670D\u52A1\u5668\u65C1\uFF0C\u7EFF\u8272\u7684Windows\u56FE\u6807\u6309\u94AE\uFF0C\u590D\u5236\u4E00\u952E\u5B89\u88C5\u547D\u4EE4</li><li>\u8FDB\u5165Windows\u670D\u52A1\u5668\uFF0C\u8FD0\u884CPowerShell\uFF0C\u5728PowerShell\u4E2D\u8FD0\u884C\u590D\u5236\u7684\u5B89\u88C5\u547D\u4EE4</li><li>\u5982\u9047\u5230\u786E\u8BA4\u300C\u6267\u884C\u7B56\u7565\u53D8\u66F4\u300D\u8BF7\u9009\u62E9 Y</li><li>\u7B49\u5F85\u5B89\u88C5\u5B8C\u6210\u540E\u8FD4\u56DEDashboard\u4E3B\u9875\u67E5\u770B\u670D\u52A1\u5668\u662F\u5426\u4E0A\u7EBF<br><br><br><br></li></ul><h2 id="\u5176\u4ED6\u65B9\u5F0F\u5B89\u88C5agent" tabindex="-1">\u5176\u4ED6\u65B9\u5F0F\u5B89\u88C5Agent <a class="header-anchor" href="#\u5176\u4ED6\u65B9\u5F0F\u5B89\u88C5agent" aria-hidden="true">#</a></h2><hr><br><h3 id="linux\u5B89\u88C5agent" tabindex="-1">Linux\u5B89\u88C5Agent <a class="header-anchor" href="#linux\u5B89\u88C5agent" aria-hidden="true">#</a></h3><hr><ul><li>\u9996\u5148\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u6DFB\u52A0\u4E00\u53F0\u670D\u52A1\u5668</li><li>\u5728\u88AB\u63A7\u670D\u52A1\u5668\u4E2D\uFF0C\u8FD0\u884C\u811A\u672C\uFF08\u4F4D\u4E8E\u4E2D\u56FD\u5927\u9646\u7684\u670D\u52A1\u5668\u8BF7\u4F7F\u7528\u955C\u50CF\uFF09\uFF1A</li></ul><div class="language-bash"><pre><code><span class="token func Line truncated
</code></pre></div><ul><li>\u9009\u62E9\u201C\u5B89\u88C5\u76D1\u63A7Agent\u201D</li><li>\u8F93\u5165\u901A\u4FE1\u57DF\u540D\uFF0C\u5982\uFF1A\u201D<a href="http://data.example.com" target="_blank" rel="noopener noreferrer">data.example.com</a>\u201C</li><li>\u8F93\u5165\u9762\u677F\u901A\u4FE1\u7AEF\u53E3\uFF0C\u9ED8\u8BA4\u4E3A5555</li><li>\u8F93\u5165Agent\u5BC6\u94A5\uFF0CAgent\u5BC6\u94A5\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u6DFB\u52A0\u670D\u52A1\u5668\u65F6\u751F\u6210\uFF0C\u53EF\u4EE5\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u7684\u201C\u4E3B\u673A\u201D\u9875\u4E2D\u627E\u5230</li><li>\u7B49\u5F85\u5B89\u88C5\u5B8C\u6210\u540E\u8FD4\u56DEDashboard\u4E3B\u9875\u67E5\u770B\u670D\u52A1\u5668\u662F\u5426\u4E0A\u7EBF<br><br></li></ul><h3 id="windows\u5B89\u88C5agent" tabindex="-1">Windows\u5B89\u88C5Agent <a class="header-anchor" href="#windows\u5B89\u88C5agent" aria-hidden="true">#</a></h3><hr><ul><li>\u8BF7\u53C2\u8003\u793E\u533A\u6587\u7AE0\uFF1A<br><a href="https://nyko.me/2020/12/13/nezha-windows-client.html" target="_blank" rel="noopener noreferrer">\u54EA\u5412\u63A2\u9488 - Windows \u5BA2\u6237\u7AEF\u5B89\u88C5</a><br><br></li></ul><h3 id="openwrt\u5B89\u88C5agent" tabindex="-1">OpenWRT\u5B89\u88C5Agent <a class="header-anchor" href="#openwrt\u5B89\u88C5agent" aria-hidden="true">#</a></h3><hr><p><strong>\u5982\u4F55\u4F7F \u65E7\u7248OpenWRT/LEDE \u81EA\u542F\u52A8</strong></p><ul><li>\u8BF7\u53C2\u8003\u9879\u76EE\uFF1A<br><a href="https://github.com/Erope/openwrt_nezha" target="_blank" rel="noopener noreferrer">\u54EA\u5412\u76D1\u63A7 For OpenWRT</a><br><br></li></ul><p><strong>\u5982\u4F55\u4F7F \u65B0\u7248OpenWRT \u81EA\u542F\u52A8\uFF1F\u6765\u81EA @\u827E\u65AF\u5FB7\u65AF</strong></p><ul><li>\u9996\u5148\u5728 release \u4E0B\u8F7D\u5BF9\u5E94\u7684\u4E8C\u8FDB\u5236\u89E3\u538B zip \u5305\u540E\u653E\u7F6E\u5230 <code>/root</code></li><li>\u8FD0\u884C <code>chmod +x /root/nezha-agent</code> \u8D4B\u4E88\u6267\u884C\u6743\u9650\uFF0C\u7136\u540E\u521B\u5EFA <code>/etc/init.d/nezha-service</code>\uFF1A</li></ul><div class="language-shell"><pre><code><span class="token shebang important">#!/bin/sh /etc/rc.common</span>
<span class="token assign-left variable">START</span><span class="token operator">=</span><span class="token number">99</span>
<span class="token assign-left variable">USE_PROCD</span><span class="token operator">=</span><span class="token number">1</span>
<span class="token function-name function">start_service</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
procd_open_instance
procd_set_param <span class="token builtin class-name">command</span> /root/nezha-agent -s \u9762\u677F\u901A\u4FE1\u5730\u5740:\u7AEF\u53E3 -p \u79D8\u94A5 -d
procd_set_param respawn
procd_close_instance
<span class="token punctuation">}</span>
<span class="token function-name function">stop_service</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token function">killall</span> nezha-agent
<span class="token punctuation">}</span>
<span class="token function-name function">restart</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
stop
<span class="token function">sleep</span> <span class="token number">2</span>
start
<span class="token punctuation">}</span>
</code></pre></div><ul><li>\u8FD0\u884C <code>chmod +x /etc/init.d/nezha-service</code> \u8D4B\u4E88\u6267\u884C\u6743\u9650</li><li>\u542F\u52A8\u670D\u52A1\uFF1A <code>/etc/init.d/nezha-service enable &amp;&amp; /etc/init.d/nezha-service start</code><br><br><br><br></li></ul><h2 id="\u81EA\u5B9A\u4E49agent\u76D1\u63A7\u9879\u76EE" tabindex="-1">\u81EA\u5B9A\u4E49Agent\u76D1\u63A7\u9879\u76EE <a class="header-anchor" href="#\u81EA\u5B9A\u4E49agent\u76D1\u63A7\u9879\u76EE" aria-hidden="true">#</a></h2><hr><h4 id="\u81EA\u5B9A\u4E49\u76D1\u63A7\u7684\u7F51\u5361\u548C\u786C\u76D8\u5206\u533A" tabindex="-1">\u81EA\u5B9A\u4E49\u76D1\u63A7\u7684\u7F51\u5361\u548C\u786C\u76D8\u5206\u533A <a class="header-anchor" href="#\u81EA\u5B9A\u4E49\u76D1\u63A7\u7684\u7F51\u5361\u548C\u786C\u76D8\u5206\u533A" aria-hidden="true">#</a></h4><ul><li>\u6267\u884C <code>/opt/nezha/agent/nezha-agent --edit-agent-config</code> \u6765\u9009\u62E9\u81EA\u5B9A\u4E49\u7684\u7F51\u5361\u548C\u5206\u533A\uFF0C\u7136\u540E\u91CD\u542F Agent \u5373\u53EF\u751F\u6548</li></ul><h4 id="\u5176\u4ED6\u8FD0\u884C\u53C2\u6570" tabindex="-1">\u5176\u4ED6\u8FD0\u884C\u53C2\u6570 <a class="header-anchor" href="#\u5176\u4ED6\u8FD0\u884C\u53C2\u6570" aria-hidden="true">#</a></h4><p>\u901A\u8FC7\u6267\u884C <code>./nezha-agent --help</code> \u67E5\u770B\u652F\u6301\u7684\u53C2\u6570\uFF0C\u5982\u679C\u4F60\u4F7F\u7528\u4E86\u4E00\u952E\u811A\u672C\u5B89\u88C5Agent\uFF0C\u53EF\u4EE5\u7F16\u8F91 <code>/etc/systemd/system/nezha-agent.service</code>\uFF0C\u5728 <code>ExecStart=</code> \u8FD9\u4E00\u884C\u7684\u672B\u5C3E\u52A0\u4E0A\u4EE5\u4E0B\u53C2\u6570</p><ul><li><code>--report-delay</code> \u63A7\u5236\u7CFB\u7EDF\u4FE1\u606F\u4E0A\u62A5\u7684\u95F4\u9694\uFF0C\u9ED8\u8BA4\u4E3A 1 \u79D2\uFF0C\u53EF\u4EE5\u8BBE\u7F6E\u4E3A 3 \u6765\u8FDB\u4E00\u6B65\u964D\u4F4E agent \u7AEF\u7CFB\u7EDF\u8D44\u6E90\u5360\u7528\uFF08\u914D\u7F6E\u533A\u95F4 1-4\uFF09</li><li><code>--skip-conn</code> \u4E0D\u76D1\u63A7\u8FDE\u63A5\u6570\uFF0C\u63A8\u8350 \u673A\u573A/\u8FDE\u63A5\u5BC6\u96C6\u578B\u670D\u52A1\u5668\u6216CPU\u5360\u7528\u8F83\u9AD8\u7684\u670D\u52A1\u5668\u8BBE\u7F6E</li><li><code>--skip-procs</code> \u4E0D\u76D1\u63A7\u8FDB\u7A0B\u6570\uFF0C\u4E5F\u53EF\u4EE5\u964D\u4F4E agent \u5360\u7528</li><li><code>--disable-auto-update</code> \u7981\u6B62 <strong>\u81EA\u52A8\u66F4\u65B0</strong> Agent\uFF08\u5B89\u5168\u7279\u6027\uFF09</li><li><code>--disable-force-update</code> \u7981\u6B62 <strong>\u5F3A\u5236\u66F4\u65B0</strong> Agent\uFF08\u5B89\u5168\u7279\u6027\uFF09</li><li><code>--disable-command-execute</code> \u7981\u6B62\u5728 Agent \u4E0A\u6267\u884C\u5B9A\u65F6\u4EFB\u52A1\u3001\u6253\u5F00\u5728\u7EBF\u7EC8\u7AEF\uFF08\u5B89\u5168\u7279\u6027\uFF09</li><li><code>--tls</code> \u542F\u7528 SSL/TLS \u52A0\u5BC6\uFF08\u4F7F\u7528 nginx \u53CD\u5411\u4EE3\u7406 Agent \u7684 grpc \u8FDE\u63A5\uFF0C\u5E76\u4E14 nginx \u5F00\u542F SSL/TLS \u65F6\uFF0C\u9700\u8981\u542F\u7528\u8BE5\u9879\u914D\u7F6E\uFF09</li></ul>`,39),i=[o];function l(r,c,p,d,h,u){return a(),n("div",null,i)}var m=e(s,[["render",l]]);export{b as __pageData,m as default};
+1
View File
@@ -0,0 +1 @@
import{_ as e,c as n,o as a,a as t}from"./app.61e847e1.js";const b='{"title":"\u4E00\u952E\u5B89\u88C5Agent","description":"","frontmatter":{},"headers":[{"level":2,"title":"\u4E00\u952E\u5B89\u88C5Agent","slug":"\u4E00\u952E\u5B89\u88C5agent"},{"level":3,"title":"\u51C6\u5907\u5DE5\u4F5C","slug":"\u51C6\u5907\u5DE5\u4F5C"},{"level":3,"title":"Linux\u4E00\u952E\u5B89\u88C5","slug":"linux\u4E00\u952E\u5B89\u88C5"},{"level":3,"title":"Windows\u4E00\u952E\u5B89\u88C5","slug":"windows\u4E00\u952E\u5B89\u88C5"},{"level":2,"title":"\u5176\u4ED6\u65B9\u5F0F\u5B89\u88C5Agent","slug":"\u5176\u4ED6\u65B9\u5F0F\u5B89\u88C5agent"},{"level":3,"title":"Linux\u5B89\u88C5Agent","slug":"linux\u5B89\u88C5agent"},{"level":3,"title":"Windows\u5B89\u88C5Agent","slug":"windows\u5B89\u88C5agent"},{"level":3,"title":"OpenWRT\u5B89\u88C5Agent","slug":"openwrt\u5B89\u88C5agent"},{"level":2,"title":"\u81EA\u5B9A\u4E49Agent\u76D1\u63A7\u9879\u76EE","slug":"\u81EA\u5B9A\u4E49agent\u76D1\u63A7\u9879\u76EE"}],"relativePath":"guide/agent.md"}',s={},o=t("",39),i=[o];function l(r,c,p,d,h,u){return a(),n("div",null,i)}var m=e(s,[["render",l]]);export{b as __pageData,m as default};
-35
View File
@@ -1,35 +0,0 @@
import{_ as a,c as n,o as s,a as e}from"./app.54944ef9.js";const h='{"title":"API Reference","description":"","frontmatter":{},"headers":[{"level":2,"title":"Helper Methods","slug":"helper-methods"},{"level":3,"title":"useData","slug":"usedata"},{"level":3,"title":"useRoute","slug":"useroute"},{"level":3,"title":"useRouter","slug":"userouter"},{"level":3,"title":"withBase","slug":"withbase"},{"level":2,"title":"Global Components","slug":"global-components"},{"level":3,"title":"<Content/>","slug":"content"},{"level":3,"title":"<ClientOnly/>","slug":"clientonly"}],"relativePath":"guide/api.md","lastUpdated":1652768268000}',t={},o=e(`<h1 id="api-reference" tabindex="-1">API Reference <a class="header-anchor" href="#api-reference" aria-hidden="true">#</a></h1><h2 id="helper-methods" tabindex="-1">Helper Methods <a class="header-anchor" href="#helper-methods" aria-hidden="true">#</a></h2><p>The following methods are globally importable from <code>vitepress</code> and are typically used in custom theme Vue components. However, they are also usable inside <code>.md</code> pages because markdown files are compiled into Vue single-file components.</p><p>Methods that start with <code>use*</code> indicates that it is a <a href="https://vuejs.org/guide/introduction.html#composition-api" target="_blank" rel="noopener noreferrer">Vue 3 Composition API</a> function that can only be used inside <code>setup()</code> or <code>&lt;script setup&gt;</code>.</p><h3 id="usedata" tabindex="-1"><code>useData</code> <a class="header-anchor" href="#usedata" aria-hidden="true">#</a></h3><p>Returns page-specific data. The returned object has the following type:</p><div class="language-ts"><pre><code><span class="token keyword">interface</span> <span class="token class-name">VitePressData</span> <span class="token punctuation">{</span>
site<span class="token operator">:</span> Ref<span class="token operator">&lt;</span>SiteData<span class="token operator">&gt;</span>
page<span class="token operator">:</span> Ref<span class="token operator">&lt;</span>PageData<span class="token operator">&gt;</span>
theme<span class="token operator">:</span> Ref<span class="token operator">&lt;</span><span class="token builtin">any</span><span class="token operator">&gt;</span> <span class="token comment">// themeConfig from .vitepress/config.js</span>
frontmatter<span class="token operator">:</span> Ref<span class="token operator">&lt;</span>PageData<span class="token punctuation">[</span><span class="token string">&#39;frontmatter&#39;</span><span class="token punctuation">]</span><span class="token operator">&gt;</span>
title<span class="token operator">:</span> Ref<span class="token operator">&lt;</span><span class="token builtin">string</span><span class="token operator">&gt;</span>
description<span class="token operator">:</span> Ref<span class="token operator">&lt;</span><span class="token builtin">string</span><span class="token operator">&gt;</span>
lang<span class="token operator">:</span> Ref<span class="token operator">&lt;</span><span class="token builtin">string</span><span class="token operator">&gt;</span>
localePath<span class="token operator">:</span> Ref<span class="token operator">&lt;</span><span class="token builtin">string</span><span class="token operator">&gt;</span>
<span class="token punctuation">}</span>
</code></pre></div><p><strong>Example:</strong></p><div class="language-vue"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">setup</span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> <span class="token punctuation">{</span> useData <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">&#39;vitepress&#39;</span>
<span class="token keyword">const</span> <span class="token punctuation">{</span> theme <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">useData</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h1</span><span class="token punctuation">&gt;</span></span>{{ theme.heroText }}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h1</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><h3 id="useroute" tabindex="-1"><code>useRoute</code> <a class="header-anchor" href="#useroute" aria-hidden="true">#</a></h3><p>Returns the current route object with the following type:</p><div class="language-ts"><pre><code><span class="token keyword">interface</span> <span class="token class-name">Route</span> <span class="token punctuation">{</span>
path<span class="token operator">:</span> <span class="token builtin">string</span>
data<span class="token operator">:</span> PageData
component<span class="token operator">:</span> Component <span class="token operator">|</span> <span class="token keyword">null</span>
<span class="token punctuation">}</span>
</code></pre></div><h3 id="userouter" tabindex="-1"><code>useRouter</code> <a class="header-anchor" href="#userouter" aria-hidden="true">#</a></h3><p>Returns the VitePress router instance so you can programmatically navigate to another page.</p><div class="language-ts"><pre><code><span class="token keyword">interface</span> <span class="token class-name">Router</span> <span class="token punctuation">{</span>
route<span class="token operator">:</span> Route
<span class="token function-variable function">go</span><span class="token operator">:</span> <span class="token punctuation">(</span>href<span class="token operator">?</span><span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token builtin">Promise</span><span class="token operator">&lt;</span><span class="token keyword">void</span><span class="token operator">&gt;</span>
<span class="token punctuation">}</span>
</code></pre></div><h3 id="withbase" tabindex="-1"><code>withBase</code> <a class="header-anchor" href="#withbase" aria-hidden="true">#</a></h3><ul><li><p><strong>Type</strong>: <code>(path: string) =&gt; string</code></p><p>Appends the configured <a href="./../config/basics.html#base"><code>base</code></a> to a given URL path. Also see <a href="./assets.html#base-url">Base URL</a>.</p></li></ul><h2 id="global-components" tabindex="-1">Global Components <a class="header-anchor" href="#global-components" aria-hidden="true">#</a></h2><p>VitePress comes with few built-in component that can be used globally. You may use these components in your markdown or your custom theme configuration.</p><h3 id="content" tabindex="-1"><code>&lt;Content/&gt;</code> <a class="header-anchor" href="#content" aria-hidden="true">#</a></h3><p>The <code>&lt;Content/&gt;</code> component displays the rendered markdown contents. Useful <a href="./theming.html">when creating your own theme</a>.</p><div class="language-vue"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h1</span><span class="token punctuation">&gt;</span></span>Custom Layout!<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h1</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Content</span> <span class="token punctuation">/&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><h3 id="clientonly" tabindex="-1"><code>&lt;ClientOnly/&gt;</code> <a class="header-anchor" href="#clientonly" aria-hidden="true">#</a></h3><p>The <code>&lt;ClientOnly/&gt;</code> component renders its slot only at client side.</p><p>Because VitePress applications are server-rendered in Node.js when generating static builds, any Vue usage must conform to the universal code requirements. In short, make sure to only access Browser / DOM APIs in beforeMount or mounted hooks.</p><p>If you are using or demoing components that are not SSR-friendly (for example, contain custom directives), you can wrap them inside the <code>ClientOnly</code> component.</p><div class="language-html"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>ClientOnly</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>NonSSRFriendlyComponent</span> <span class="token punctuation">/&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>ClientOnly</span><span class="token punctuation">&gt;</span></span>
</code></pre></div>`,27),p=[o];function c(l,r,i,u,d,k){return s(),n("div",null,p)}var m=a(t,[["render",c]]);export{h as __pageData,m as default};
-1
View File
@@ -1 +0,0 @@
import{_ as a,c as n,o as s,a as e}from"./app.54944ef9.js";const h='{"title":"API Reference","description":"","frontmatter":{},"headers":[{"level":2,"title":"Helper Methods","slug":"helper-methods"},{"level":3,"title":"useData","slug":"usedata"},{"level":3,"title":"useRoute","slug":"useroute"},{"level":3,"title":"useRouter","slug":"userouter"},{"level":3,"title":"withBase","slug":"withbase"},{"level":2,"title":"Global Components","slug":"global-components"},{"level":3,"title":"<Content/>","slug":"content"},{"level":3,"title":"<ClientOnly/>","slug":"clientonly"}],"relativePath":"guide/api.md","lastUpdated":1652768268000}',t={},o=e("",27),p=[o];function c(l,r,i,u,d,k){return s(),n("div",null,p)}var m=a(t,[["render",c]]);export{h as __pageData,m as default};
-13
View File
@@ -1,13 +0,0 @@
import{_ as e,c as a,o as s,a as n}from"./app.54944ef9.js";const k='{"title":"Asset Handling","description":"","frontmatter":{},"headers":[{"level":2,"title":"Public Files","slug":"public-files"},{"level":2,"title":"Base URL","slug":"base-url"}],"relativePath":"guide/assets.md","lastUpdated":1652768268000}',t={},o=n(`<h1 id="asset-handling" tabindex="-1">Asset Handling <a class="header-anchor" href="#asset-handling" aria-hidden="true">#</a></h1><p>All Markdown files are compiled into Vue components and processed by <a href="https://github.com/vitejs/vite" target="_blank" rel="noopener noreferrer">Vite</a>. You can, <strong>and should</strong>, reference any assets using relative URLs:</p><div class="language-md"><pre><code><span class="token url"><span class="token operator">!</span>[<span class="token content">An image</span>](<span class="token url">./image.png</span>)</span>
</code></pre></div><p>You can reference static assets in your markdown files, your <code>*.vue</code> components in the theme, styles and plain <code>.css</code> files either using absolute public paths (based on project root) or relative paths (based on your file system). The latter is similar to the behavior you are used to if you have used <code>vue-cli</code> or webpack&#39;s <code>file-loader</code>.</p><p>Common image, media, and font filetypes are detected and included as assets automatically.</p><p>All referenced assets, including those using absolute paths, will be copied to the dist folder with a hashed file name in the production build. Never-referenced assets will not be copied. Similar to <code>vue-cli</code>, image assets smaller than 4kb will be base64 inlined.</p><p>All <strong>static</strong> path references, including absolute paths, should be based on your working directory structure.</p><h2 id="public-files" tabindex="-1">Public Files <a class="header-anchor" href="#public-files" aria-hidden="true">#</a></h2><p>Sometimes you may need to provide static assets that are not directly referenced in any of your Markdown or theme components (for example, favicons and PWA icons). The <code>public</code> directory under project root can be used as an escape hatch to provide static assets that either are never referenced in source code (e.g. <code>robots.txt</code>), or must retain the exact same file name (without hashing).</p><p>Assets placed in <code>public</code> will be copied to the root of the dist directory as-is.</p><p>Note that you should reference files placed in <code>public</code> using root absolute path - for example, <code>public/icon.png</code> should always be referenced in source code as <code>/icon.png</code>.</p><h2 id="base-url" tabindex="-1">Base URL <a class="header-anchor" href="#base-url" aria-hidden="true">#</a></h2><p>If your site is deployed to a non-root URL, you will need to set the <code>base</code> option in <code>.vitepress/config.js</code>. For example, if you plan to deploy your site to <code>https://foo.github.io/bar/</code>, then <code>base</code> should be set to <code>&#39;/bar/&#39;</code> (it should always start and end with a slash).</p><p>All your static asset paths are automatically processed to adjust for different <code>base</code> config values. For example, if you have an absolute reference to an asset under <code>public</code> in your markdown:</p><div class="language-md"><pre><code><span class="token url"><span class="token operator">!</span>[<span class="token content">An image</span>](<span class="token url">/image-inside-public.png</span>)</span>
</code></pre></div><p>You do <strong>not</strong> need to update it when you change the <code>base</code> config value in this case.</p><p>However, if you are authoring a theme component that links to assets dynamically, e.g. an image whose <code>src</code> is based on a theme config value:</p><div class="language-vue"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>img</span> <span class="token attr-name">:src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>theme.logoPath<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
</code></pre></div><p>In this case it is recommended to wrap the path with the <a href="./api.html#withbase"><code>withBase</code> helper</a> provided by VitePress:</p><div class="language-vue"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">setup</span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> <span class="token punctuation">{</span> withBase<span class="token punctuation">,</span> useData <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">&#39;vitepress&#39;</span>
<span class="token keyword">const</span> <span class="token punctuation">{</span> theme <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">useData</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>img</span> <span class="token attr-name">:src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>withBase(theme.logoPath)<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
</code></pre></div>`,20),p=[o];function c(i,l,r,d,u,h){return s(),a("div",null,p)}var m=e(t,[["render",c]]);export{k as __pageData,m as default};
-1
View File
@@ -1 +0,0 @@
import{_ as e,c as a,o as s,a as n}from"./app.54944ef9.js";const k='{"title":"Asset Handling","description":"","frontmatter":{},"headers":[{"level":2,"title":"Public Files","slug":"public-files"},{"level":2,"title":"Base URL","slug":"base-url"}],"relativePath":"guide/assets.md","lastUpdated":1652768268000}',t={},o=n("",20),p=[o];function c(i,l,r,d,u,h){return s(),a("div",null,p)}var m=e(t,[["render",c]]);export{k as __pageData,m as default};
-39
View File
@@ -1,39 +0,0 @@
import{_ as n,c as s,o as e,a}from"./app.54944ef9.js";const h='{"title":"Configuration","description":"","frontmatter":{},"headers":[{"level":2,"title":"Overview","slug":"overview"},{"level":2,"title":"Config Intellisense","slug":"config-intellisense"},{"level":2,"title":"Typed Theme Config","slug":"typed-theme-config"}],"relativePath":"guide/configuration.md","lastUpdated":1652768268000}',t={},o=a(`<h1 id="configuration" tabindex="-1">Configuration <a class="header-anchor" href="#configuration" aria-hidden="true">#</a></h1><h2 id="overview" tabindex="-1">Overview <a class="header-anchor" href="#overview" aria-hidden="true">#</a></h2><p>Without any configuration, the page is pretty minimal, and the user has no way to navigate around the site. To customize your site, let\u2019s first create a <code>.vitepress</code> directory inside your docs directory. This is where all VitePress-specific files will be placed. Your project structure is probably like this:</p><div class="language-bash"><pre><code><span class="token builtin class-name">.</span>
\u251C\u2500 docs
\u2502 \u251C\u2500 .vitepress
\u2502 \u2502 \u2514\u2500 config.js
\u2502 \u2514\u2500 index.md
\u2514\u2500 package.json
</code></pre></div><p>The essential file for configuring a VitePress site is <code>.vitepress/config.js</code>, which should export a JavaScript object:</p><div class="language-js"><pre><code><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span>
<span class="token literal-property property">title</span><span class="token operator">:</span> <span class="token string">&#39;Hello VitePress&#39;</span><span class="token punctuation">,</span>
<span class="token literal-property property">description</span><span class="token operator">:</span> <span class="token string">&#39;Just playing around.&#39;</span>
<span class="token punctuation">}</span>
</code></pre></div><p>Check out the <a href="./../config/basics.html">Config Reference</a> for a full list of options.</p><h2 id="config-intellisense" tabindex="-1">Config Intellisense <a class="header-anchor" href="#config-intellisense" aria-hidden="true">#</a></h2><p>Since VitePress ships with TypeScript typings, you can leverage your IDE&#39;s intellisense with jsdoc type hints:</p><div class="language-js"><pre><code><span class="token comment">/**
* @type {import(&#39;vitepress&#39;).UserConfig}
*/</span>
<span class="token keyword">const</span> config <span class="token operator">=</span> <span class="token punctuation">{</span>
<span class="token comment">// ...</span>
<span class="token punctuation">}</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> config
</code></pre></div><p>Alternatively, you can use the <code>defineConfig</code> helper at which should provide intellisense without the need for jsdoc annotations:</p><div class="language-js"><pre><code><span class="token keyword">import</span> <span class="token punctuation">{</span> defineConfig <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">&#39;vitepress&#39;</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineConfig</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
<span class="token comment">// ...</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
</code></pre></div><p>VitePress also directly supports TS config files. You can use <code>.vitepress/config.ts</code> with the <code>defineConfig</code> helper as well.</p><h2 id="typed-theme-config" tabindex="-1">Typed Theme Config <a class="header-anchor" href="#typed-theme-config" aria-hidden="true">#</a></h2><p>By default, <code>defineConfig</code> helper leverages the theme config type from default theme:</p><div class="language-ts"><pre><code><span class="token keyword">import</span> <span class="token punctuation">{</span> defineConfig <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">&#39;vitepress&#39;</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineConfig</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
themeConfig<span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token comment">// Type is \`DefaultTheme.Config\`</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
</code></pre></div><p>If you use a custom theme and want type checks for the theme config, you&#39;ll need to use <code>defineConfigWithTheme</code> instead, and pass the config type for your custom theme via a generic argument:</p><div class="language-ts"><pre><code><span class="token keyword">import</span> <span class="token punctuation">{</span> defineConfigWithTheme <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">&#39;vitepress&#39;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> ThemeConfig <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">&#39;your-theme&#39;</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token generic-function"><span class="token function">defineConfigWithTheme</span><span class="token generic class-name"><span class="token operator">&lt;</span>ThemeConfig<span class="token operator">&gt;</span></span></span><span class="token punctuation">(</span><span class="token punctuation">{</span>
themeConfig<span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token comment">// Type is \`ThemeConfig\`</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
</code></pre></div>`,18),p=[o];function i(c,r,l,d,u,f){return e(),s("div",null,p)}var g=n(t,[["render",i]]);export{h as __pageData,g as default};
@@ -1 +0,0 @@
import{_ as n,c as s,o as e,a}from"./app.54944ef9.js";const h='{"title":"Configuration","description":"","frontmatter":{},"headers":[{"level":2,"title":"Overview","slug":"overview"},{"level":2,"title":"Config Intellisense","slug":"config-intellisense"},{"level":2,"title":"Typed Theme Config","slug":"typed-theme-config"}],"relativePath":"guide/configuration.md","lastUpdated":1652768268000}',t={},o=a("",18),p=[o];function i(c,r,l,d,u,f){return e(),s("div",null,p)}var g=n(t,[["render",i]]);export{h as __pageData,g as default};
+24
View File
@@ -0,0 +1,24 @@
import{_ as e,c as a,o as n,a as t}from"./app.61e847e1.js";const k='{"title":"\u51C6\u5907\u5DE5\u4F5C","description":"","frontmatter":{},"headers":[{"level":3,"title":"\u51C6\u5907\u5DE5\u4F5C","slug":"\u51C6\u5907\u5DE5\u4F5C"},{"level":3,"title":"\u83B7\u53D6Github\u7684Client ID\u548C\u5BC6\u94A5","slug":"\u83B7\u53D6github\u7684client-id\u548C\u5BC6\u94A5"},{"level":3,"title":"\u5728\u670D\u52A1\u5668\u4E2D\u5B89\u88C5Dashboard","slug":"\u5728\u670D\u52A1\u5668\u4E2D\u5B89\u88C5dashboard"},{"level":3,"title":"\u914D\u7F6E\u53CD\u5411\u4EE3\u7406","slug":"\u914D\u7F6E\u53CD\u5411\u4EE3\u7406"},{"level":3,"title":"\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u914D\u7F6ESSL","slug":"\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u914D\u7F6Essl"}],"relativePath":"guide/dashboard.md"}',s={},o=t(`<h3 id="\u51C6\u5907\u5DE5\u4F5C" tabindex="-1">\u51C6\u5907\u5DE5\u4F5C <a class="header-anchor" href="#\u51C6\u5907\u5DE5\u4F5C" aria-hidden="true">#</a></h3><hr><p>\u642D\u5EFA\u4E00\u4E2A\u54EA\u5412\u76D1\u63A7\uFF0C\u4F60\u9700\u8981\uFF1A</p><ol><li>\u4E00\u53F0\u53EF\u4EE5\u8FDE\u63A5\u516C\u7F51\u7684VPS\uFF0C\u9632\u706B\u5899\u548C\u5B89\u5168\u7B56\u7565\u9700\u8981\u653E\u884C8008\u548C5555\u7AEF\u53E3\uFF0C\u5426\u5219\u4F1A\u65E0\u6CD5\u8BBF\u95EE\u548C\u65E0\u6CD5\u63A5\u6536\u6570\u636E\u3002\u5355\u6838512MB\u5185\u5B58\u7684\u670D\u52A1\u5668\u914D\u7F6E\u5C31\u8DB3\u4EE5\u6EE1\u8DB3\u5927\u591A\u6570\u4F7F\u7528\u573A\u666F</li><li>\u4E00\u4E2A\u5DF2\u7ECF\u8BBE\u7F6E\u597DA\u8BB0\u5F55\uFF0C\u6307\u5411Dashboard\u670D\u52A1\u5668ip\u7684\u57DF\u540D</li></ol><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>\u5982\u679C\u4F60\u60F3\u4F7F\u7528CDN\uFF0C\u8BF7\u51C6\u5907\u4E24\u4E2A\u57DF\u540D\uFF0C\u4E00\u4E2A\u914D\u7F6E\u597DCDN\u7528\u4F5C\u516C\u5F00\u8BBF\u95EE\uFF0CCDN\u9700\u8981\u652F\u6301WebSocket\u534F\u8BAE\uFF1B\u53E6\u4E00\u4E2A\u57DF\u540D\u4E0D\u8981\u4F7F\u7528CDN\uFF0C\u7528\u4F5CAgent\u7AEF\u4E0EDashboard\u7684\u901A\u4FE1<br> \u672C\u6587\u6863\u5206\u522B\u4EE5 &quot;<a href="http://cdn.example.com" target="_blank" rel="noopener noreferrer">cdn.example.com</a>&quot; \u548C &quot;<a href="http://data.example.com" target="_blank" rel="noopener noreferrer">data.example.com</a>&quot; \u4E24\u4E2A\u57DF\u540D\u6765\u6F14\u793A</p></div><ol start="3"><li>\u4E00\u4E2AGithub/Gitee\u8D26\u53F7</li></ol><p><strong>\u672C\u6587\u6863\u5C06\u4EE5\u5B9D\u5854\u9762\u677F\u53CD\u4EE3\u9762\u677F\u7684\u8FC7\u7A0B\u4F5C\u4E3A\u8303\u4F8B\uFF0C\u968F\u7740\u672A\u6765\u7248\u672C\u7684\u53D8\u5316\uFF0C\u90E8\u5206\u529F\u80FD\u7684\u5165\u53E3\u53EF\u80FD\u4F1A\u53D1\u751F\u6539\u53D8\uFF0C\u672C\u6587\u6863\u4EC5\u4F9B\u53C2\u8003</strong><br><br></p><h3 id="\u83B7\u53D6github\u7684client-id\u548C\u5BC6\u94A5" tabindex="-1">\u83B7\u53D6Github\u7684Client ID\u548C\u5BC6\u94A5 <a class="header-anchor" href="#\u83B7\u53D6github\u7684client-id\u548C\u5BC6\u94A5" aria-hidden="true">#</a></h3><hr><p>\u54EA\u5412\u76D1\u63A7\u63A5\u5165Github\u548CGitee\u4F5C\u4E3A\u540E\u53F0\u7BA1\u7406\u5458\u8D26\u53F7</p><ul><li>\u9996\u5148\u6211\u4EEC\u9700\u8981\u65B0\u5EFA\u4E00\u4E2A\u9A8C\u8BC1\u5E94\u7528\uFF0C\u4EE5Github\u4E3A\u4F8B\uFF0C\u767B\u9646Github\u540E\uFF0C\u6253\u5F00 <a href="https://github.com/settings/developers" target="_blank" rel="noopener noreferrer">https://github.com/settings/developers</a> \uFF0C\u4F9D\u6B21\u9009\u62E9\u201COAuth Apps\u201D - \u201CNew OAuth App\u201D<br><code>Application name</code> - \u968F\u610F\u586B\u5199<br><code>Homepage URL</code> - \u586B\u5199\u9762\u677F\u7684\u8BBF\u95EE\u57DF\u540D\uFF0C\u5982\uFF1A&quot;<a href="http://cdn.example.com" target="_blank" rel="noopener noreferrer">http://cdn.example.com</a>&quot;<br><code>Authorization callback URL</code> - \u586B\u5199\u56DE\u8C03\u5730\u5740\uFF0C\u5982\uFF1A&quot;<a href="http://cdn.example.com/oauth2/callback" target="_blank" rel="noopener noreferrer">http://cdn.example.com/oauth2/callback</a>&quot;</li><li>\u70B9\u51FB\u201CRegister application\u201D</li><li>\u4FDD\u5B58\u9875\u9762\u4E2D\u7684Client ID\uFF0C\u7136\u540E\u70B9\u51FB \u201CGenerate a new client secret\u201C\uFF0C\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684Client Secret\uFF0C\u65B0\u5EFA\u7684\u5BC6\u94A5\u4EC5\u4F1A\u663E\u793A\u4E00\u6B21\uFF0C\u8BF7\u59A5\u5584\u4FDD\u5B58 <br><br></li></ul><h3 id="\u5728\u670D\u52A1\u5668\u4E2D\u5B89\u88C5dashboard" tabindex="-1">\u5728\u670D\u52A1\u5668\u4E2D\u5B89\u88C5Dashboard <a class="header-anchor" href="#\u5728\u670D\u52A1\u5668\u4E2D\u5B89\u88C5dashboard" aria-hidden="true">#</a></h3><hr><ul><li>\u5728\u9762\u677F\u670D\u52A1\u5668\u4E2D\uFF0C\u8FD0\u884C\u5B89\u88C5\u811A\u672C\uFF1A</li></ul><div class="language-bash"><pre><code><span class="token function">curl</span> -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh <span class="token operator">&amp;&amp;</span> <span class="token function">chmod</span> +x nezha.sh <span class="token operator">&am Line truncated
</code></pre></div><p>\u5982\u679C\u4F60\u7684\u9762\u677F\u670D\u52A1\u5668\u4F4D\u4E8E\u4E2D\u56FD\u5927\u9646\uFF0C\u53EF\u4EE5\u4F7F\u7528\u955C\u50CF\uFF1A</p><div class="language-bash"><pre><code><span class="token function">curl</span> -L https://fastly.jsdelivr.net/gh/naiba/nezha@master/script/install.sh -o nezha.sh <span class="token operator">&amp;&amp;</span> <span class="token function">chmod</span> +x nezha.sh <span class="token operator">&amp;&amp;</span> <span class="token function">sudo</span> <span class="token assign-left variable">CN</span><span class="token operator">=</span>true ./nezha.sh
</code></pre></div><ul><li><p>\u7B49\u5F85Docker\u5B89\u88C5\u5B8C\u6BD5\u540E\uFF0C\u5206\u522B\u8F93\u5165\u4EE5\u4E0B\u503C\uFF1A<br><code>OAuth\u63D0\u4F9B\u5546</code> - Github\u6216Gitee<br><code>Client ID</code> - \u4E4B\u524D\u4FDD\u5B58\u7684Client ID<br><code>Client Secret</code> - \u4E4B\u524D\u4FDD\u5B58\u7684\u5BC6\u94A5<br><code>\u7528\u6237\u540D</code> - Github\u6216Gitee\u7684\u7528\u6237\u540D<br><code>\u7AD9\u70B9\u6807\u9898</code> - \u81EA\u5B9A\u4E49\u7AD9\u70B9\u6807\u9898<br><code>\u8BBF\u95EE\u7AEF\u53E3</code> - \u516C\u5F00\u8BBF\u95EE\u7AEF\u53E3\uFF0C\u53EF\u81EA\u5B9A\u4E49\uFF0C\u9ED8\u8BA48008<br><code>Agent\u7684\u901A\u4FE1\u7AEF\u53E3</code> - Agent\u4E0EDashboard\u7684\u901A\u4FE1\u7AEF\u53E3\uFF0C\u9ED8\u8BA45555</p></li><li><p>\u8F93\u5165\u5B8C\u6210\u540E\uFF0C\u7B49\u5F85\u62C9\u53D6\u955C\u50CF<br> \u5B89\u88C5\u7ED3\u675F\u540E\uFF0C\u5982\u679C\u4E00\u5207\u6B63\u5E38\uFF0C\u6B64\u65F6\u4F60\u53EF\u4EE5\u8BBF\u95EE\u57DF\u540D+\u7AEF\u53E3\u53F7\uFF0C\u5982 \u201C<a href="http://cdn.example.com:8008" target="_blank" rel="noopener noreferrer">http://cdn.example.com:8008</a>\u201D \u6765\u67E5\u770B\u9762\u677F</p></li><li><p>\u5C06\u6765\u5982\u679C\u9700\u8981\u518D\u6B21\u8FD0\u884C\u811A\u672C\uFF0C\u53EF\u4EE5\u8FD0\u884C\uFF1A</p></li></ul><div class="language-bash"><pre><code>./nezha.sh
</code></pre></div><p>\u6765\u6253\u5F00\u7BA1\u7406\u811A\u672C<br><br><br></p><h3 id="\u914D\u7F6E\u53CD\u5411\u4EE3\u7406" tabindex="-1">\u914D\u7F6E\u53CD\u5411\u4EE3\u7406 <a class="header-anchor" href="#\u914D\u7F6E\u53CD\u5411\u4EE3\u7406" aria-hidden="true">#</a></h3><hr><ul><li><p>\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u65B0\u5EFA\u4E00\u4E2A\u7AD9\u70B9\uFF0C\u57DF\u540D\u586B\u5199\u516C\u5F00\u8BBF\u95EE\u57DF\u540D\uFF0C\u5982 \u201C<a href="http://cdn.example.com" target="_blank" rel="noopener noreferrer">http://cdn.example.com</a>\u201C \uFF0C\u7136\u540E\u70B9\u51FB\u201C\u8BBE\u7F6E\u201D\u8FDB\u5165\u7AD9\u70B9\u8BBE\u7F6E\u9009\u9879\uFF0C\u9009\u62E9\u201C\u53CD\u5411\u4EE3\u7406\u201D - \u201C\u65B0\u5EFA\u53CD\u5411\u4EE3\u7406\u201D</p></li><li><p>\u81EA\u5B9A\u4E49\u4E00\u4E2A\u4EE3\u7406\u540D\u79F0\uFF0C\u5728\u4E0B\u65B9\u201C\u76EE\u6807URL\u201D\u4E2D\u586B\u5165 <code>http://127.0.0.1</code> \u7136\u540E\u70B9\u51FB\u201C\u4FDD\u5B58\u201D</p></li><li><p>\u6253\u5F00\u521A\u521A\u65B0\u5EFA\u7684\u53CD\u5411\u4EE3\u7406\u53F3\u8FB9\u7684\u201C\u914D\u7F6E\u6587\u4EF6\u201D\uFF0C\u5C06\u914D\u7F6E\u6587\u4EF6\u66FF\u6362\u4E3A\u4EE5\u4E0B\u5185\u5BB9\uFF1A</p></li></ul><div class="language-nginx"><pre><code><span class="token comment">#PROXY-START/</span>
<span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
<span class="token directive"><span class="token keyword">proxy_pass</span> http://127.0.0.1:8008</span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">proxy_set_header</span> Host <span class="token variable">$host</span></span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">proxy_set_header</span> Upgrade <span class="token variable">$http_upgrade</span></span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token directive"><span class="token keyword">location</span> ~ ^/(ws|terminal/.+)$</span> <span class="token punctuation">{</span>
<span class="token directive"><span class="token keyword">proxy_pass</span> http://127.0.0.1:8008</span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">proxy_http_version</span> 1.1</span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">proxy_set_header</span> Upgrade <span class="token variable">$http_upgrade</span></span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">proxy_set_header</span> Connection <span class="token string">&quot;Upgrade&quot;</span></span><span class="token punctuation">;</span>
<span class="token directive"><span class="token keyword">proxy_set_header</span> Host <span class="token variable">$host</span></span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">#PROXY-END/</span>
</code></pre></div><ul><li>\u70B9\u51FB\u201C\u4FDD\u5B58\u201D<br> \u73B0\u5728\uFF0C\u4F60\u5E94\u8BE5\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528\u57DF\u540D\uFF0C\u5982\uFF1A\u201C<a href="http://cdn.example.com" target="_blank" rel="noopener noreferrer">http://cdn.example.com</a>\u201C \u6765\u8BBF\u95EE\u9762\u677F\u4E86<br><br></li></ul><h4 id="\u6269\u5C55\u5185\u5BB9\uFF1A" tabindex="-1">\u6269\u5C55\u5185\u5BB9\uFF1A <a class="header-anchor" href="#\u6269\u5C55\u5185\u5BB9\uFF1A" aria-hidden="true">#</a></h4><ul><li><p>CaddyServer v1\uFF08v2 \u65E0\u9700\u7279\u522B\u914D\u7F6E\uFF09</p><div class="language-"><pre><code>proxy /ws http://ip:8008 {
websocket
}
proxy /terminal/* http://ip:8008 {
websocket
}
</code></pre></div></li></ul><br><br><h3 id="\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u914D\u7F6Essl" tabindex="-1">\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u914D\u7F6ESSL <a class="header-anchor" href="#\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u914D\u7F6Essl" aria-hidden="true">#</a></h3><hr><p>\u9996\u5148\uFF0C\u5148\u6682\u65F6\u5173\u95ED\u53CD\u5411\u4EE3\u7406<br> \u6B63\u5982\u5728\u5176\u4ED6\u7F51\u7AD9\u4E2D\u914D\u7F6ESSL\u8BC1\u4E66\u4E00\u6837\uFF0C\u8FDB\u5165\u7AD9\u70B9\u8BBE\u7F6E\u4E2D\u7684\u201CSSL\u201D\uFF0C\u4F60\u53EF\u4EE5\u9009\u62E9\u81EA\u52A8\u7533\u8BF7 Let\xB4s Encrypt \u8BC1\u4E66\u6216\u624B\u52A8\u914D\u7F6E\u5DF2\u6709\u7684\u8BC1\u4E66<br> \u5B8C\u6210SSL\u7684\u8BBE\u7F6E\u540E\uFF0C\u4F60\u9700\u8981\u56DE\u5230 <a href="https://github.com/settings/developers" target="_blank" rel="noopener noreferrer">https://github.com/settings/developers</a> \uFF0C\u7F16\u8F91\u4E4B\u524D\u521B\u5EFA\u7684\u9A8C\u8BC1\u5E94\u7528\u7A0B\u5E8F\uFF0C\u5C06\u4E4B\u524D\u6211\u4EEC\u586B\u5165\u7684&quot;Homepage URL&quot;\u548C&quot;Authorization callback URL&quot;\u4E2D\u7684\u57DF\u540D\u5168\u90E8\u4ECE<code>http</code>\u6539\u4E3A<code>https</code>\uFF0C\u5982\uFF1A&quot;<a href="https://cdn.example.com" target="_blank" rel="noopener noreferrer">https://cdn.example.com</a>&quot; \u548C &quot;<a href="https://cdn.example.com/oauth2/callback" target="_blank" rel="noopener noreferrer">https://cdn.example.com/oauth2/callback</a>&quot; \uFF0C<strong>\u4E0D\u66F4\u6539\u6B64\u9879\u53EF\u80FD\u4F1A\u5BFC\u81F4\u4F60\u65E0\u6CD5\u767B\u9646\u9762\u677F\u540E\u53F0</strong></p>`,32),r=[o];function p(l,c,i,d,h,u){return n(),a("div",null,r)}var m=e(s,[["render",p]]);export{k as __pageData,m as default};
@@ -0,0 +1 @@
import{_ as e,c as a,o as n,a as t}from"./app.61e847e1.js";const k='{"title":"\u51C6\u5907\u5DE5\u4F5C","description":"","frontmatter":{},"headers":[{"level":3,"title":"\u51C6\u5907\u5DE5\u4F5C","slug":"\u51C6\u5907\u5DE5\u4F5C"},{"level":3,"title":"\u83B7\u53D6Github\u7684Client ID\u548C\u5BC6\u94A5","slug":"\u83B7\u53D6github\u7684client-id\u548C\u5BC6\u94A5"},{"level":3,"title":"\u5728\u670D\u52A1\u5668\u4E2D\u5B89\u88C5Dashboard","slug":"\u5728\u670D\u52A1\u5668\u4E2D\u5B89\u88C5dashboard"},{"level":3,"title":"\u914D\u7F6E\u53CD\u5411\u4EE3\u7406","slug":"\u914D\u7F6E\u53CD\u5411\u4EE3\u7406"},{"level":3,"title":"\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u914D\u7F6ESSL","slug":"\u5728\u5B9D\u5854\u9762\u677F\u4E2D\u914D\u7F6Essl"}],"relativePath":"guide/dashboard.md"}',s={},o=t("",32),r=[o];function p(l,c,i,d,h,u){return n(),a("div",null,r)}var m=e(s,[["render",p]]);export{k as __pageData,m as default};
-101
View File
@@ -1,101 +0,0 @@
import{_ as e,c as s,o as n,a}from"./app.54944ef9.js";var t="/assets/vercel-configuration.e8badd11.png";const b='{"title":"Deploying","description":"","frontmatter":{"sidebarDepth":3},"headers":[{"level":2,"title":"Building The Docs","slug":"building-the-docs"},{"level":3,"title":"Testing The Docs Locally","slug":"testing-the-docs-locally"},{"level":2,"title":"GitHub Pages","slug":"github-pages"},{"level":3,"title":"GitHub Pages and Travis CI","slug":"github-pages-and-travis-ci"},{"level":2,"title":"GitLab Pages and GitLab CI","slug":"gitlab-pages-and-gitlab-ci"},{"level":2,"title":"Netlify","slug":"netlify"},{"level":2,"title":"Google Firebase","slug":"google-firebase"},{"level":2,"title":"Surge","slug":"surge"},{"level":2,"title":"Heroku","slug":"heroku"},{"level":2,"title":"Vercel","slug":"vercel"}],"relativePath":"guide/deploy.md","lastUpdated":1652768268000}',o={},p=a(`<h1 id="deploying" tabindex="-1">Deploying <a class="header-anchor" href="#deploying" aria-hidden="true">#</a></h1><p>The following guides are based on some shared assumptions:</p><ul><li>You are placing your docs inside the <code>docs</code> directory of your project;</li><li>You are using the default build output location (<code>.vitepress/dist</code>);</li><li>VitePress is installed as a local dependency in your project, and you have setup the following npm scripts:</li></ul><div class="language-json"><pre><code><span class="token punctuation">{</span>
<span class="token property">&quot;scripts&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token property">&quot;docs:build&quot;</span><span class="token operator">:</span> <span class="token string">&quot;vitepress build docs&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;docs:serve&quot;</span><span class="token operator">:</span> <span class="token string">&quot;vitepress serve docs&quot;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><h2 id="building-the-docs" tabindex="-1">Building The Docs <a class="header-anchor" href="#building-the-docs" aria-hidden="true">#</a></h2><p>You may run <code>yarn docs:build</code> command to build the docs.</p><div class="language-bash"><pre><code>$ <span class="token function">yarn</span> docs:build
</code></pre></div><p>By default, the build output will be placed at <code>.vitepress/dist</code>. You may deploy this <code>dist</code> folder to any of your preferred platforms.</p><h3 id="testing-the-docs-locally" tabindex="-1">Testing The Docs Locally <a class="header-anchor" href="#testing-the-docs-locally" aria-hidden="true">#</a></h3><p>Once you&#39;ve built the docs, you may test them locally by running <code>yarn docs:serve</code> command.</p><div class="language-bash"><pre><code>$ <span class="token function">yarn</span> docs:build
$ <span class="token function">yarn</span> docs:serve
</code></pre></div><p>The <code>serve</code> command will boot up local static web server that serves the files from <code>.vitepress/dist</code> at <code>http://localhost:5000</code>. It&#39;s an easy way to check if the production build looks OK in your local environment.</p><p>You may configure the port of the server py passing <code>--port</code> flag as an argument.</p><div class="language-json"><pre><code><span class="token punctuation">{</span>
<span class="token property">&quot;scripts&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token property">&quot;docs:serve&quot;</span><span class="token operator">:</span> <span class="token string">&quot;vitepress serve docs --port 8080&quot;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><p>Now the <code>docs:serve</code> method will launch the server at <code>http://localhost:8080</code>.</p><h2 id="github-pages" tabindex="-1">GitHub Pages <a class="header-anchor" href="#github-pages" aria-hidden="true">#</a></h2><ol><li><p>Set the correct <code>base</code> in <code>docs/.vitepress/config.js</code>.</p><p>If you are deploying to <code>https://&lt;USERNAME&gt;.github.io/</code>, you can omit <code>base</code> as it defaults to <code>&#39;/&#39;</code>.</p><p>If you are deploying to <code>https://&lt;USERNAME&gt;.github.io/&lt;REPO&gt;/</code>, for example your repository is at <code>https://github.com/&lt;USERNAME&gt;/&lt;REPO&gt;</code>, then set <code>base</code> to <code>&#39;/&lt;REPO&gt;/&#39;</code>.</p></li><li><p>Inside your project, create <code>deploy.sh</code> with the following content (with highlighted lines uncommented appropriately), and run it to deploy:</p></li></ol><div class="language-bash"><div class="highlight-lines"><br><br><br><br><br><br><br><br><br><br><br><br><div class="highlighted">\xA0</div><br><br><br><br><br><br><div class="highlighted">\xA0</div><br><br><div class="highlighted">\xA0</div><br><br><br></div><pre><code><span class="token shebang important">#!/usr/bin/env sh</span>
<span class="token comment"># abort on errors</span>
<span class="token builtin class-name">set</span> -e
<span class="token comment"># build</span>
<span class="token function">npm</span> run docs:build
<span class="token comment"># navigate into the build output directory</span>
<span class="token builtin class-name">cd</span> docs/.vitepress/dist
<span class="token comment"># if you are deploying to a custom domain</span>
<span class="token comment"># echo &#39;www.example.com&#39; &gt; CNAME</span>
<span class="token function">git</span> init
<span class="token function">git</span> <span class="token function">add</span> -A
<span class="token function">git</span> commit -m <span class="token string">&#39;deploy&#39;</span>
<span class="token comment"># if you are deploying to https://&lt;USERNAME&gt;.github.io</span>
<span class="token comment"># git push -f git@github.com:&lt;USERNAME&gt;/&lt;USERNAME&gt;.github.io.git main</span>
<span class="token comment"># if you are deploying to https://&lt;USERNAME&gt;.github.io/&lt;REPO&gt;</span>
<span class="token comment"># git push -f git@github.com:&lt;USERNAME&gt;/&lt;REPO&gt;.git main:gh-pages</span>
<span class="token builtin class-name">cd</span> -
</code></pre></div><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>You can also run the above script in your CI setup to enable automatic deployment on each push.</p></div><h3 id="github-pages-and-travis-ci" tabindex="-1">GitHub Pages and Travis CI <a class="header-anchor" href="#github-pages-and-travis-ci" aria-hidden="true">#</a></h3><ol><li><p>Set the correct <code>base</code> in <code>docs/.vitepress/config.js</code>.</p><p>If you are deploying to <code>https://&lt;USERNAME or GROUP&gt;.github.io/</code>, you can omit <code>base</code> as it defaults to <code>&#39;/&#39;</code>.</p><p>If you are deploying to <code>https://&lt;USERNAME or GROUP&gt;.github.io/&lt;REPO&gt;/</code>, for example your repository is at <code>https://github.com/&lt;USERNAME&gt;/&lt;REPO&gt;</code>, then set <code>base</code> to <code>&#39;/&lt;REPO&gt;/&#39;</code>.</p></li><li><p>Create a file named <code>.travis.yml</code> in the root of your project.</p></li><li><p>Run <code>yarn</code> or <code>npm install</code> locally and commit the generated lockfile (that is <code>yarn.lock</code> or <code>package-lock.json</code>).</p></li><li><p>Use the GitHub Pages deploy provider template, and follow the <a href="https://docs.travis-ci.com/user/deployment/pages" target="_blank" rel="noopener noreferrer">Travis CI documentation</a>.</p></li></ol><div class="language-yaml"><pre><code><span class="token key atrule">language</span><span class="token punctuation">:</span> node_js
<span class="token key atrule">node_js</span><span class="token punctuation">:</span>
<span class="token punctuation">-</span> lts/*
<span class="token key atrule">install</span><span class="token punctuation">:</span>
<span class="token punctuation">-</span> yarn install <span class="token comment"># npm ci</span>
<span class="token key atrule">script</span><span class="token punctuation">:</span>
<span class="token punctuation">-</span> yarn docs<span class="token punctuation">:</span>build <span class="token comment"># npm run docs:build</span>
<span class="token key atrule">deploy</span><span class="token punctuation">:</span>
<span class="token key atrule">provider</span><span class="token punctuation">:</span> pages
<span class="token key atrule">skip_cleanup</span><span class="token punctuation">:</span> <span class="token boolean important">true</span>
<span class="token key atrule">local_dir</span><span class="token punctuation">:</span> docs/.vitepress/dist
<span class="token comment"># A token generated on GitHub allowing Travis to push code on you repository.</span>
<span class="token comment"># Set in the Travis settings page of your repository, as a secure variable.</span>
<span class="token key atrule">github_token</span><span class="token punctuation">:</span> $GITHUB_TOKEN
<span class="token key atrule">keep_history</span><span class="token punctuation">:</span> <span class="token boolean important">true</span>
<span class="token key atrule">on</span><span class="token punctuation">:</span>
<span class="token key atrule">branch</span><span class="token punctuation">:</span> main
</code></pre></div><h2 id="gitlab-pages-and-gitlab-ci" tabindex="-1">GitLab Pages and GitLab CI <a class="header-anchor" href="#gitlab-pages-and-gitlab-ci" aria-hidden="true">#</a></h2><ol><li><p>Set the correct <code>base</code> in <code>docs/.vitepress/config.js</code>.</p><p>If you are deploying to <code>https://&lt;USERNAME or GROUP&gt;.gitlab.io/</code>, you can omit <code>base</code> as it defaults to <code>&#39;/&#39;</code>.</p><p>If you are deploying to <code>https://&lt;USERNAME or GROUP&gt;.gitlab.io/&lt;REPO&gt;/</code>, for example your repository is at <code>https://gitlab.com/&lt;USERNAME&gt;/&lt;REPO&gt;</code>, then set <code>base</code> to <code>&#39;/&lt;REPO&gt;/&#39;</code>.</p></li><li><p>Set <code>outDir</code> in <code>.vitepress/config.js</code> to <code>../public</code>.</p></li><li><p>Create a file called <code>.gitlab-ci.yml</code> in the root of your project with the content below. This will build and deploy your site whenever you make changes to your content:</p></li></ol><div class="language-yaml"><pre><code><span class="token key atrule">image</span><span class="token punctuation">:</span> node<span class="token punctuation">:</span>16.5.0
<span class="token key atrule">pages</span><span class="token punctuation">:</span>
<span class="token key atrule">stage</span><span class="token punctuation">:</span> deploy
<span class="token key atrule">cache</span><span class="token punctuation">:</span>
<span class="token key atrule">paths</span><span class="token punctuation">:</span>
<span class="token punctuation">-</span> node_modules/
<span class="token key atrule">script</span><span class="token punctuation">:</span>
<span class="token punctuation">-</span> yarn install <span class="token comment"># npm install</span>
<span class="token punctuation">-</span> yarn docs<span class="token punctuation">:</span>build <span class="token comment"># npm run docs:build</span>
<span class="token key atrule">artifacts</span><span class="token punctuation">:</span>
<span class="token key atrule">paths</span><span class="token punctuation">:</span>
<span class="token punctuation">-</span> public
<span class="token key atrule">rules</span><span class="token punctuation">:</span>
<span class="token punctuation">-</span> <span class="token key atrule">if</span><span class="token punctuation">:</span> $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
</code></pre></div><h2 id="netlify" tabindex="-1">Netlify <a class="header-anchor" href="#netlify" aria-hidden="true">#</a></h2><ol><li>On <a href="https://www.netlify.com/" target="_blank" rel="noopener noreferrer">Netlify</a>, setup up a new project from GitHub with the following settings:</li></ol><ul><li><strong>Build Command:</strong> <code>vitepress build docs</code> or <code>yarn docs:build</code> or <code>npm run docs:build</code></li><li><strong>Publish directory:</strong> <code>docs/.vitepress/dist</code></li></ul><ol start="2"><li>Hit the deploy button.</li></ol><h2 id="google-firebase" tabindex="-1">Google Firebase <a class="header-anchor" href="#google-firebase" aria-hidden="true">#</a></h2><ol><li><p>Make sure you have <a href="https://www.npmjs.com/package/firebase-tools" target="_blank" rel="noopener noreferrer">firebase-tools</a> installed.</p></li><li><p>Create <code>firebase.json</code> and <code>.firebaserc</code> at the root of your project with the following content:</p></li></ol><p><code>firebase.json</code>:</p><div class="language-json"><pre><code><span class="token punctuation">{</span>
<span class="token property">&quot;hosting&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token property">&quot;public&quot;</span><span class="token operator">:</span> <span class="token string">&quot;./docs/.vitepress/dist&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;ignore&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><p><code>.firebaserc</code>:</p><div class="language-js"><pre><code><span class="token punctuation">{</span>
<span class="token string-property property">&quot;projects&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string-property property">&quot;default&quot;</span><span class="token operator">:</span> <span class="token string">&quot;&lt;YOUR_FIREBASE_ID&gt;&quot;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><ol start="3"><li>After running <code>yarn docs:build</code> or <code>npm run docs:build</code>, deploy using the command <code>firebase deploy</code>.</li></ol><h2 id="surge" tabindex="-1">Surge <a class="header-anchor" href="#surge" aria-hidden="true">#</a></h2><ol><li><p>First install <a href="https://www.npmjs.com/package/surge" target="_blank" rel="noopener noreferrer">surge</a>, if you haven\u2019t already.</p></li><li><p>Run <code>yarn docs:build</code> or <code>npm run docs:build</code>.</p></li><li><p>Deploy to surge by typing <code>surge docs/.vitepress/dist</code>.</p></li></ol><p>You can also deploy to a <a href="https://surge.sh/help/adding-a-custom-domain" target="_blank" rel="noopener noreferrer">custom domain</a> by adding <code>surge docs/.vitepress/dist yourdomain.com</code>.</p><h2 id="heroku" tabindex="-1">Heroku <a class="header-anchor" href="#heroku" aria-hidden="true">#</a></h2><ol><li><p>Install <a href="https://devcenter.heroku.com/articles/heroku-cli" target="_blank" rel="noopener noreferrer">Heroku CLI</a>.</p></li><li><p>Create a Heroku account by <a href="https://signup.heroku.com" target="_blank" rel="noopener noreferrer">signing up</a>.</p></li><li><p>Run <code>heroku login</code> and fill in your Heroku credentials:</p></li></ol><div class="language-bash"><pre><code>$ heroku login
</code></pre></div><ol start="4"><li>Create a file called <code>static.json</code> in the root of your project with the below content:</li></ol><p><code>static.json</code>:</p><div class="language-json"><pre><code><span class="token punctuation">{</span>
<span class="token property">&quot;root&quot;</span><span class="token operator">:</span> <span class="token string">&quot;./docs/.vitepress/dist&quot;</span>
<span class="token punctuation">}</span>
</code></pre></div><p>This is the configuration of your site; read more at <a href="https://github.com/heroku/heroku-buildpack-static" target="_blank" rel="noopener noreferrer">heroku-buildpack-static</a>.</p><ol start="5"><li>Set up your Heroku git remote:</li></ol><div class="language-bash"><pre><code><span class="token comment"># version change</span>
$ <span class="token function">git</span> init
$ <span class="token function">git</span> <span class="token function">add</span> <span class="token builtin class-name">.</span>
$ <span class="token function">git</span> commit -m <span class="token string">&quot;My site ready for deployment.&quot;</span>
<span class="token comment"># creates a new app with a specified name</span>
$ heroku apps:create example
<span class="token comment"># set buildpack for static sites</span>
$ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-static.git
</code></pre></div><ol start="6"><li>Deploy your site:</li></ol><div class="language-bash"><pre><code><span class="token comment"># publish site</span>
$ <span class="token function">git</span> push heroku main
<span class="token comment"># opens a browser to view the Dashboard version of Heroku CI</span>
$ heroku <span class="token function">open</span>
</code></pre></div><h2 id="vercel" tabindex="-1">Vercel <a class="header-anchor" href="#vercel" aria-hidden="true">#</a></h2><p>To deploy your VitePress app with a <a href="https://vercel.com/docs/concepts/git" target="_blank" rel="noopener noreferrer">Vercel for Git</a>, make sure it has been pushed to a Git repository.</p><p>Go to <a href="https://vercel.com/new" target="_blank" rel="noopener noreferrer">https://vercel.com/new</a> and import the project into Vercel using your Git of choice (GitHub, GitLab or BitBucket). Follow the wizard to select the project root with the project&#39;s <code>package.json</code> and override the build step using <code>yarn docs:build</code> or <code>npm run docs:build</code> and the output dir to be <code>./docs/.vitepress/dist</code></p><p><img src="`+t+'" alt=""></p><p>After your project has been imported, all subsequent pushes to branches will generate Preview Deployments, and all changes made to the Production Branch (commonly &quot;main&quot;) will result in a Production Deployment.</p><p>Once deployed, you will get a URL to see your app live, such as the following: <a href="https://vitepress.vercel.app" target="_blank" rel="noopener noreferrer">https://vitepress.vercel.app</a></p>',56),c=[p];function l(i,r,d,u,h,g){return n(),s("div",null,c)}var y=e(o,[["render",l]]);export{b as __pageData,y as default};
-1
View File
@@ -1 +0,0 @@
import{_ as e,c as s,o as n,a}from"./app.54944ef9.js";var t="/assets/vercel-configuration.e8badd11.png";const b='{"title":"Deploying","description":"","frontmatter":{"sidebarDepth":3},"headers":[{"level":2,"title":"Building The Docs","slug":"building-the-docs"},{"level":3,"title":"Testing The Docs Locally","slug":"testing-the-docs-locally"},{"level":2,"title":"GitHub Pages","slug":"github-pages"},{"level":3,"title":"GitHub Pages and Travis CI","slug":"github-pages-and-travis-ci"},{"level":2,"title":"GitLab Pages and GitLab CI","slug":"gitlab-pages-and-gitlab-ci"},{"level":2,"title":"Netlify","slug":"netlify"},{"level":2,"title":"Google Firebase","slug":"google-firebase"},{"level":2,"title":"Surge","slug":"surge"},{"level":2,"title":"Heroku","slug":"heroku"},{"level":2,"title":"Vercel","slug":"vercel"}],"relativePath":"guide/deploy.md","lastUpdated":1652768268000}',o={},p=a("",56),c=[p];function l(i,r,d,u,h,g){return n(),s("div",null,c)}var y=e(o,[["render",l]]);export{b as __pageData,y as default};
@@ -1 +0,0 @@
import{_ as e,c as r,o as t,a}from"./app.54944ef9.js";const g='{"title":"Differences from VuePress","description":"","frontmatter":{"sidebarDepth":2},"headers":[{"level":2,"title":"General","slug":"general"},{"level":2,"title":"Markdown","slug":"markdown"},{"level":2,"title":"Site Config","slug":"site-config"},{"level":2,"title":"Default Theme Config","slug":"default-theme-config"},{"level":2,"title":"Default Theme","slug":"default-theme"},{"level":2,"title":"Computed Globals","slug":"computed-globals"},{"level":2,"title":"Frontmatter Predefined Variables","slug":"frontmatter-predefined-variables"},{"level":2,"title":"Frontmatter Default Theme Variables","slug":"frontmatter-default-theme-variables"},{"level":2,"title":"siteData","slug":"sitedata"},{"level":2,"title":"pageData","slug":"pagedata"},{"level":2,"title":"Global Components","slug":"global-components"}],"relativePath":"guide/differences-from-vuepress.md","lastUpdated":1652768268000}',o={},l=a('<h1 id="differences-from-vuepress" tabindex="-1">Differences from VuePress <a class="header-anchor" href="#differences-from-vuepress" aria-hidden="true">#</a></h1><p>VitePress and VuePress have different <a href="./../">design goals</a>. Both projects share similar config naming conventions. VitePress aims to have the bare minimum features needed for authoring docs. Other features are pushed to Themes. On the other hand, VuePress has more features out-of-the-box or enabled by its ecosystem of plugins.</p><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>If you are using VuePress, there is no need to migrate to VitePress. Both projects are going to continue to co-exist for the foreseeable future.</p></div><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Note this is early WIP! Currently, the focus is on making Vite stable and feature-complete first. It is not recommended to use this for anything serious yet.</p></div><p>In case you decide to move your project to VitePress, this is a list of differences from <a href="https://github.com/vuejs/vuepress/releases/tag/v1.7.1" target="_blank" rel="noopener noreferrer">VuePress v1.7.1</a> that you need to take into account.</p><h2 id="general" tabindex="-1">General <a class="header-anchor" href="#general" aria-hidden="true">#</a></h2><ul><li>Missing <ul><li>YAML and TOML are not supported formats for site config. Only javascript is supported for <code>.vitepress/config.js</code></li><li><a href="https://vuepress.vuejs.org/plugin/" target="_blank" rel="noopener noreferrer">Plugins</a> support, features are implemented in themes</li><li><a href="https://vuepress.vuejs.org/guide/permalinks.html" target="_blank" rel="noopener noreferrer">permalink support</a></li><li><code>.vitepress/templates</code></li><li>Components in <code>.vitepress/components</code> <a href="https://vuepress.vuejs.org" target="_blank" rel="noopener noreferrer">are not auto registered as global components</a></li></ul></li><li>Differences <ul><li><a href="https://vuepress.vuejs.org/guide/assets.html#public-files" target="_blank" rel="noopener noreferrer">Public files</a> that are directly copied to dist root moved from <code>.vitepress/public/</code> is <code>public/</code></li><li><a href="https://vuepress.vuejs.org/config/#styling" target="_blank" rel="noopener noreferrer">styling</a> <code>.vitepress/styles/index.styl</code> and <code>.vitepress/styles/palette.styl</code> is not supported. See <a href="./theming.html#customizing-css">Customizing CSS</a>.</li><li><a href="https://vuepress.vuejs.org/guide/basic-config.html#app-level-enhancements" target="_blank" rel="noopener noreferrer">App Level Enhancements</a> API, app enhancements <code>.vitepress/enhanceApp.js</code> is now done in <code>.vitepress/theme/index.js</code>. See <a href="./theming.html#extending-the-default-theme">Extending the Default Theme</a>.</li></ul></li></ul><h2 id="markdown" tabindex="-1">Markdown <a class="header-anchor" href="#markdown" aria-hidden="true">#</a></h2><ul><li>Missing <ul><li>Support for <a href="https://vuepress.vuejs.org/guide/frontmatter.html#alternative-frontmatter-formats" target="_blank" rel="noopener noreferrer">toml in frontmatter</a></li><li><a href="https://vuepress.vuejs.org/guide/markdown.html#custom-containers" target="_blank" rel="noopener noreferrer">details block</a></li><li><a href="https://vuepress.vuejs.org/guide/markdown-slot.html" target="_blank" rel="noopener noreferrer">markdown slots</a></li><li><code>~</code> prefix to explicitly specify a url is a <a href="https://vuepress.vuejs.org/guide/assets.html#relative-urls" target="_blank" rel="noopener noreferrer">webpack module request</a></li></ul></li></ul><h2 id="site-config" tabindex="-1">Site Config <a class="header-anchor" href="#site-config" aria-hidden="true">#</a></h2><ul><li>Missing <ul><li><code>temp</code></li><li><code>dest</code></li><li><a href="https://vuepress.vuejs.org/theme/using-a-theme.html#using-a-theme-from-a-dependeLine truncated
@@ -1 +0,0 @@
import{_ as e,c as r,o as t,a}from"./app.54944ef9.js";const g='{"title":"Differences from VuePress","description":"","frontmatter":{"sidebarDepth":2},"headers":[{"level":2,"title":"General","slug":"general"},{"level":2,"title":"Markdown","slug":"markdown"},{"level":2,"title":"Site Config","slug":"site-config"},{"level":2,"title":"Default Theme Config","slug":"default-theme-config"},{"level":2,"title":"Default Theme","slug":"default-theme"},{"level":2,"title":"Computed Globals","slug":"computed-globals"},{"level":2,"title":"Frontmatter Predefined Variables","slug":"frontmatter-predefined-variables"},{"level":2,"title":"Frontmatter Default Theme Variables","slug":"frontmatter-default-theme-variables"},{"level":2,"title":"siteData","slug":"sitedata"},{"level":2,"title":"pageData","slug":"pagedata"},{"level":2,"title":"Global Components","slug":"global-components"}],"relativePath":"guide/differences-from-vuepress.md","lastUpdated":1652768268000}',o={},l=a("",27),s=[l];function i(n,d,c,u,h,p){return t(),r("div",null,s)}var m=e(o,[["render",i]]);export{g as __pageData,m as default};
-28
View File
@@ -1,28 +0,0 @@
import{_ as e,c as a,o as n,a as t}from"./app.54944ef9.js";const f='{"title":"Frontmatter","description":"","frontmatter":{},"headers":[{"level":2,"title":"Alternative frontmatter Formats","slug":"alternative-frontmatter-formats"},{"level":2,"title":"Predefined Variables","slug":"predefined-variables"},{"level":3,"title":"title","slug":"title"},{"level":3,"title":"head","slug":"head"},{"level":3,"title":"navbar","slug":"navbar"},{"level":3,"title":"sidebar","slug":"sidebar"},{"level":3,"title":"editLink","slug":"editlink"}],"relativePath":"guide/frontmatter.md","lastUpdated":1652768268000}',s={},o=t(`<h1 id="frontmatter" tabindex="-1">Frontmatter <a class="header-anchor" href="#frontmatter" aria-hidden="true">#</a></h1><p>Any Markdown file that contains a YAML frontmatter block will be processed by <a href="https://github.com/jonschlinkert/gray-matter" target="_blank" rel="noopener noreferrer">gray-matter</a>. The frontmatter must be at the top of the Markdown file, and must take the form of valid YAML set between triple-dashed lines. Example:</p><div class="language-md"><pre><code><span class="token front-matter-block"><span class="token punctuation">---</span>
<span class="token front-matter yaml language-yaml"><span class="token key atrule">title</span><span class="token punctuation">:</span> Docs with VitePress
<span class="token key atrule">editLink</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></span>
<span class="token punctuation">---</span></span>
</code></pre></div><p>Between the triple-dashed lines, you can set <a href="#predefined-variables">predefined variables</a>, or even create custom ones of your own. These variables can be used via the special <code>$frontmatter</code> variable.</p><p>Here\u2019s an example of how you could use it in your Markdown file:</p><div class="language-md"><pre><code><span class="token front-matter-block"><span class="token punctuation">---</span>
<span class="token front-matter yaml language-yaml"><span class="token key atrule">title</span><span class="token punctuation">:</span> Docs with VitePress
<span class="token key atrule">editLink</span><span class="token punctuation">:</span> <span class="token boolean important">true</span></span>
<span class="token punctuation">---</span></span>
<span class="token title important"><span class="token punctuation">#</span> {{ $frontmatter.title }}</span>
Guide content
</code></pre></div><h2 id="alternative-frontmatter-formats" tabindex="-1">Alternative frontmatter Formats <a class="header-anchor" href="#alternative-frontmatter-formats" aria-hidden="true">#</a></h2><p>VitePress also supports JSON frontmatter syntax, starting and ending in curly braces:</p><div class="language-json"><pre><code>---
<span class="token punctuation">{</span>
<span class="token property">&quot;title&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Blogging Like a Hacker&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;editLink&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span>
<span class="token punctuation">}</span>
---
</code></pre></div><h2 id="predefined-variables" tabindex="-1">Predefined Variables <a class="header-anchor" href="#predefined-variables" aria-hidden="true">#</a></h2><h3 id="title" tabindex="-1">title <a class="header-anchor" href="#title" aria-hidden="true">#</a></h3><ul><li>Type: <code>string</code></li><li>Default: <code>h1_title || siteData.title</code></li></ul><p>Title of the current page.</p><h3 id="head" tabindex="-1">head <a class="header-anchor" href="#head" aria-hidden="true">#</a></h3><ul><li>Type: <code>array</code></li><li>Default: <code>undefined</code></li></ul><p>Specify extra head tags to be injected:</p><div class="language-yaml"><pre><code><span class="token punctuation">---</span>
<span class="token key atrule">head</span><span class="token punctuation">:</span>
<span class="token punctuation">-</span> <span class="token punctuation">-</span> meta
<span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> description
<span class="token key atrule">content</span><span class="token punctuation">:</span> hello
<span class="token punctuation">-</span> <span class="token punctuation">-</span> meta
<span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> keywords
<span class="token key atrule">content</span><span class="token punctuation">:</span> super duper SEO
<span class="token punctuation">---</span>
</code></pre></div><h3 id="navbar" tabindex="-1">navbar <a class="header-anchor" href="#navbar" aria-hidden="true">#</a></h3><ul><li>Type: <code>boolean</code></li><li>Default: <code>undefined</code></li></ul><p>You can disable the navbar on a specific page with <code>navbar: false</code></p><h3 id="sidebar" tabindex="-1">sidebar <a class="header-anchor" href="#sidebar" aria-hidden="true">#</a></h3><ul><li>Type: <code>boolean|&#39;auto&#39;</code></li><li>Default: <code>undefined</code></li></ul><p>You can decide to show the sidebar on a specific page with <code>sidebar: auto</code> or disable it with <code>sidebar: false</code></p><h3 id="editlink" tabindex="-1">editLink <a class="header-anchor" href="#editlink" aria-hidden="true">#</a></h3><ul><li>Type: <code>boolean</code></li><li>Default: <code>undefined</code></li></ul><p>Define if this page should include an edit link.</p>`,26),i=[o];function l(r,p,c,d,u,h){return n(),a("div",null,i)}var m=e(s,[["render",l]]);export{f as __pageData,m as default};
@@ -1 +0,0 @@
import{_ as e,c as a,o as n,a as t}from"./app.54944ef9.js";const f='{"title":"Frontmatter","description":"","frontmatter":{},"headers":[{"level":2,"title":"Alternative frontmatter Formats","slug":"alternative-frontmatter-formats"},{"level":2,"title":"Predefined Variables","slug":"predefined-variables"},{"level":3,"title":"title","slug":"title"},{"level":3,"title":"head","slug":"head"},{"level":3,"title":"navbar","slug":"navbar"},{"level":3,"title":"sidebar","slug":"sidebar"},{"level":3,"title":"editLink","slug":"editlink"}],"relativePath":"guide/frontmatter.md","lastUpdated":1652768268000}',s={},o=t("",26),i=[o];function l(r,p,c,d,u,h){return n(),a("div",null,i)}var m=e(s,[["render",l]]);export{f as __pageData,m as default};
@@ -1,13 +0,0 @@
import{_ as s,c as e,o as t,a}from"./app.54944ef9.js";const h='{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","lastUpdated":1652768268000}',n={},o=a(`<h1 id="getting-started" tabindex="-1">Getting Started <a class="header-anchor" href="#getting-started" aria-hidden="true">#</a></h1><p>This section will help you build a basic VitePress documentation site from ground up. If you already have an existing project and would like to keep documentation inside the project, start from Step 3.</p><ul><li><p><strong>Step. 1:</strong> Create and change into a new directory.</p><div class="language-bash"><pre><code>$ <span class="token function">mkdir</span> vitepress-starter <span class="token operator">&amp;&amp;</span> <span class="token builtin class-name">cd</span> vitepress-starter
</code></pre></div></li><li><p><strong>Step. 2:</strong> Initialize with your preferred package manager.</p><div class="language-bash"><pre><code>$ <span class="token function">yarn</span> init
</code></pre></div></li><li><p><strong>Step. 3:</strong> Install VitePress locally.</p><div class="language-bash"><pre><code>$ <span class="token function">yarn</span> <span class="token function">add</span> --dev vitepress
</code></pre></div></li><li><p><strong>Step. 4:</strong> Create your first document.</p><div class="language-bash"><pre><code>$ <span class="token function">mkdir</span> docs <span class="token operator">&amp;&amp;</span> <span class="token builtin class-name">echo</span> <span class="token string">&#39;# Hello VitePress&#39;</span> <span class="token operator">&gt;</span> docs/index.md
</code></pre></div></li><li><p><strong>Step. 5:</strong> Add some scripts to <code>package.json</code>.</p><div class="language-json"><pre><code><span class="token punctuation">{</span>
<span class="token property">&quot;scripts&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token property">&quot;docs:dev&quot;</span><span class="token operator">:</span> <span class="token string">&quot;vitepress dev docs&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;docs:build&quot;</span><span class="token operator">:</span> <span class="token string">&quot;vitepress build docs&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;docs:serve&quot;</span><span class="token operator">:</span> <span class="token string">&quot;vitepress serve docs&quot;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div></li><li><p><strong>Step. 6:</strong> Serve the documentation site in the local server.</p><div class="language-bash"><pre><code>$ <span class="token function">yarn</span> docs:dev
</code></pre></div><p>VitePress will start a hot-reloading development server at <code>http://localhost:3000</code>.</p></li></ul><p>By now, you should have a basic but functional VitePress documentation site.</p><p>When your documentation site starts to take shape, be sure to read the <a href="./deploy.html">deployment guide</a>.</p>`,5),p=[o];function r(i,c,d,l,u,g){return t(),e("div",null,p)}var v=s(n,[["render",r]]);export{h as __pageData,v as default};
@@ -1 +0,0 @@
import{_ as s,c as e,o as t,a}from"./app.54944ef9.js";const h='{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","lastUpdated":1652768268000}',n={},o=a("",5),p=[o];function r(i,c,d,l,u,g){return t(),e("div",null,p)}var v=s(n,[["render",r]]);export{h as __pageData,v as default};
@@ -1,8 +0,0 @@
import{_ as n,c as t,o as e,a}from"./app.54944ef9.js";const k='{"title":"Global Component","description":"","frontmatter":{},"headers":[{"level":2,"title":"Content","slug":"content"},{"level":2,"title":"ClientOnly","slug":"clientonly"},{"level":2,"title":"OutboundLink","slug":"outboundlink"}],"relativePath":"guide/global-component.md","lastUpdated":1652768268000}',s={},o=a(`<h1 id="global-component" tabindex="-1">Global Component <a class="header-anchor" href="#global-component" aria-hidden="true">#</a></h1><p>VitePress comes with few built-in component that can be used globally. You may use these components in your markdown or your custom theme configuration.</p><h2 id="content" tabindex="-1">Content <a class="header-anchor" href="#content" aria-hidden="true">#</a></h2><p>The <code>Content</code> component displays the rendered markdown contents. Useful <a href="./theming.html">when creating your own theme</a>.</p><div class="language-vue"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h1</span><span class="token punctuation">&gt;</span></span>Custom Layout!<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h1</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Content</span> <span class="token punctuation">/&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><h2 id="clientonly" tabindex="-1">ClientOnly <a class="header-anchor" href="#clientonly" aria-hidden="true">#</a></h2><p>The <code>ClientOnly</code> component renderes its slot only at client side.</p><p>Because VitePress applications are server-rendered in Node.js when generating static builds, any Vue usage must conform to the universal code requirements. In short, make sure to only access Browser / DOM APIs in beforeMount or mounted hooks.</p><p>If you are using or demoing components that are not SSR-friendly (for example, contain custom directives), you can wrap them inside the <code>ClientOnly</code> component.</p><div class="language-html"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>ClientOnly</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>NonSSRFriendlyComponent</span> <span class="token punctuation">/&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>ClientOnly</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><h2 id="outboundlink" tabindex="-1">OutboundLink <a class="header-anchor" href="#outboundlink" aria-hidden="true">#</a></h2><p>The indicator <code>OutboundLink</code> is used to denote external links. In VitePress, this component has been followed by every external link.</p>`,12),l=[o];function p(c,i,r,u,d,h){return e(),t("div",null,l)}var m=n(s,[["render",p]]);export{k as __pageData,m as default};
@@ -1 +0,0 @@
import{_ as n,c as t,o as e,a}from"./app.54944ef9.js";const k='{"title":"Global Component","description":"","frontmatter":{},"headers":[{"level":2,"title":"Content","slug":"content"},{"level":2,"title":"ClientOnly","slug":"clientonly"},{"level":2,"title":"OutboundLink","slug":"outboundlink"}],"relativePath":"guide/global-component.md","lastUpdated":1652768268000}',s={},o=a("",12),l=[o];function p(c,i,r,u,d,h){return e(),t("div",null,l)}var m=n(s,[["render",p]]);export{k as __pageData,m as default};
-162
View File
@@ -1,162 +0,0 @@
import{_ as a,c as e,o as t,a as o}from"./app.54944ef9.js";var n="/assets/line-numbers-mobile.f5ca96ee.gif",s="/assets/line-numbers-desktop.cc304762.png";const v='{"title":"Markdown Extensions","description":"","frontmatter":{"sidebarDepth":3},"headers":[{"level":2,"title":"Header Anchors","slug":"header-anchors"},{"level":2,"title":"Links","slug":"links"},{"level":3,"title":"Internal Links","slug":"internal-links"},{"level":3,"title":"Page Suffix","slug":"page-suffix"},{"level":3,"title":"External Links","slug":"external-links"},{"level":2,"title":"Frontmatter","slug":"frontmatter"},{"level":2,"title":"GitHub-Style Tables","slug":"github-style-tables"},{"level":2,"title":"Emoji \u{1F389}","slug":"emoji"},{"level":2,"title":"Table of Contents","slug":"table-of-contents"},{"level":2,"title":"Custom Containers","slug":"custom-containers"},{"level":3,"title":"Default Title","slug":"default-title"},{"level":3,"title":"Custom Title","slug":"custom-title"},{"level":2,"title":"Syntax Highlighting in Code Blocks","slug":"syntax-highlighting-in-code-blocks"},{"level":2,"title":"Line Highlighting in Code Blocks","slug":"line-highlighting-in-code-blocks"},{"level":2,"title":"Line Numbers","slug":"line-numbers"},{"level":2,"title":"Import Code Snippets","slug":"import-code-snippets"},{"level":2,"title":"Advanced Configuration","slug":"advanced-configuration"}],"relativePath":"guide/markdown.md","lastUpdated":1652768268000}',p={},i=n,l=s,r=o(`<h1 id="markdown-extensions" tabindex="-1">Markdown Extensions <a class="header-anchor" href="#markdown-extensions" aria-hidden="true">#</a></h1><h2 id="header-anchors" tabindex="-1">Header Anchors <a class="header-anchor" href="#header-anchors" aria-hidden="true">#</a></h2><p>Headers automatically get anchor links applied. Rendering of anchors can be configured using the <code>markdown.anchor</code> option.</p><h2 id="links" tabindex="-1">Links <a class="header-anchor" href="#links" aria-hidden="true">#</a></h2><h3 id="internal-links" tabindex="-1">Internal Links <a class="header-anchor" href="#internal-links" aria-hidden="true">#</a></h3><p>Internal links are converted to router link for SPA navigation. Also, every <code>index.md</code> contained in each sub-directory will automatically be converted to <code>index.html</code>, with corresponding URL <code>/</code>.</p><p>For example, given the following directory structure:</p><div class="language-"><pre><code>.
\u251C\u2500 index.md
\u251C\u2500 foo
\u2502 \u251C\u2500 index.md
\u2502 \u251C\u2500 one.md
\u2502 \u2514\u2500 two.md
\u2514\u2500 bar
\u251C\u2500 index.md
\u251C\u2500 three.md
\u2514\u2500 four.md
</code></pre></div><p>And providing you are in <code>foo/one.md</code>:</p><div class="language-md"><pre><code><span class="token url">[<span class="token content">Home</span>](<span class="token url">/</span>)</span> <span class="token comment">&lt;!-- sends the user to the root index.md --&gt;</span>
<span class="token url">[<span class="token content">foo</span>](<span class="token url">/foo/</span>)</span> <span class="token comment">&lt;!-- sends the user to index.html of directory foo --&gt;</span>
<span class="token url">[<span class="token content">foo heading</span>](<span class="token url">./#heading</span>)</span> <span class="token comment">&lt;!-- anchors user to a heading in the foo index file --&gt;</span>
<span class="token url">[<span class="token content">bar - three</span>](<span class="token url">../bar/three</span>)</span> <span class="token comment">&lt;!-- you can omit extention --&gt;</span>
<span class="token url">[<span class="token content">bar - three</span>](<span class="token url">../bar/three.md</span>)</span> <span class="token comment">&lt;!-- you can append .md --&gt;</span>
<span class="token url">[<span class="token content">bar - four</span>](<span class="token url">../bar/four.html</span>)</span> <span class="token comment">&lt;!-- or you can append .html --&gt;</span>
</code></pre></div><h3 id="page-suffix" tabindex="-1">Page Suffix <a class="header-anchor" href="#page-suffix" aria-hidden="true">#</a></h3><p>Pages and internal links get generated with the <code>.html</code> suffix by default.</p><h3 id="external-links" tabindex="-1">External Links <a class="header-anchor" href="#external-links" aria-hidden="true">#</a></h3><p>Outbound links automatically get <code>target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;</code>:</p><ul><li><a href="https://vuejs.org" target="_blank" rel="noopener noreferrer">vuejs.org</a></li><li><a href="https://github.com/vuejs/vitepress" target="_blank" rel="noopener noreferrer">VitePress on GitHub</a></li></ul><h2 id="frontmatter" tabindex="-1">Frontmatter <a class="header-anchor" href="#frontmatter" aria-hidden="true">#</a></h2><p><a href="https://jekyllrb.com/docs/front-matter/" target="_blank" rel="noopener noreferrer">YAML frontmatter</a> is supported out of the box:</p><div class="language-yaml"><pre><code><span class="token punctuation">---</span>
<span class="token key atrule">title</span><span class="token punctuation">:</span> Blogging Like a Hacker
<span class="token key atrule">lang</span><span class="token punctuation">:</span> en<span class="token punctuation">-</span>US
<span class="token punctuation">---</span>
</code></pre></div><p>This data will be available to the rest of the page, along with all custom and theming components.</p><p>For more details, see <a href="./frontmatter.html">Frontmatter</a>.</p><h2 id="github-style-tables" tabindex="-1">GitHub-Style Tables <a class="header-anchor" href="#github-style-tables" aria-hidden="true">#</a></h2><p><strong>Input</strong></p><div class="language-"><pre><code>| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
</code></pre></div><p><strong>Output</strong></p><table><thead><tr><th>Tables</th><th style="text-align:center;">Are</th><th style="text-align:right;">Cool</th></tr></thead><tbody><tr><td>col 3 is</td><td style="text-align:center;">right-aligned</td><td style="text-align:right;">$1600</td></tr><tr><td>col 2 is</td><td style="text-align:center;">centered</td><td style="text-align:right;">$12</td></tr><tr><td>zebra stripes</td><td style="text-align:center;">are neat</td><td style="text-align:right;">$1</td></tr></tbody></table><h2 id="emoji" tabindex="-1">Emoji \u{1F389} <a class="header-anchor" href="#emoji" aria-hidden="true">#</a></h2><p><strong>Input</strong></p><div class="language-"><pre><code>:tada: :100:
</code></pre></div><p><strong>Output</strong></p><p>\u{1F389} \u{1F4AF}</p><p>A <a href="https://github.com/markdown-it/markdown-it-emoji/blob/master/lib/data/full.json" target="_blank" rel="noopener noreferrer">list of all emojis</a> is available.</p><h2 id="table-of-contents" tabindex="-1">Table of Contents <a class="header-anchor" href="#table-of-contents" aria-hidden="true">#</a></h2><p><strong>Input</strong></p><div class="language-"><pre><code>[[toc]]
</code></pre></div><p><strong>Output</strong></p><p><div class="table-of-contents"><ul><li><a href="#header-anchors">Header Anchors</a></li><li><a href="#links">Links</a><ul><li><a href="#internal-links">Internal Links</a></li><li><a href="#page-suffix">Page Suffix</a></li><li><a href="#external-links">External Links</a></li></ul></li><li><a href="#frontmatter">Frontmatter</a></li><li><a href="#github-style-tables">GitHub-Style Tables</a></li><li><a href="#emoji">Emoji</a></li><li><a href="#table-of-contents">Table of Contents</a></li><li><a href="#custom-containers">Custom Containers</a><ul><li><a href="#default-title">Default Title</a></li><li><a href="#custom-title">Custom Title</a></li></ul></li><li><a href="#syntax-highlighting-in-code-blocks">Syntax Highlighting in Code Blocks</a></li><li><a href="#line-highlighting-in-code-blocks">Line Highlighting in Code Blocks</a></li><li><a href="#line-numbers">Line Numbers</a></li><li><a href="#import-code-snippets">Import Code Snippets</a></li><li><a href="#advanced-configuration">Advanced Configuration</a></li></ul></div></p><p>Rendering of the TOC can be configured using the <code>markdown.toc</code> option.</p><h2 id="custom-containers" tabindex="-1">Custom Containers <a class="header-anchor" href="#custom-containers" aria-hidden="true">#</a></h2><p>Custom containers can be defined by their types, titles, and contents.</p><h3 id="default-title" tabindex="-1">Default Title <a class="header-anchor" href="#default-title" aria-hidden="true">#</a></h3><p><strong>Input</strong></p><div class="language-md"><pre><code>::: tip
This is a tip
:::
::: info
This is an info box
:::
::: warning
This is a warning
:::
::: danger
This is a dangerous warning
:::
::: details
This is a details block, which does not work in Internet Explorer or old versions of Edge.
:::
</code></pre></div><p><strong>Output</strong></p><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>This is a tip</p></div><div class="info custom-block"><p class="custom-block-title">INFO</p><p>This is an info box</p></div><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>This is a warning</p></div><div class="danger custom-block"><p class="custom-block-title">WARNING</p><p>This is a dangerous warning</p></div><details class="details custom-block"><p>This is a details block, which does not work in Internet Explorer or Edge.</p></details><h3 id="custom-title" tabindex="-1">Custom Title <a class="header-anchor" href="#custom-title" aria-hidden="true">#</a></h3><p><strong>Input</strong></p><div class="language-md"><pre><code>::: danger STOP
Danger zone, do not proceed
:::
::: details Click me to view the code
<span class="token code"><span class="token punctuation">\`\`\`</span><span class="token code-language">js</span>
<span class="token code-block language-js">console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">&#39;Hello, VitePress!&#39;</span><span class="token punctuation">)</span></span>
<span class="token punctuation">\`\`\`</span></span>
:::
</code></pre></div><p><strong>Output</strong></p><div class="danger custom-block"><p class="custom-block-title">STOP</p><p>Danger zone, do not proceed</p></div><details class="details custom-block"><summary>Click me to view the code</summary><div class="language-js"><pre><code>console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">&#39;Hello, VitePress!&#39;</span><span class="token punctuation">)</span>
</code></pre></div></details><h2 id="syntax-highlighting-in-code-blocks" tabindex="-1">Syntax Highlighting in Code Blocks <a class="header-anchor" href="#syntax-highlighting-in-code-blocks" aria-hidden="true">#</a></h2><p>VitePress uses <a href="https://prismjs.com" target="_blank" rel="noopener noreferrer">Prism</a> to highlight language syntax in Markdown code blocks, using coloured text. Prism supports a wide variety of programming languages. All you need to do is append a valid language alias to the beginning backticks for the code block:</p><p><strong>Input</strong></p><div class="language-"><pre><code>\`\`\`js
export default {
name: &#39;MyComponent&#39;,
// ...
}
\`\`\`
</code></pre></div><p><strong>Output</strong></p><div class="language-js"><pre><code><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span>
<span class="token literal-property property">name</span><span class="token operator">:</span> <span class="token string">&#39;MyComponent&#39;</span>
<span class="token comment">// ...</span>
<span class="token punctuation">}</span>
</code></pre></div><p><strong>Input</strong></p><div class="language-"><pre><code>\`\`\`html
&lt;ul&gt;
&lt;li v-for=&quot;todo in todos&quot; :key=&quot;todo.id&quot;&gt;
{{ todo.text }}
&lt;/li&gt;
&lt;/ul&gt;
\`\`\`
</code></pre></div><p><strong>Output</strong></p><div class="language-html"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>ul</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span> <span class="token attr-name">v-for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>todo in todos<span class="token punctuation">&quot;</span></span> <span class="token attr-name">:key</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>todo.id<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>{{ todo.text }}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>ul</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><p>A <a href="https://prismjs.com/#languages-list" target="_blank" rel="noopener noreferrer">list of valid languages</a> is available on Prism\u2019s site.</p><h2 id="line-highlighting-in-code-blocks" tabindex="-1">Line Highlighting in Code Blocks <a class="header-anchor" href="#line-highlighting-in-code-blocks" aria-hidden="true">#</a></h2><p><strong>Input</strong></p><div class="language-"><pre><code>\`\`\`js{4}
export default {
data () {
return {
msg: &#39;Highlighted!&#39;
}
}
}
\`\`\`
</code></pre></div><p><strong>Output</strong></p><div class="language-js"><div class="highlight-lines"><br><br><br><div class="highlighted">\xA0</div><br><br><br><br></div><pre><code><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span>
<span class="token function">data</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token punctuation">{</span>
<span class="token literal-property property">msg</span><span class="token operator">:</span> <span class="token string">&#39;Highlighted!&#39;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><p>In addition to a single line, you can also specify multiple single lines, ranges, or both:</p><ul><li>Line ranges: for example <code>{5-8}</code>, <code>{3-10}</code>, <code>{10-17}</code></li><li>Multiple single lines: for example <code>{4,7,9}</code></li><li>Line ranges and single lines: for example <code>{4,7-13,16,23-27,40}</code></li></ul><p><strong>Input</strong></p><div class="language-"><pre><code>\`\`\`js{1,4,6-7}
export default { // Highlighted
data () {
return {
msg: \`Highlighted!
This line isn&#39;t highlighted,
but this and the next 2 are.\`,
motd: &#39;VitePress is awesome&#39;,
lorem: &#39;ipsum&#39;,
}
}
}
\`\`\`
</code></pre></div><p><strong>Output</strong></p><div class="language-js"><div class="highlight-lines"><div class="highlighted">\xA0</div><br><br><div class="highlighted">\xA0</div><br><div class="highlighted">\xA0</div><div class="highlighted">\xA0</div><div class="highlighted">\xA0</div><br><br><br><br></div><pre><code><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token comment">// Highlighted</span>
<span class="token function">data</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token punctuation">{</span>
<span class="token literal-property property">msg</span><span class="token operator">:</span> <span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token string">Highlighted!
This line isn&#39;t highlighted,
but this and the next 2 are.</span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">,</span>
<span class="token literal-property property">motd</span><span class="token operator">:</span> <span class="token string">&#39;VitePress is awesome&#39;</span><span class="token punctuation">,</span>
<span class="token literal-property property">lorem</span><span class="token operator">:</span> <span class="token string">&#39;ipsum&#39;</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><h2 id="line-numbers" tabindex="-1">Line Numbers <a class="header-anchor" href="#line-numbers" aria-hidden="true">#</a></h2><p>You can enable line numbers for each code blocks via config:</p><div class="language-js"><pre><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
<span class="token literal-property property">markdown</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token literal-property property">lineNumbers</span><span class="token operator">:</span> <span class="token boolean">true</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><ul><li>Demo:</li></ul><picture><source srcset="`+i+'" media="(max-width: 719px)"><img class="line-numbers-mobile-snap" src="'+n+'" alt="Image"></picture><picture><source srcset="'+l+'" media="(min-width: 720px)"><img class="line-numbers-desktop-snap" src="'+s+`" alt="Image"></picture><h2 id="import-code-snippets" tabindex="-1">Import Code Snippets <a class="header-anchor" href="#import-code-snippets" aria-hidden="true">#</a></h2><p>You can import code snippets from existing files via following syntax:</p><div class="language-md"><pre><code>&lt;&lt;&lt; @/filepath
</code></pre></div><p>It also supports <a href="#line-highlighting-in-code-blocks">line highlighting</a>:</p><div class="language-md"><pre><code>&lt;&lt;&lt; @/filepath{highlightLines}
</code></pre></div><p><strong>Input</strong></p><div class="language-md"><pre><code>&lt;&lt;&lt; @/snippets/snippet.js{2}
</code></pre></div><p><strong>Code file</strong></p><div class="language-js"><pre><code><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// ..</span>
<span class="token punctuation">}</span>
</code></pre></div><p><strong>Output</strong></p><div class="language-js"><div class="highlight-lines"><br><div class="highlighted">\xA0</div><br><br></div><pre><code><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// ..</span>
<span class="token punctuation">}</span>
</code></pre></div><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>The value of <code>@</code> corresponds to the source root. By default it&#39;s the VitePress project root, unless <code>srcDir</code> is configured.</p></div><p>You can also use a <a href="https://code.visualstudio.com/docs/editor/codebasics#_folding" target="_blank" rel="noopener noreferrer">VS Code region</a> to only include the corresponding part of the code file. You can provide a custom region name after a <code>#</code> following the filepath (<code>snippet</code> by default):</p><p><strong>Input</strong></p><div class="language-md"><pre><code>&lt;&lt;&lt; @/snippets/snippet-with-region.js{1}
</code></pre></div><p><strong>Code file</strong></p><div class="language-js"><pre><code><span class="token comment">// #region snippet</span>
<span class="token keyword">function</span> <span class="token function">foo</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// ..</span>
<span class="token punctuation">}</span>
<span class="token comment">// #endregion snippet</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> foo
</code></pre></div><p><strong>Output</strong></p><div class="language-js"><div class="highlight-lines"><div class="highlighted">\xA0</div><br><br></div><pre><code><span class="token keyword">function</span> <span class="token function">foo</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// ..</span>
<span class="token punctuation">}</span></code></pre></div><h2 id="advanced-configuration" tabindex="-1">Advanced Configuration <a class="header-anchor" href="#advanced-configuration" aria-hidden="true">#</a></h2><p>VitePress uses <a href="https://github.com/markdown-it/markdown-it" target="_blank" rel="noopener noreferrer">markdown-it</a> as the Markdown renderer. A lot of the extensions above are implemented via custom plugins. You can further customize the <code>markdown-it</code> instance using the <code>markdown</code> option in <code>.vitepress/config.js</code>:</p><div class="language-js"><pre><code><span class="token keyword">const</span> anchor <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">&#39;markdown-it-anchor&#39;</span><span class="token punctuation">)</span>
module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
<span class="token literal-property property">markdown</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token comment">// options for markdown-it-anchor</span>
<span class="token comment">// https://github.com/valeriangalliat/markdown-it-anchor#permalinks</span>
<span class="token literal-property property">anchor</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token literal-property property">permalink</span><span class="token operator">:</span> anchor<span class="token punctuation">.</span>permalink<span class="token punctuation">.</span><span class="token function">headerLink</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token comment">// options for markdown-it-table-of-contents</span>
<span class="token literal-property property">toc</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">includeLevel</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token function-variable function">config</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token parameter">md</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
<span class="token comment">// use more markdown-it plugins!</span>
md<span class="token punctuation">.</span><span class="token function">use</span><span class="token punctuation">(</span><span class="token function">require</span><span class="token punctuation">(</span><span class="token string">&#39;markdown-it-xxx&#39;</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div>`,104),c=[r];function d(u,g,h,k,m,f){return t(),e("div",null,c)}var y=a(p,[["render",d]]);export{v as __pageData,y as default};
@@ -1 +0,0 @@
import{_ as a,c as e,o as t,a as o}from"./app.54944ef9.js";var n="/assets/line-numbers-mobile.f5ca96ee.gif",s="/assets/line-numbers-desktop.cc304762.png";const v='{"title":"Markdown Extensions","description":"","frontmatter":{"sidebarDepth":3},"headers":[{"level":2,"title":"Header Anchors","slug":"header-anchors"},{"level":2,"title":"Links","slug":"links"},{"level":3,"title":"Internal Links","slug":"internal-links"},{"level":3,"title":"Page Suffix","slug":"page-suffix"},{"level":3,"title":"External Links","slug":"external-links"},{"level":2,"title":"Frontmatter","slug":"frontmatter"},{"level":2,"title":"GitHub-Style Tables","slug":"github-style-tables"},{"level":2,"title":"Emoji \u{1F389}","slug":"emoji"},{"level":2,"title":"Table of Contents","slug":"table-of-contents"},{"level":2,"title":"Custom Containers","slug":"custom-containers"},{"level":3,"title":"Default Title","slug":"default-title"},{"level":3,"title":"Custom Title","slug":"custom-title"},{"level":2,"title":"Syntax Highlighting in Code Blocks","slug":"syntax-highlighting-in-code-blocks"},{"level":2,"title":"Line Highlighting in Code Blocks","slug":"line-highlighting-in-code-blocks"},{"level":2,"title":"Line Numbers","slug":"line-numbers"},{"level":2,"title":"Import Code Snippets","slug":"import-code-snippets"},{"level":2,"title":"Advanced Configuration","slug":"advanced-configuration"}],"relativePath":"guide/markdown.md","lastUpdated":1652768268000}',p={},i=n,l=s,r=o("",104),c=[r];function d(u,g,h,k,m,f){return t(),e("div",null,c)}var y=a(p,[["render",d]]);export{v as __pageData,y as default};
@@ -0,0 +1 @@
import{_ as t,c as a,o,b as e,d as r}from"./app.61e847e1.js";const m='{"title":"\u901A\u77E5","description":"","frontmatter":{},"headers":[],"relativePath":"guide/notifications.md"}',s={},n=e("h1",{id:"\u901A\u77E5",tabindex:"-1"},[r("\u901A\u77E5 "),e("a",{class:"header-anchor",href:"#\u901A\u77E5","aria-hidden":"true"},"#")],-1),c=[n];function i(d,_,f,h,p,l){return o(),a("div",null,c)}var x=t(s,[["render",i]]);export{m as __pageData,x as default};
@@ -0,0 +1 @@
import{_ as t,c as a,o,b as e,d as r}from"./app.61e847e1.js";const m='{"title":"\u901A\u77E5","description":"","frontmatter":{},"headers":[],"relativePath":"guide/notifications.md"}',s={},n=e("h1",{id:"\u901A\u77E5",tabindex:"-1"},[r("\u901A\u77E5 "),e("a",{class:"header-anchor",href:"#\u901A\u77E5","aria-hidden":"true"},"#")],-1),c=[n];function i(d,_,f,h,p,l){return o(),a("div",null,c)}var x=t(s,[["render",i]]);export{m as __pageData,x as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as r,b as e,d as o}from"./app.61e847e1.js";const m='{"title":"\u95EE\u98981","description":"","frontmatter":{},"headers":[],"relativePath":"guide/q1.md"}',s={},c=e("h1",{id:"\u95EE\u98981",tabindex:"-1"},[o("\u95EE\u98981 "),e("a",{class:"header-anchor",href:"#\u95EE\u98981","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return r(),a("div",null,d)}var x=t(s,[["render",n]]);export{m as __pageData,x as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as r,b as e,d as o}from"./app.61e847e1.js";const m='{"title":"\u95EE\u98981","description":"","frontmatter":{},"headers":[],"relativePath":"guide/q1.md"}',s={},c=e("h1",{id:"\u95EE\u98981",tabindex:"-1"},[o("\u95EE\u98981 "),e("a",{class:"header-anchor",href:"#\u95EE\u98981","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return r(),a("div",null,d)}var x=t(s,[["render",n]]);export{m as __pageData,x as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as r,b as e,d as o}from"./app.61e847e1.js";const m='{"title":"\u95EE\u98982","description":"","frontmatter":{},"headers":[],"relativePath":"guide/q2.md"}',s={},c=e("h1",{id:"\u95EE\u98982",tabindex:"-1"},[o("\u95EE\u98982 "),e("a",{class:"header-anchor",href:"#\u95EE\u98982","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return r(),a("div",null,d)}var x=t(s,[["render",n]]);export{m as __pageData,x as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as r,b as e,d as o}from"./app.61e847e1.js";const m='{"title":"\u95EE\u98982","description":"","frontmatter":{},"headers":[],"relativePath":"guide/q2.md"}',s={},c=e("h1",{id:"\u95EE\u98982",tabindex:"-1"},[o("\u95EE\u98982 "),e("a",{class:"header-anchor",href:"#\u95EE\u98982","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return r(),a("div",null,d)}var x=t(s,[["render",n]]);export{m as __pageData,x as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as r,b as e,d as o}from"./app.61e847e1.js";const m='{"title":"\u95EE\u98983","description":"","frontmatter":{},"headers":[],"relativePath":"guide/q3.md"}',s={},c=e("h1",{id:"\u95EE\u98983",tabindex:"-1"},[o("\u95EE\u98983 "),e("a",{class:"header-anchor",href:"#\u95EE\u98983","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return r(),a("div",null,d)}var x=t(s,[["render",n]]);export{m as __pageData,x as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as r,b as e,d as o}from"./app.61e847e1.js";const m='{"title":"\u95EE\u98983","description":"","frontmatter":{},"headers":[],"relativePath":"guide/q3.md"}',s={},c=e("h1",{id:"\u95EE\u98983",tabindex:"-1"},[o("\u95EE\u98983 "),e("a",{class:"header-anchor",href:"#\u95EE\u98983","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return r(),a("div",null,d)}var x=t(s,[["render",n]]);export{m as __pageData,x as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as r,b as e,d as o}from"./app.61e847e1.js";const m='{"title":"\u95EE\u98984","description":"","frontmatter":{},"headers":[],"relativePath":"guide/q4.md"}',s={},c=e("h1",{id:"\u95EE\u98984",tabindex:"-1"},[o("\u95EE\u98984 "),e("a",{class:"header-anchor",href:"#\u95EE\u98984","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return r(),a("div",null,d)}var x=t(s,[["render",n]]);export{m as __pageData,x as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as r,b as e,d as o}from"./app.61e847e1.js";const m='{"title":"\u95EE\u98984","description":"","frontmatter":{},"headers":[],"relativePath":"guide/q4.md"}',s={},c=e("h1",{id:"\u95EE\u98984",tabindex:"-1"},[o("\u95EE\u98984 "),e("a",{class:"header-anchor",href:"#\u95EE\u98984","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return r(),a("div",null,d)}var x=t(s,[["render",n]]);export{m as __pageData,x as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as r,b as e,d as o}from"./app.61e847e1.js";const m='{"title":"\u95EE\u98985","description":"","frontmatter":{},"headers":[],"relativePath":"guide/q5.md"}',s={},c=e("h1",{id:"\u95EE\u98985",tabindex:"-1"},[o("\u95EE\u98985 "),e("a",{class:"header-anchor",href:"#\u95EE\u98985","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return r(),a("div",null,d)}var x=t(s,[["render",n]]);export{m as __pageData,x as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as r,b as e,d as o}from"./app.61e847e1.js";const m='{"title":"\u95EE\u98985","description":"","frontmatter":{},"headers":[],"relativePath":"guide/q5.md"}',s={},c=e("h1",{id:"\u95EE\u98985",tabindex:"-1"},[o("\u95EE\u98985 "),e("a",{class:"header-anchor",href:"#\u95EE\u98985","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return r(),a("div",null,d)}var x=t(s,[["render",n]]);export{m as __pageData,x as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as r,b as e,d as s}from"./app.61e847e1.js";const m='{"title":"\u670D\u52A1\u5668","description":"","frontmatter":{},"headers":[],"relativePath":"guide/servers.md"}',o={},c=e("h1",{id:"\u670D\u52A1\u5668",tabindex:"-1"},[s("\u670D\u52A1\u5668 "),e("a",{class:"header-anchor",href:"#\u670D\u52A1\u5668","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return r(),a("div",null,d)}var v=t(o,[["render",n]]);export{m as __pageData,v as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as r,b as e,d as s}from"./app.61e847e1.js";const m='{"title":"\u670D\u52A1\u5668","description":"","frontmatter":{},"headers":[],"relativePath":"guide/servers.md"}',o={},c=e("h1",{id:"\u670D\u52A1\u5668",tabindex:"-1"},[s("\u670D\u52A1\u5668 "),e("a",{class:"header-anchor",href:"#\u670D\u52A1\u5668","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return r(),a("div",null,d)}var v=t(o,[["render",n]]);export{m as __pageData,v as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as r,b as e,d as s}from"./app.61e847e1.js";const m='{"title":"\u670D\u52A1","description":"","frontmatter":{},"headers":[],"relativePath":"guide/services.md"}',o={},c=e("h1",{id:"\u670D\u52A1",tabindex:"-1"},[s("\u670D\u52A1 "),e("a",{class:"header-anchor",href:"#\u670D\u52A1","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return r(),a("div",null,d)}var v=t(o,[["render",n]]);export{m as __pageData,v as default};
@@ -0,0 +1 @@
import{_ as t,c as a,o as r,b as e,d as s}from"./app.61e847e1.js";const m='{"title":"\u670D\u52A1","description":"","frontmatter":{},"headers":[],"relativePath":"guide/services.md"}',o={},c=e("h1",{id:"\u670D\u52A1",tabindex:"-1"},[s("\u670D\u52A1 "),e("a",{class:"header-anchor",href:"#\u670D\u52A1","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return r(),a("div",null,d)}var v=t(o,[["render",n]]);export{m as __pageData,v as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as s,b as e,d as r}from"./app.61e847e1.js";const m='{"title":"\u8BBE\u7F6E","description":"","frontmatter":{},"headers":[],"relativePath":"guide/settings.md"}',o={},n=e("h1",{id:"\u8BBE\u7F6E",tabindex:"-1"},[r("\u8BBE\u7F6E "),e("a",{class:"header-anchor",href:"#\u8BBE\u7F6E","aria-hidden":"true"},"#")],-1),c=[n];function d(i,_,h,p,l,f){return s(),a("div",null,c)}var x=t(o,[["render",d]]);export{m as __pageData,x as default};
@@ -0,0 +1 @@
import{_ as t,c as a,o as s,b as e,d as r}from"./app.61e847e1.js";const m='{"title":"\u8BBE\u7F6E","description":"","frontmatter":{},"headers":[],"relativePath":"guide/settings.md"}',o={},n=e("h1",{id:"\u8BBE\u7F6E",tabindex:"-1"},[r("\u8BBE\u7F6E "),e("a",{class:"header-anchor",href:"#\u8BBE\u7F6E","aria-hidden":"true"},"#")],-1),c=[n];function d(i,_,h,p,l,f){return s(),a("div",null,c)}var x=t(o,[["render",d]]);export{m as __pageData,x as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as s,b as e,d as r}from"./app.61e847e1.js";const m='{"title":"\u4EFB\u52A1","description":"","frontmatter":{},"headers":[],"relativePath":"guide/tasks.md"}',o={},c=e("h1",{id:"\u4EFB\u52A1",tabindex:"-1"},[r("\u4EFB\u52A1 "),e("a",{class:"header-anchor",href:"#\u4EFB\u52A1","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return s(),a("div",null,d)}var x=t(o,[["render",n]]);export{m as __pageData,x as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,c as a,o as s,b as e,d as r}from"./app.61e847e1.js";const m='{"title":"\u4EFB\u52A1","description":"","frontmatter":{},"headers":[],"relativePath":"guide/tasks.md"}',o={},c=e("h1",{id:"\u4EFB\u52A1",tabindex:"-1"},[r("\u4EFB\u52A1 "),e("a",{class:"header-anchor",href:"#\u4EFB\u52A1","aria-hidden":"true"},"#")],-1),d=[c];function n(i,_,h,p,l,f){return s(),a("div",null,d)}var x=t(o,[["render",n]]);export{m as __pageData,x as default};
-79
View File
@@ -1,79 +0,0 @@
import{_ as n,c as s,o as a,a as e}from"./app.54944ef9.js";const h='{"title":"Theming","description":"","frontmatter":{},"headers":[{"level":2,"title":"Using a Custom Theme","slug":"using-a-custom-theme"},{"level":2,"title":"Extending the Default Theme","slug":"extending-the-default-theme"},{"level":3,"title":"Registering Global Components","slug":"registering-global-components"},{"level":3,"title":"Customizing CSS","slug":"customizing-css"},{"level":3,"title":"Layout Slots","slug":"layout-slots"}],"relativePath":"guide/theming.md","lastUpdated":1652768268000}',t={},o=e(`<h1 id="theming" tabindex="-1">Theming <a class="header-anchor" href="#theming" aria-hidden="true">#</a></h1><h2 id="using-a-custom-theme" tabindex="-1">Using a Custom Theme <a class="header-anchor" href="#using-a-custom-theme" aria-hidden="true">#</a></h2><p>You can enable a custom theme by adding the <code>.vitepress/theme/index.js</code> file (the &quot;theme entry file&quot;).</p><div class="language-bash"><pre><code><span class="token builtin class-name">.</span>
\u251C\u2500 docs
\u2502 \u251C\u2500 .vitepress
\u2502 \u2502 \u251C\u2500 theme
\u2502 \u2502 \u2502 \u2514\u2500 index.js
\u2502 \u2502 \u2514\u2500 config.js
\u2502 \u2514\u2500 index.md
\u2514\u2500 package.json
</code></pre></div><p>A VitePress custom theme is simply an object containing three properties and is defined as follows:</p><div class="language-ts"><pre><code><span class="token keyword">interface</span> <span class="token class-name">Theme</span> <span class="token punctuation">{</span>
Layout<span class="token operator">:</span> Component <span class="token comment">// Vue 3 component</span>
NotFound<span class="token operator">?</span><span class="token operator">:</span> Component
enhanceApp<span class="token operator">?</span><span class="token operator">:</span> <span class="token punctuation">(</span>ctx<span class="token operator">:</span> EnhanceAppContext<span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token keyword">void</span>
<span class="token punctuation">}</span>
<span class="token keyword">interface</span> <span class="token class-name">EnhanceAppContext</span> <span class="token punctuation">{</span>
app<span class="token operator">:</span> App <span class="token comment">// Vue 3 app instance</span>
router<span class="token operator">:</span> Router <span class="token comment">// VitePress router instance</span>
siteData<span class="token operator">:</span> Ref<span class="token operator">&lt;</span>SiteData<span class="token operator">&gt;</span>
<span class="token punctuation">}</span>
</code></pre></div><p>The theme entry file should export the theme as its default export:</p><div class="language-js"><pre><code><span class="token comment">// .vitepress/theme/index.js</span>
<span class="token keyword">import</span> Layout <span class="token keyword">from</span> <span class="token string">&#39;./Layout.vue&#39;</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span>
Layout<span class="token punctuation">,</span>
<span class="token function-variable function">NotFound</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token string">&#39;custom 404&#39;</span><span class="token punctuation">,</span> <span class="token comment">// &lt;- this is a Vue 3 functional component</span>
<span class="token function">enhanceApp</span><span class="token punctuation">(</span><span class="token parameter"><span class="token punctuation">{</span> app<span class="token punctuation">,</span> router<span class="token punctuation">,</span> siteData <span class="token punctuation">}</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// app is the Vue 3 app instance from \`createApp()\`. router is VitePress&#39;</span>
<span class="token comment">// custom router. \`siteData\` is a \`ref\` of current site-level metadata.</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><p>...where the <code>Layout</code> component could look like this:</p><div class="language-vue"><pre><code><span class="token comment">&lt;!-- .vitepress/theme/Layout.vue --&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h1</span><span class="token punctuation">&gt;</span></span>Custom Layout!<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h1</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Content</span> <span class="token punctuation">/&gt;</span></span><span class="token comment">&lt;!-- this is where markdown content will be rendered --&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><p>The default export is the only contract for a custom theme. Inside your custom theme, it works just like a normal Vite + Vue 3 application. Do note the theme also needs to be <a href="./using-vue.html#browser-api-access-restrictions">SSR-compatible</a>.</p><p>To distribute a theme, simply export the object in your package entry. To consume an external theme, import and re-export it from the custom theme entry:</p><div class="language-js"><pre><code><span class="token comment">// .vitepress/theme/index.js</span>
<span class="token keyword">import</span> Theme <span class="token keyword">from</span> <span class="token string">&#39;awesome-vitepress-theme&#39;</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> Theme
</code></pre></div><h2 id="extending-the-default-theme" tabindex="-1">Extending the Default Theme <a class="header-anchor" href="#extending-the-default-theme" aria-hidden="true">#</a></h2><p>If you want to extend and customize the default theme, you can import it from <code>vitepress/theme</code> and augment it in a custom theme entry. Here are some examples of common customizations:</p><h3 id="registering-global-components" tabindex="-1">Registering Global Components <a class="header-anchor" href="#registering-global-components" aria-hidden="true">#</a></h3><div class="language-js"><pre><code><span class="token comment">// .vitepress/theme/index.js</span>
<span class="token keyword">import</span> DefaultTheme <span class="token keyword">from</span> <span class="token string">&#39;vitepress/theme&#39;</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span>
<span class="token operator">...</span>DefaultTheme<span class="token punctuation">,</span>
<span class="token function">enhanceApp</span><span class="token punctuation">(</span><span class="token parameter"><span class="token punctuation">{</span> app <span class="token punctuation">}</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// register global components</span>
app<span class="token punctuation">.</span><span class="token function">component</span><span class="token punctuation">(</span><span class="token string">&#39;MyGlobalComponent&#39;</span> <span class="token comment">/* ... */</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><p>Since we are using Vite, you can also leverage Vite&#39;s <a href="https://vitejs.dev/guide/features.html#glob-import" target="_blank" rel="noopener noreferrer">glob import feature</a> to auto register a directory of components.</p><h3 id="customizing-css" tabindex="-1">Customizing CSS <a class="header-anchor" href="#customizing-css" aria-hidden="true">#</a></h3><p>The default theme CSS is customizable by overriding root level CSS variables:</p><div class="language-js"><pre><code><span class="token comment">// .vitepress/theme/index.js</span>
<span class="token keyword">import</span> DefaultTheme <span class="token keyword">from</span> <span class="token string">&#39;vitepress/theme&#39;</span>
<span class="token keyword">import</span> <span class="token string">&#39;./custom.css&#39;</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> DefaultTheme
</code></pre></div><div class="language-css"><pre><code><span class="token comment">/* .vitepress/theme/custom.css */</span>
<span class="token selector">:root</span> <span class="token punctuation">{</span>
<span class="token property">--c-brand</span><span class="token punctuation">:</span> #646cff<span class="token punctuation">;</span>
<span class="token property">--c-brand-light</span><span class="token punctuation">:</span> #747bff<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre></div><p>See <a href="https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css" target="_blank" rel="noopener noreferrer">default theme CSS variables</a> that can be overridden.</p><h3 id="layout-slots" tabindex="-1">Layout Slots <a class="header-anchor" href="#layout-slots" aria-hidden="true">#</a></h3><p>The default theme&#39;s <code>&lt;Layout/&gt;</code> component has a few slots that can be used to inject content at certain locations of the page. Here&#39;s an example of injecting a component into the top of the sidebar:</p><div class="language-js"><pre><code><span class="token comment">// .vitepress/theme/index.js</span>
<span class="token keyword">import</span> DefaultTheme <span class="token keyword">from</span> <span class="token string">&#39;vitepress/theme&#39;</span>
<span class="token keyword">import</span> MyLayout <span class="token keyword">from</span> <span class="token string">&#39;./MyLayout.vue&#39;</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span>
<span class="token operator">...</span>DefaultTheme<span class="token punctuation">,</span>
<span class="token comment">// override the Layout with a wrapper component that injects the slots</span>
<span class="token literal-property property">Layout</span><span class="token operator">:</span> MyLayout
<span class="token punctuation">}</span>
</code></pre></div><div class="language-vue"><pre><code><span class="token comment">&lt;!--.vitepress/theme/MyLayout.vue--&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">setup</span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> DefaultTheme <span class="token keyword">from</span> <span class="token string">&#39;vitepress/theme&#39;</span>
<span class="token keyword">const</span> <span class="token punctuation">{</span> Layout <span class="token punctuation">}</span> <span class="token operator">=</span> DefaultTheme
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Layout</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span> <span class="token attr-name">#sidebar-top</span><span class="token punctuation">&gt;</span></span>My custom sidebar top content<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>Layout</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><p>Full list of slots available in the default theme layout:</p><ul><li><code>navbar-search</code></li><li><code>sidebar-top</code></li><li><code>sidebar-bottom</code></li><li><code>page-top-ads</code></li><li><code>page-top</code></li><li><code>page-bottom</code></li><li><code>page-bottom-ads</code></li><li>Only when <code>home: true</code> is enabled via frontmatter: <ul><li><code>home-hero</code></li><li><code>home-features</code></li><li><code>home-footer</code></li></ul></li></ul>`,29),p=[o];function c(l,i,r,u,k,d){return a(),s("div",null,p)}var g=n(t,[["render",c]]);export{h as __pageData,g as default};
-1
View File
@@ -1 +0,0 @@
import{_ as n,c as s,o as a,a as e}from"./app.54944ef9.js";const h='{"title":"Theming","description":"","frontmatter":{},"headers":[{"level":2,"title":"Using a Custom Theme","slug":"using-a-custom-theme"},{"level":2,"title":"Extending the Default Theme","slug":"extending-the-default-theme"},{"level":3,"title":"Registering Global Components","slug":"registering-global-components"},{"level":3,"title":"Customizing CSS","slug":"customizing-css"},{"level":3,"title":"Layout Slots","slug":"layout-slots"}],"relativePath":"guide/theming.md","lastUpdated":1652768268000}',t={},o=e("",29),p=[o];function c(l,i,r,u,k,d){return a(),s("div",null,p)}var g=n(t,[["render",c]]);export{h as __pageData,g as default};
-84
View File
@@ -1,84 +0,0 @@
import{_ as o,o as a,c as t,b as n,F as r,r as u,d,n as k,a as s,e as p,f as g,t as h}from"./app.54944ef9.js";const m={};function y(e,c){return a(),t("span",null,"\u26A1")}var f=o(m,[["render",y]]);const v="_example_t4bci_2";var _={example:v};const w={props:["slot-key"],components:{ComponentInHeader:f},mounted(){document.querySelector(`.${this.$style.example}`).textContent="This is rendered by inline script and styled by inline CSS"}},N='{"title":"Using Vue in Markdown","description":"","frontmatter":{"sidebarDepth":3},"headers":[{"level":2,"title":"Templating","slug":"templating"},{"level":3,"title":"Interpolation","slug":"interpolation"},{"level":3,"title":"Directives","slug":"directives"},{"level":3,"title":"Access to Site & Page Data","slug":"access-to-site-page-data"},{"level":2,"title":"Escaping","slug":"escaping"},{"level":2,"title":"Using Components","slug":"using-components"},{"level":3,"title":"Importing components in markdown","slug":"importing-components-in-markdown"},{"level":3,"title":"Registering global components in the theme","slug":"registering-global-components-in-the-theme"},{"level":3,"title":"Using Components In Headers","slug":"using-components-in-headers"},{"level":2,"title":"Using CSS Pre-processors","slug":"using-css-pre-processors"},{"level":2,"title":"Script & Style Hoisting","slug":"script-style-hoisting"},{"level":2,"title":"Built-In Components","slug":"built-in-components"},{"level":2,"title":"Browser API Access Restrictions","slug":"browser-api-access-restrictions"}],"relativePath":"guide/using-vue.md","lastUpdated":1652768268000}',b=s(`<h1 id="using-vue-in-markdown" tabindex="-1">Using Vue in Markdown <a class="header-anchor" href="#using-vue-in-markdown" aria-hidden="true">#</a></h1><p>In VitePress, each markdown file is compiled into HTML and then processed as a Vue Single-File Component. This means you can use any Vue features inside the markdown, including dynamic templating, using Vue components, or arbitrary in-page Vue component logic by adding a <code>&lt;script&gt;</code> tag.</p><p>It is also important to know that VitePress leverages Vue 3&#39;s compiler to automatically detect and optimize the purely static parts of the markdown. Static contents are optimized into single placeholder nodes and eliminated from the page&#39;s JavaScript payload. They are also skipped during client-side hydration. In short, you only pay for the dynamic parts on any given page.</p><h2 id="templating" tabindex="-1">Templating <a class="header-anchor" href="#templating" aria-hidden="true">#</a></h2><h3 id="interpolation" tabindex="-1">Interpolation <a class="header-anchor" href="#interpolation" aria-hidden="true">#</a></h3><p>Each Markdown file is first compiled into HTML and then passed on as a Vue component to the Vite process pipeline. This means you can use Vue-style interpolation in text:</p><p><strong>Input</strong></p><div class="language-md"><pre><code>{{ 1 + 1 }}
</code></pre></div><p><strong>Output</strong></p><div class="language-text"><pre><code>2</code></pre></div><h3 id="directives" tabindex="-1">Directives <a class="header-anchor" href="#directives" aria-hidden="true">#</a></h3><p>Directives also work:</p><p><strong>Input</strong></p><div class="language-md"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>span</span> <span class="token attr-name">v-for</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>i in 3<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>{{ i }} <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>span</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><p><strong>Output</strong></p>`,15),T={class:"language-text"},x=s(`<h3 id="access-to-site-page-data" tabindex="-1">Access to Site &amp; Page Data <a class="header-anchor" href="#access-to-site-page-data" aria-hidden="true">#</a></h3><p>You can use the <a href="./api.html#usedata"><code>useData</code> helper</a> in a <code>&lt;script&gt;</code> block and expose the data to the page.</p><p><strong>Input</strong></p><div class="language-md"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">setup</span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> <span class="token punctuation">{</span> useData <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">&#39;vitepress&#39;</span>
<span class="token keyword">const</span> <span class="token punctuation">{</span> page <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">useData</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>pre</span><span class="token punctuation">&gt;</span></span>{{ page }}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>pre</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><p><strong>Output</strong></p><div class="language-json"><pre><code><span class="token punctuation">{</span>
<span class="token property">&quot;path&quot;</span><span class="token operator">:</span> <span class="token string">&quot;/using-vue.html&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;title&quot;</span><span class="token operator">:</span> <span class="token string">&quot;Using Vue in Markdown&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;frontmatter&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><h2 id="escaping" tabindex="-1">Escaping <a class="header-anchor" href="#escaping" aria-hidden="true">#</a></h2><p>By default, fenced code blocks are automatically wrapped with <code>v-pre</code>. To display raw mustaches or Vue-specific syntax inside inline code snippets or plain text, you need to wrap a paragraph with the <code>v-pre</code> custom container:</p><p><strong>Input</strong></p><div class="language-md"><pre><code>::: v-pre
<span class="token code-snippet code keyword">\`{{ This will be displayed as-is }}\`</span>
:::
</code></pre></div><p><strong>Output</strong></p><div><p><code>{{ This will be displayed as-is }}</code></p></div><h2 id="using-components" tabindex="-1">Using Components <a class="header-anchor" href="#using-components" aria-hidden="true">#</a></h2><p>When you need to have more flexibility, VitePress allows you to extend your authoring toolbox with your own Vue Components.</p><h3 id="importing-components-in-markdown" tabindex="-1">Importing components in markdown <a class="header-anchor" href="#importing-components-in-markdown" aria-hidden="true">#</a></h3><p>If your components are going to be used in only a few places, the recommended way to use them is to importing the components in the file where it is used.</p><div class="language-md"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">setup</span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> CustomComponent <span class="token keyword">from</span> <span class="token string">&#39;../components/CustomComponent.vue&#39;</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
<span class="token title important"><span class="token punctuation">#</span> Docs</span>
This is a .md using a custom component
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>CustomComponent</span> <span class="token punctuation">/&gt;</span></span>
<span class="token title important"><span class="token punctuation">##</span> More docs</span>
...
</code></pre></div><h3 id="registering-global-components-in-the-theme" tabindex="-1">Registering global components in the theme <a class="header-anchor" href="#registering-global-components-in-the-theme" aria-hidden="true">#</a></h3><p>If the components are going to be used across several pages in the docs, they can be registered globally in the theme (or as part of extending the default VitePress theme). Check out the <a href="./theming.html">Theming Guide</a> for more information.</p><p>In <code>.vitepress/theme/index.js</code>, the <code>enhanceApp</code> function receives the Vue <code>app</code> instance so you can <a href="https://vuejs.org/guide/components/registration.html" target="_blank" rel="noopener noreferrer">register components</a> as you would do in a regular Vue application.</p><div class="language-js"><pre><code><span class="token keyword">import</span> DefaultTheme <span class="token keyword">from</span> <span class="token string">&#39;vitepress/theme&#39;</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span>
<span class="token operator">...</span>DefaultTheme<span class="token punctuation">,</span>
<span class="token function">enhanceApp</span><span class="token punctuation">(</span><span class="token parameter"><span class="token punctuation">{</span> app <span class="token punctuation">}</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
app<span class="token punctuation">.</span><span class="token function">component</span><span class="token punctuation">(</span><span class="token string">&#39;VueClickAwayExample&#39;</span><span class="token punctuation">,</span> VueClickAwayExample<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><p>Later in your markdown files, the component can be interleaved between the content</p><div class="language-md"><pre><code><span class="token title important"><span class="token punctuation">#</span> Vue Click Away</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>VueClickAwayExample</span> <span class="token punctuation">/&gt;</span></span>
</code></pre></div><div class="warning custom-block"><p class="custom-block-title">IMPORTANT</p><p>Make sure a custom component\u2019s name either contains a hyphen or is in PascalCase. Otherwise, it will be treated as an inline element and wrapped inside a <code>&lt;p&gt;</code> tag, which will lead to hydration mismatch because <code>&lt;p&gt;</code> does not allow block elements to be placed inside it.</p></div>`,24),C={id:"using-components-in-headers",tabindex:"-1"},V=p("Using Components In Headers "),I=p(),S=n("a",{class:"header-anchor",href:"#using-components-in-headers","aria-hidden":"true"},"#",-1),A=s(`<p>You can use Vue components in the headers, but note the difference between the following syntaxes:</p><table><thead><tr><th>Markdown</th><th>Output HTML</th><th>Parsed Header</th></tr></thead><tbody><tr><td><pre><code> # text &lt;Tag/&gt; </code></pre></td><td><code>&lt;h1&gt;text &lt;Tag/&gt;&lt;/h1&gt;</code></td><td><code>text</code></td></tr><tr><td><pre><code> # text \`&lt;Tag/&gt;\` </code></pre></td><td><code>&lt;h1&gt;text &lt;code&gt;&amp;lt;Tag/&amp;gt;&lt;/code&gt;&lt;/h1&gt;</code></td><td><code>text &lt;Tag/&gt;</code></td></tr></tbody></table><p>The HTML wrapped by <code>&lt;code&gt;</code> will be displayed as-is; only the HTML that is <strong>not</strong> wrapped will be parsed by Vue.</p><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>The output HTML is accomplished by <a href="https://github.com/markdown-it/markdown-it" target="_blank" rel="noopener noreferrer">markdown-it</a>, while the parsed headers are handled by VitePress (and used for both the sidebar and document title).</p></div><h2 id="using-css-pre-processors" tabindex="-1">Using CSS Pre-processors <a class="header-anchor" href="#using-css-pre-processors" aria-hidden="true">#</a></h2><p>VitePress has <a href="https://vitejs.dev/guide/features.html#css-pre-processors" target="_blank" rel="noopener noreferrer">built-in support</a> for CSS pre-processors: <code>.scss</code>, <code>.sass</code>, <code>.less</code>, <code>.styl</code> and <code>.stylus</code> files. There is no need to install Vite-specific plugins for them, but the corresponding pre-processor itself must be installed:</p><div class="language-"><pre><code># .scss and .sass
npm install -D sass
# .less
npm install -D less
# .styl and .stylus
npm install -D stylus
</code></pre></div><p>Then you can use the following in Markdown and theme components:</p><div class="language-vue"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>style</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>sass<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span><span class="token style"><span class="token language-css">
.title
<span class="token property">font-size</span><span class="token punctuation">:</span> 20px
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>style</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><h2 id="script-style-hoisting" tabindex="-1">Script &amp; Style Hoisting <a class="header-anchor" href="#script-style-hoisting" aria-hidden="true">#</a></h2><p>Sometimes you may need to apply some JavaScript or CSS only to the current page. In those cases, you can directly write root-level <code>&lt;script&gt;</code> or <code>&lt;style&gt;</code> blocks in the Markdown file. These will be hoisted out of the compiled HTML and used as the <code>&lt;script&gt;</code> and <code>&lt;style&gt;</code> blocks for the resulting Vue single-file component:</p>`,11),P=s(`<h2 id="built-in-components" tabindex="-1">Built-In Components <a class="header-anchor" href="#built-in-components" aria-hidden="true">#</a></h2><p>VitePress provides Built-In Vue Components like <code>ClientOnly</code> and <code>OutboundLink</code>, check out the <a href="./global-component.html">Global Component Guide</a> for more information.</p><p><strong>Also see:</strong></p><ul><li><a href="#using-components-in-headers">Using Components In Headers</a></li></ul><h2 id="browser-api-access-restrictions" tabindex="-1">Browser API Access Restrictions <a class="header-anchor" href="#browser-api-access-restrictions" aria-hidden="true">#</a></h2><p>Because VitePress applications are server-rendered in Node.js when generating static builds, any Vue usage must conform to the <a href="https://vuejs.org/guide/scaling-up/ssr.html" target="_blank" rel="noopener noreferrer">universal code requirements</a>. In short, make sure to only access Browser / DOM APIs in <code>beforeMount</code> or <code>mounted</code> hooks.</p><p>If you are using or demoing components that are not SSR-friendly (for example, contain custom directives), you can wrap them inside the built-in <code>&lt;ClientOnly&gt;</code> component:</p><div class="language-md"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>ClientOnly</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>NonSSRFriendlyComponent</span><span class="token punctuation">/&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>ClientOnly</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><p>Note this does not fix components or libraries that access Browser APIs <strong>on import</strong>. To use code that assumes a browser environment on import, you need to dynamically import them in proper lifecycle hooks:</p><div class="language-vue"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span>
<span class="token function">mounted</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">import</span><span class="token punctuation">(</span><span class="token string">&#39;./lib-that-access-window-on-import&#39;</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">module</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
<span class="token comment">// use code</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><p>If your module <code>export default</code> a Vue component, you can register it dynamically:</p><div class="language-vue"><pre><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>component</span> <span class="token attr-name">v-if</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>dynamicComponent<span class="token punctuation">&quot;</span></span> <span class="token attr-name">:is</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>dynamicComponent<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>component</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span>
<span class="token function">data</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token punctuation">{</span>
<span class="token literal-property property">dynamicComponent</span><span class="token operator">:</span> <span class="token keyword">null</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token function">mounted</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">import</span><span class="token punctuation">(</span><span class="token string">&#39;./lib-that-access-window-on-import&#39;</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">module</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
<span class="token keyword">this</span><span class="token punctuation">.</span>dynamicComponent <span class="token operator">=</span> module<span class="token punctuation">.</span>default
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><p><strong>Also see:</strong></p><ul><li><a href="https://vuejs.org/guide/essentials/component-basics.html#dynamic-components" target="_blank" rel="noopener noreferrer">Vue.js &gt; Dynamic Components</a></li></ul>`,14);function q(e,c,M,H,j,O){const i=g("ComponentInHeader");return a(),t("div",null,[b,n("div",T,[n("pre",null,[n("code",null,[(a(),t(r,null,u(3,l=>n("span",null,h(l)+" ",1)),64))])])]),x,n("h3",C,[V,d(i),I,S]),A,n("p",{class:k(["demo",e.$style.example])},null,2),P])}const D={$style:_};var E=o(w,[["render",q],["__cssModules",D]]);export{N as __pageData,E as default};
@@ -1 +0,0 @@
import{_ as o,o as a,c as t,b as n,F as r,r as u,d,n as k,a as s,e as p,f as g,t as h}from"./app.54944ef9.js";const m={};function y(e,c){return a(),t("span",null,"\u26A1")}var f=o(m,[["render",y]]);const v="_example_t4bci_2";var _={example:v};const w={props:["slot-key"],components:{ComponentInHeader:f},mounted(){document.querySelector(`.${this.$style.example}`).textContent="This is rendered by inline script and styled by inline CSS"}},N='{"title":"Using Vue in Markdown","description":"","frontmatter":{"sidebarDepth":3},"headers":[{"level":2,"title":"Templating","slug":"templating"},{"level":3,"title":"Interpolation","slug":"interpolation"},{"level":3,"title":"Directives","slug":"directives"},{"level":3,"title":"Access to Site & Page Data","slug":"access-to-site-page-data"},{"level":2,"title":"Escaping","slug":"escaping"},{"level":2,"title":"Using Components","slug":"using-components"},{"level":3,"title":"Importing components in markdown","slug":"importing-components-in-markdown"},{"level":3,"title":"Registering global components in the theme","slug":"registering-global-components-in-the-theme"},{"level":3,"title":"Using Components In Headers","slug":"using-components-in-headers"},{"level":2,"title":"Using CSS Pre-processors","slug":"using-css-pre-processors"},{"level":2,"title":"Script & Style Hoisting","slug":"script-style-hoisting"},{"level":2,"title":"Built-In Components","slug":"built-in-components"},{"level":2,"title":"Browser API Access Restrictions","slug":"browser-api-access-restrictions"}],"relativePath":"guide/using-vue.md","lastUpdated":1652768268000}',b=s("",15),T={class:"language-text"},x=s("",24),C={id:"using-components-in-headers",tabindex:"-1"},V=p("Using Components In Headers "),I=p(),S=n("a",{class:"header-anchor",href:"#using-components-in-headers","aria-hidden":"true"},"#",-1),A=s("",11),P=s("",14);function q(e,c,M,H,j,O){const i=g("ComponentInHeader");return a(),t("div",null,[b,n("div",T,[n("pre",null,[n("code",null,[(a(),t(r,null,u(3,l=>n("span",null,h(l)+" ",1)),64))])])]),x,n("h3",C,[V,d(i),I,S]),A,n("p",{class:k(["demo",e.$style.example])},null,2),P])}const D={$style:_};var E=o(w,[["render",q],["__cssModules",D]]);export{N as __pageData,E as default};
-1
View File
@@ -1 +0,0 @@
import{_ as e,c as t,o as s,a as i}from"./app.54944ef9.js";const v='{"title":"What is VitePress?","description":"","frontmatter":{"sidebarDepth":2},"headers":[{"level":2,"title":"Motivation","slug":"motivation"},{"level":2,"title":"Improvements Over VuePress v1","slug":"improvements-over-vuepress-v1"},{"level":3,"title":"It Uses Vue 3","slug":"it-uses-vue-3"},{"level":3,"title":"It Uses Vite Under The Hood","slug":"it-uses-vite-under-the-hood"},{"level":3,"title":"Lighter Page Weight","slug":"lighter-page-weight"},{"level":2,"title":"Other Differences","slug":"other-differences"},{"level":2,"title":"Will This Become The Next VuePress in The Future?","slug":"will-this-become-the-next-vuepress-in-the-future"}],"relativePath":"index.md","lastUpdated":1652768268000}',a={},r=i('<h1 id="what-is-vitepress" tabindex="-1">What is VitePress? <a class="header-anchor" href="#what-is-vitepress" aria-hidden="true">#</a></h1><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>VitePress is currently in 0.x status. It is already suitable for out-of-the-box documentation use, but the config and theming API may still change between minor releases.</p></div><p>VitePress is <a href="https://vuepress.vuejs.org" target="_blank" rel="noopener noreferrer">VuePress</a>&#39; little brother, built on top of <a href="https://github.com/vitejs/vite" target="_blank" rel="noopener noreferrer">Vite</a>.</p><h2 id="motivation" tabindex="-1">Motivation <a class="header-anchor" href="#motivation" aria-hidden="true">#</a></h2><p>We love VuePress v1, but being built on top of Webpack, the time it takes to spin up the dev server for a simple doc site with a few pages is just becoming unbearable. Even HMR updates can take up to seconds to reflect in the browser!</p><p>Fundamentally, this is because VuePress v1 is a Webpack app under the hood. Even with just two pages, it&#39;s a full on Webpack project (including all the theme source files) being compiled. It gets even worse when the project has many pages \u2013 every page must first be fully compiled before the server can even display anything!</p><p>Incidentally, Vite solves these problems really well: nearly instant server start, an on-demand compilation that only compiles the page being served, and lightning-fast HMR. Plus, there are a few additional design issues I have noted in VuePress v1 over time but never had the time to fix due to the amount of refactoring it would require.</p><p>Now, with Vite and Vue 3, it is time to rethink what a &quot;Vue-powered static site generator&quot; can really be.</p><h2 id="improvements-over-vuepress-v1" tabindex="-1">Improvements Over VuePress v1 <a class="header-anchor" href="#improvements-over-vuepress-v1" aria-hidden="true">#</a></h2><p>There&#39;re couple of things that are improved from VuePress v1....</p><h3 id="it-uses-vue-3" tabindex="-1">It Uses Vue 3 <a class="header-anchor" href="#it-uses-vue-3" aria-hidden="true">#</a></h3><p>Leverages Vue 3&#39;s improved template static analysis to stringify static content as much as possible. Static content is sent as string literals instead of JavaScript render function code \u2013 the JS payload is therefore <em>much</em> cheaper to parse, and hydration also becomes faster.</p><p>Note the optimization is applied while still allowing the user to freely mix Vue components inside markdown content \u2013 the compiler does the static/dynamic separation for you automatically and you never need to think about it.</p><h3 id="it-uses-vite-under-the-hood" tabindex="-1">It Uses Vite Under The Hood <a class="header-anchor" href="#it-uses-vite-under-the-hood" aria-hidden="true">#</a></h3><ul><li>Faster dev server start</li><li>Faster hot updates</li><li>Faster build (uses Rollup internally)</li></ul><h3 id="lighter-page-weight" tabindex="-1">Lighter Page Weight <a class="header-anchor" href="#lighter-page-weight" aria-hidden="true">#</a></h3><ul><li>Vue 3 tree-shaking + Rollup code splitting</li><li>Does not ship metadata for every page on every request. This decouples page weight from total number of pages. Only the current page&#39;s metadata is sent. Client side navigation fetches the new page&#39;s component and metadata together.</li><li>Does not use <code>vue-router</code> because the need of VitePress is very simple and specific - a simple custom router (under 200 LOC) is used instead.</li><li>(WIP) i18n locale data should also be fetched on demand.</li></ul><h2 id="other-differences" tabindex="-1">Other Differences <a class="header-anchor" href="#other-differences" aria-hidden="true">#</a></h2><p>VitePress is more opinionated and less configurable: VitePress aims to scale back the complexity in the current VuePress and restart from its minimalist roots.</p><p>VitePress is future oriented: VitePress only targets browsers that support native ES module imports. It encourages the use of native JavaScript without transpilation, and CSS variables for theming.</p><h2 id="will-this-become-Line truncated
-1
View File
@@ -1 +0,0 @@
import{_ as e,c as t,o as s,a as i}from"./app.54944ef9.js";const v='{"title":"What is VitePress?","description":"","frontmatter":{"sidebarDepth":2},"headers":[{"level":2,"title":"Motivation","slug":"motivation"},{"level":2,"title":"Improvements Over VuePress v1","slug":"improvements-over-vuepress-v1"},{"level":3,"title":"It Uses Vue 3","slug":"it-uses-vue-3"},{"level":3,"title":"It Uses Vite Under The Hood","slug":"it-uses-vite-under-the-hood"},{"level":3,"title":"Lighter Page Weight","slug":"lighter-page-weight"},{"level":2,"title":"Other Differences","slug":"other-differences"},{"level":2,"title":"Will This Become The Next VuePress in The Future?","slug":"will-this-become-the-next-vuepress-in-the-future"}],"relativePath":"index.md","lastUpdated":1652768268000}',a={},r=i("",23),o=[r];function n(l,h,u,d,p,c){return s(),t("div",null,o)}var f=e(a,[["render",n]]);export{v as __pageData,f as default};
+1
View File
@@ -0,0 +1 @@
import{_ as e,c as t,o as a}from"./app.61e847e1.js";const p='{"title":"Home","description":"","frontmatter":{"home":true,"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"\u54EA\u5412\u76D1\u63A7","tagline":"\u8F7B\u91CF\u7684\u81EA\u6258\u7BA1\u76D1\u63A7\u3001\u8FD0\u7EF4\u5DE5\u5177","actionText":"\u5F00\u59CB\u4F7F\u7528 \u2192","actionLink":"/guide/dashboard","features":[{"title":"\u7279\u60271","details":"\u7279\u60271\u7279\u60271\u7279\u60271"},{"title":"\u7279\u60272","details":"\u7279\u60272\u7279\u60272\u7279\u60272"},{"title":"\u7279\u60273","details":"\u7279\u60273\u7279\u60273\u7279\u60273"}],"footer":"Licence | Copyright \xA9 2022-present Nezhahq"},"headers":[],"relativePath":"index.md"}',r={};function o(i,n,s,c,d,h){return a(),t("div")}var m=e(r,[["render",o]]);export{p as __pageData,m as default};
Loaded 100 of 155 files, more files were not shown because too many files have changed in this diff. Show more