PageSourceSearch

https://nusr.github.io/search/

html nusr.github.io collected 2026-10-03 09:41:58 UTC 31,003 bytes, 181 lines download raw bytes

1<!DOCTYPE html><html lang="zh" class="false"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="canonical" href="https://nusr.github.io/search/"><meta name="generator" content="Astro v4.4.7"><!-- General Meta Tags --><title>Search | Steve Xu</title><meta name="title" content="Search | Steve Xu"><meta name="description" content="Welcome to My Blog"><meta name="author" content="Steve Xu"><!-- Open Graph / Facebook --><meta property="og:title" content="Search | Steve Xu"><meta property="og:description" content="Welcome to My Blog"><meta property="og:url" content="https://nusr.github.io/search/"><meta property="og:image" content="https://nusr.github.io/op.jpeg"><!-- Article Published/Modified time --><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://nusr.github.io/search/"><meta property="twitter:title" content="Search | Steve Xu"><meta property="twitter:description" content="Welcome to My Blog"><meta property="twitter:image" content="https://nusr.github.io/op.jpeg"><meta name="theme-color" content=""><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><link rel="stylesheet" href="/_astro/about.CXnmc6_F.css" />
2<style>#main-content:where(.astro-hsp6otuf){margin-left:auto;margin-right:auto;width:100%;max-width:48rem;padding-left:1rem;padding-right:1rem;padding-bottom:1rem}#main-content:where(.astro-hsp6otuf) h1:where(.astro-hsp6otuf){margin-top:1.5rem;font-size:1.5rem;line-height:2rem;font-weight:600}@media (min-width: 640px){#main-content:where(.astro-hsp6otuf) h1:where(.astro-hsp6otuf){font-size:1.875rem;line-height:2.25rem}}#main-content:where(.astro-hsp6otuf) p:where(.astro-hsp6otuf){margin-bottom:1.5rem;margin-top:.5rem}
3@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0}}@keyframes astroFadeOut{to{opacity:0}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}
4</style>
4<script type="module" src="/_astro/hoisted.B2MTPbHz.js"></script>
4</head> <body>  <header class="astro-3ef6ksr2"> <a id="skip-to-content" href="#main-content" class="astro-3ef6ksr2">Skip to content</a> <div class="nav-container astro-3ef6ksr2"> <div class="top-nav-wrap astro-3ef6ksr2"> <a href="/" class="logo whitespace-nowrap astro-3ef6ksr2"> Steve Xu </a> <nav id="nav-menu" class="astro-3ef6ksr2"> <button class="hamburger-menu focus-outline astro-3ef6ksr2" aria-label="Open Menu" aria-expanded="false" aria-controls="menu-items"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="menu-icon astro-3ef6ksr2"> <line x1="7" y1="12" x2="21" y2="12" class="line astro-3ef6ksr2"></line> <line x1="3" y1="6" x2="21" y2="6" class="line astro-3ef6ksr2"></line> <line x1="12" y1="18" x2="21" y2="18" class="line astro-3ef6ksr2"></line> <line x1="18" y1="6" x2="6" y2="18" class="close astro-3ef6ksr2"></line> <line x1="6" y1="6" x2="18" y2="18" class="close astro-3ef6ksr2"></line> </svg> </button> <ul id="menu-items" class="display-none sm:flex astro-3ef6ksr2"> <li class="astro-3ef6ksr2"> <a href="/" class=" astro-3ef6ksr2"> Home </a> </li> <li class="astro-3ef6ksr2"> <a href="/archives/" class=" astro-3ef6ksr2">
5Archives
6</a> </li> <li class="astro-3ef6ksr2"> <a href="/tags/" class=" astro-3ef6ksr2">
7Tags
8</a> </li> <li class="astro-3ef6ksr2"> <a href="/about/" class=" astro-3ef6ksr2">
9About
10</a> </li> <li class="astro-3ef6ksr2"> <a href="/search/" class="group inline-block hover:text-skin-accent focus-outline p-3 sm:p-1 active flex astro-3ef6ksr2" aria-label="search" title="Search" target="_self"> <svg xmlns="http://www.w3.org/2000/svg" class="scale-125 sm:scale-100 astro-3ef6ksr2"><path d="M19.023 16.977a35.13 35.13 0 0 1-1.367-1.384c-.372-.378-.596-.653-.596-.653l-2.8-1.337A6.962 6.962 0 0 0 16 9c0-3.859-3.14-7-7-7S2 5.141 2 9s3.14 7 7 7c1.763 0 3.37-.66 4.603-1.739l1.337 2.8s.275.224.653.596c.387.363.896.854 1.384 1.367l1.358 1.392.604.646 2.121-2.121-.646-.604c-.379-.372-.885-.866-1.391-1.36zM9 14c-2.757 0-5-2.243-5-5s2.243-5 5-5 5 2.243 5 5-2.243 5-5 5z" class="astro-3ef6ksr2"></path> </svg> <span class="sr-only astro-3ef6ksr2">Search</span> </a> </li> <li class="astro-3ef6ksr2"> <button id="theme-btn" class="focus-outline astro-3ef6ksr2" title="Toggles light & dark" aria-label="auto" aria-live="polite"> <svg xmlns="http://www.w3.org/2000/svg" id="moon-svg" class="astro-3ef6ksr2"> <path d="M20.742 13.045a8.088 8.088 0 0 1-2.077.271c-2.135 0-4.14-.83-5.646-2.336a8.025 8.025 0 0 1-2.064-7.723A1 1 0 0 0 9.73 2.034a10.014 10.014 0 0 0-4.489 2.582c-3.898 3.898-3.898 10.243 0 14.143a9.937 9.937 0 0 0 7.072 2.93 9.93 9.93 0 0 0 7.07-2.929 10.007 10.007 0 0 0 2.583-4.491 1.001 1.001 0 0 0-1.224-1.224zm-2.772 4.301a7.947 7.947 0 0 1-5.656 2.343 7.953 7.953 0 0 1-5.658-2.344c-3.118-3.119-3.118-8.195 0-11.314a7.923 7.923 0 0 1 2.06-1.483 10.027 10.027 0 0 0 2.89 7.848 9.972 9.972 0 0 0 7.848 2.891 8.036 8.036 0 0 1-1.484 2.059z" class="astro-3ef6ksr2"></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" id="sun-svg" class="astro-3ef6ksr2"> <path d="M6.993 12c0 2.761 2.246 5.007 5.007 5.007s5.007-2.246 5.007-5.007S14.761 6.993 12 6.993 6.993 9.239 6.993 12zM12 8.993c1.658 0 3.007 1.349 3.007 3.007S13.658 15.007 12 15.007 8.993 13.658 8.993 12 10.342 8.993 12 8.993zM10.998 19h2v3h-2zm0-17h2v3h-2zm-9 9h3v2h-3zm17 0h3v2h-3zM4.219 18.363l2.12-2.122 1.415 1.414-2.12 2.122zM16.24 6.344l2.122-2.122 1.414 1.414-2.122 2.122zM6.342 7.759 4.22 5.637l1.415-1.414 2.12 2.122zm13.434 10.605-1.414 1.414-2.122-2.122 1.414-1.414z" class="astro-3ef6ksr2"></path> </svg> </button> </li> </ul> </nav> </div> </div> <div class="mx-auto max-w-3xl px-4 astro-3ef6ksr2"> <hr class="border-skin-line astro-3ef6ksr2" aria-hidden> </div> </header>   <main id="main-content" class=" astro-hsp6otuf"> <h1 class="astro-hsp6otuf">Search</h1> <p class="astro-hsp6otuf">Search any article ...</p>  <style>astro-island,astro-slot,astro-static-slot{display:contents}</style>
10<script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();;(()=>{var v=Object.defineProperty;var A=(c,s,a)=>s in c?v(c,s,{enumerable:!0,configurable:!0,writable:!0,value:a}):c[s]=a;var d=(c,s,a)=>(A(c,typeof s!="symbol"?s+"":s,a),a);var u;{let c={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t)},s=t=>{let[e,n]=t;return e in c?c[e](n):void 0},a=t=>t.map(s),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([e,n])=>[e,s(n)]));customElements.get("astro-island")||customElements.define("astro-island",(u=class extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var f;if(!this.hydrator||!this.isConnected)return;let e=(f=this.parentElement)==null?void 0:f.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let n=this.querySelectorAll("astro-slot"),r={},l=this.querySelectorAll("template[data-astro-template]");for(let o of l){let i=o.closest(this.tagName);i!=null&&i.isSameNode(this)&&(r[o.getAttribute("data-astro-template")||"default"]=o.innerHTML,o.remove())}for(let o of n){let i=o.closest(this.tagName);i!=null&&i.isSameNode(this)&&(r[o.getAttribute("name")||"default"]=o.innerHTML)}let h;try{h=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(o){let i=this.getAttribute("component-url")||"<unknown>",b=this.getAttribute("component-export");throw b&&(i+=` (export ${b})`),console.error(`[hydrate] Error parsing props for component ${i}`,this.getAttribute("props"),o),o}let p;await this.hydrator(this)(this.Component,h,r,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),n.disconnect(),this.childrenConnectedCallback()},n=new MutationObserver(()=>{var r;((r=this.lastChild)==null?void 0:r.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});n.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),n=this.getAttribute("client");if(Astro[n]===void 0){window.addEventListener(`astro:${n}`,()=>this.start(),{once:!0});return}try{await Astro[n](async()=>{let r=this.getAttribute("renderer-url"),[l,{default:h}]=await Promise.all([import(this.getAttribute("component-url")),r?import(r):()=>()=>{}]),p=this.getAttribute("component-export")||"default";if(!p.includes("."))this.Component=l[p];else{this.Component=l;for(let y of p.split("."))this.Component=this.Component[y]}return this.hydrator=h,this.hydrate},e,this)}catch(r){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,r)}}attributeChangedCallback(){this.hydrate()}},d(u,"observedAttributes",["props"]),u))}})();</script>
10<astro-island uid="Z1D39oS" prefix="r0" component-url="/_astro/SearchBar.BbJkDkDz.js" component-export="default" renderer-url="/_astro/client.D9Vng9vH.js" props="{&quot;searchList&quot;:[1,[[0,{&quot;title&quot;:[0,&quot;使用 Jest 测试框架,实现 100% 的测试覆盖率&quot;],&quot;description&quot;:[0],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;使用 Jest 测试框架,实现 100% 的测试覆盖率&quot;],&quot;pubDate&quot;:[3,&quot;2024-04-07T00:00:00.000Z&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;Test&quot;],[0,&quot;Jest&quot;]]]}],&quot;slug&quot;:[0,&quot;jest-100-percent-coverage&quot;]}],[0,{&quot;title&quot;:[0,&quot;修复 Firebase 模拟器无法运行成功&quot;],&quot;description&quot;:[0,&quot;Firebase login&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;修复 Firebase 模拟器无法运行成功&quot;],&quot;pubDate&quot;:[3,&quot;2024-03-19T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;Firebase login&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;Firebase&quot;],[0,&quot;Proxy&quot;]]]}],&quot;slug&quot;:[0,&quot;firebase-login&quot;]}],[0,{&quot;title&quot;:[0,&quot;前端性能优化:SPA 页面秒开&quot;],&quot;description&quot;:[0,&quot;The SPA page opens in seconds&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;前端性能优化:SPA 页面秒开&quot;],&quot;pubDate&quot;:[3,&quot;2020-04-04T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;The SPA page opens in seconds&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;Performance&quot;]]]}],&quot;slug&quot;:[0,&quot;the-spa-page-opens-in-seconds&quot;]}],[0,{&quot;title&quot;:[0,&quot;适配 Dark Mode&quot;],&quot;description&quot;:[0,&quot;实现适配 Dark Mode 的方法&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;适配 Dark Mode&quot;],&quot;pubDate&quot;:[3,&quot;2019-12-22T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;实现适配 Dark Mode 的方法&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;CSS&quot;]]]}],&quot;slug&quot;:[0,&quot;how-to-apply-dark-mode&quot;]}],[0,{&quot;title&quot;:[0,&quot;使用 Create-React-App 开发 Chrome 扩展&quot;],&quot;description&quot;:[0,&quot;Use Create-React-App to develop Chrome extensions&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;使用 Create-React-App 开发 Chrome 扩展&quot;],&quot;pubDate&quot;:[3,&quot;2019-07-07T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;Use Create-React-App to develop Chrome extensions&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;React&quot;],[0,&quot;Chrome&quot;]]]}],&quot;slug&quot;:[0,&quot;develop-a-chrome-extension&quot;]}],[0,{&quot;title&quot;:[0,&quot;黑客不可不知的定律和法则&quot;],&quot;description&quot;:[0,&quot;hacker laws&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;黑客不可不知的定律和法则&quot;],&quot;pubDate&quot;:[3,&quot;2019-05-16T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;hacker laws&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;Hacker&quot;]]]}],&quot;slug&quot;:[0,&quot;hacker-laws-zh&quot;]}],[0,{&quot;title&quot;:[0,&quot;你再也不用使用 Redux、Mobx、Flux 等状态管理了&quot;],&quot;description&quot;:[0,&quot;You don&#39;t have to use React state management anymore&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;你再也不用使用 Redux、Mobx、Flux 等状态管理了&quot;],&quot;pubDate&quot;:[3,&quot;2019-05-08T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;You don&#39;t have to use React state management anymore&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;React&quot;]]]}],&quot;slug&quot;:[0,&quot;you-do-not-have-to-use-react-state-management-anymore&quot;]}],[0,{&quot;title&quot;:[0,&quot;博客使用 utterances 作为评论系统&quot;],&quot;description&quot;:[0,&quot;Bloggers use utterances as a commenting system&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;博客使用 utterances 作为评论系统&quot;],&quot;pubDate&quot;:[3,&quot;2019-05-04T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;Bloggers use utterances as a commenting system&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;Blog&quot;]]]}],&quot;slug&quot;:[0,&quot;utterances-as-a-commenting-system&quot;]}],[0,{&quot;title&quot;:[0,&quot;Hugo + Github Pages 搭建个人博客&quot;],&quot;description&quot;:[0,&quot;Hugo plus Github Pages set up a personal blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Hugo + Github Pages 搭建个人博客&quot;],&quot;pubDate&quot;:[3,&quot;2019-04-27T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;Hugo plus Github Pages set up a personal blog&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;Github Pages&quot;],[0,&quot;Blog&quot;]]]}],&quot;slug&quot;:[0,&quot;hugo-set-up-a-personal-blog&quot;]}],[0,{&quot;title&quot;:[0,&quot;解决 Mac launchpad 启动台 Gitter 图标无法删除的问题&quot;],&quot;description&quot;:[0,&quot;Resolves an issue where the Mac launchpad Gitter icon could not be deleted&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;解决 Mac launchpad 启动台 Gitter 图标无法删除的问题&quot;],&quot;pubDate&quot;:[3,&quot;2019-04-25T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;Resolves an issue where the Mac launchpad Gitter icon could not be deleted&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;Mac&quot;]]]}],&quot;slug&quot;:[0,&quot;mac-gitter-icon-could-not-be-deleted&quot;]}],[0,{&quot;title&quot;:[0,&quot;React 与 React-Native 使用同一个 meteor 后台&quot;],&quot;description&quot;:[0,&quot;React uses the same meteor backend as React-Native&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;React 与 React-Native 使用同一个 meteor 后台&quot;],&quot;pubDate&quot;:[3,&quot;2019-04-21T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;React uses the same meteor backend as React-Native&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;React&quot;],[0,&quot;React Native&quot;],[0,&quot;Meteor&quot;]]]}],&quot;slug&quot;:[0,&quot;meteor-as-a-backend&quot;]}],[0,{&quot;title&quot;:[0,&quot;一行命令更新所有 npm 依赖包&quot;],&quot;description&quot;:[0,&quot;A one-line command updates all npm dependencies&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;一行命令更新所有 npm 依赖包&quot;],&quot;pubDate&quot;:[3,&quot;2019-04-21T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;A one-line command updates all npm dependencies&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;NPM&quot;]]]}],&quot;slug&quot;:[0,&quot;updates-all-npm-dependencies&quot;]}],[0,{&quot;title&quot;:[0,&quot;vue cli 3.x 项目部署到 Github Pages&quot;],&quot;description&quot;:[0,&quot;The Vue CLI 3.x project is deployed to GitHub Pages&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;vue cli 3.x 项目部署到 Github Pages&quot;],&quot;pubDate&quot;:[3,&quot;2019-04-16T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;The Vue CLI 3.x project is deployed to GitHub Pages&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;Vue&quot;],[0,&quot;Github Pages&quot;]]]}],&quot;slug&quot;:[0,&quot;the-vue-cli-project-is-deployed-to-github-pages&quot;]}],[0,{&quot;title&quot;:[0,&quot;解决 macOS HomeBrew 下载缓慢的问题&quot;],&quot;description&quot;:[0,&quot;Resolves slow macOS HomeBrew downloads&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;解决 macOS HomeBrew 下载缓慢的问题&quot;],&quot;pubDate&quot;:[3,&quot;2019-04-13T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;Resolves slow macOS HomeBrew downloads&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;Proxy&quot;],[0,&quot;Mac&quot;]]]}],&quot;slug&quot;:[0,&quot;fix-home-brew-slow-downloads&quot;]}],[0,{&quot;title&quot;:[0,&quot;Vue/cli 3.0 使用 svg-sprite-loader 加载本地 SVG 文件&quot;],&quot;description&quot;:[0,&quot;Vue/cli 3.0 uses svg-sprite-loader to load local SVG files&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Vue/cli 3.0 使用 svg-sprite-loader 加载本地 SVG 文件&quot;],&quot;pubDate&quot;:[3,&quot;2019-04-03T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;Vue/cli 3.0 uses svg-sprite-loader to load local SVG files&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;Vue&quot;],[0,&quot;SVG&quot;]]]}],&quot;slug&quot;:[0,&quot;load-local-svg-files&quot;]}],[0,{&quot;title&quot;:[0,&quot;我为什么推荐你使用kindle&quot;],&quot;description&quot;:[0,&quot;Why I recommend you to use Kindle&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;我为什么推荐你使用kindle&quot;],&quot;pubDate&quot;:[3,&quot;2019-01-31T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;Why I recommend you to use Kindle&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;Reading&quot;],[0,&quot;Kindle&quot;]]]}],&quot;slug&quot;:[0,&quot;
10why-i-recommend-you-to-use-kindle&quot;]}],[0,{&quot;title&quot;:[0,&quot;Node.js 种子下载器&quot;],&quot;description&quot;:[0,&quot;Node.js torrent downloader&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Node.js 种子下载器&quot;],&quot;pubDate&quot;:[3,&quot;2018-10-11T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;Node.js torrent downloader&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;Node.js&quot;],[0,&quot;Downloader&quot;]]]}],&quot;slug&quot;:[0,&quot;nodejs-torrent-downloader&quot;]}],[0,{&quot;title&quot;:[0,&quot;Node.js 多版本安装&quot;],&quot;description&quot;:[0,&quot;Node.js Multi-version installation&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Node.js 多版本安装&quot;],&quot;pubDate&quot;:[3,&quot;2018-10-01T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;Node.js Multi-version installation&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;Node.js&quot;]]]}],&quot;slug&quot;:[0,&quot;nodejs-multi-version-installation&quot;]}],[0,{&quot;title&quot;:[0,&quot;解决 React-Native mac10.14.4 运行报错 error Failed to build iOS project&quot;],&quot;description&quot;:[0,&quot;Resolved the error message \&quot;Failed to build iOS project\&quot; when running React-Native mac10.14.4&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;解决 React-Native mac10.14.4 运行报错 error Failed to build iOS project&quot;],&quot;pubDate&quot;:[3,&quot;2018-02-24T00:00:00.000Z&quot;],&quot;description&quot;:[0,&quot;Resolved the error message \&quot;Failed to build iOS project\&quot; when running React-Native mac10.14.4&quot;],&quot;author&quot;:[0,&quot;Steve Xu&quot;],&quot;draft&quot;:[0,false],&quot;tags&quot;:[1,[[0,&quot;React Native&quot;],[0,&quot;Mac&quot;]]]}],&quot;slug&quot;:[0,&quot;failed-to-build-ios-project&quot;]}]]]}" ssr="" client="load" opts="{&quot;name&quot;:&quot;SearchBar&quot;,&quot;value&quot;:true}" await-children=""><label class="relative block"><span class="absolute inset-y-0 left-0 flex items-center pl-2 opacity-75"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M19.023 16.977a35.13 35.13 0 0 1-1.367-1.384c-.372-.378-.596-.653-.596-.653l-2.8-1.337A6.962 6.962 0 0 0 16 9c0-3.859-3.14-7-7-7S2 5.141 2 9s3.14 7 7 7c1.763 0 3.37-.66 4.603-1.739l1.337 2.8s.275.224.653.596c.387.363.896.854 1.384 1.367l1.358 1.392.604.646 2.121-2.121-.646-.604c-.379-.372-.885-.866-1.391-1.36zM9 14c-2.757 0-5-2.243-5-5s2.243-5 5-5 5 2.243 5 5-2.243 5-5 5z"></path></svg><span class="sr-only">Search</span></span><input class="block w-full rounded border border-skin-fill 
11        border-opacity-40 bg-skin-fill py-3 pl-10
12        pr-3 placeholder:italic placeholder:text-opacity-75 
13        focus:border-skin-accent focus:outline-none" placeholder="Search for anything..." type="text" name="search" autoComplete="off" value=""/></label><ul></ul><!--astro:end--></astro-island>  </main>  <footer class="mt-auto astro-sz7xmlte"> <div class="mx-auto max-w-3xl px-0 astro-sz7xmlte"> <hr class="border-skin-line astro-sz7xmlte" aria-hidden> </div> <div class="footer-wrapper astro-sz7xmlte"> <div class="social-icons flex astro-xfej6wit"> <a href="https://github.com/nusr/nusr.github.io" class="group inline-block hover:text-skin-accent link-button astro-xfej6wit" title="Steve Xu on Github" target="_blank"> <svg viewBox="0 0 16 16" aria-hidden="true" width="32" height="32" astro-icon="social/github"><path
14    fill="currentColor"
15    d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"
16  ></path></svg> <span class="sr-only astro-xfej6wit">Steve Xu on Github</span> </a>
16<a href="/rss.xml" class="group inline-block hover:text-skin-accent link-button astro-xfej6wit" title="Steve Xu RSS" target="_blank">  <svg viewBox="0 0 1024 1024" aria-hidden="true" width="32" height="32"><path
17    fill="currentColor"
18    d="M42.666667 853.333333a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m938.666666 128h-178.773333c0-418.986667-340.906667-759.893333-759.893333-759.893333V42.666667c517.546667 0 938.666667 421.12 938.666666 938.666666z m-298.666666 0h-182.826667c0-252.074667-205.098667-457.130667-457.173333-457.130666V341.333333c352.896 0 640 287.104 640 640z"></path></svg> <span class="sr-only astro-xfej6wit">Steve Xu RSS</span> </a><a href="https://twitter.com/stevenusr" class="group inline-block hover:text-skin-accent link-button astro-xfej6wit" title="Steve Xu on Twitter" target="_blank"> <svg
19      xmlns="http://www.w3.org/2000/svg"
20      class="icon-tabler"
21      stroke-linecap="round"
22      stroke-linejoin="round"
23    >
24      <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
25      <path d="M22 4.01c-1 .49 -1.98 .689 -3 .99c-1.121 -1.265 -2.783 -1.335 -4.38 -.737s-2.643 2.06 -2.62 3.737v1c-3.245 .083 -6.135 -1.395 -8 -4c0 0 -4.182 7.433 4 11c-1.872 1.247 -3.739 2.088 -6 2c3.308 1.803 6.913 2.423 10.034 1.517c3.58 -1.04 6.522 -3.723 7.651 -7.742a13.84 13.84 0 0 0 .497 -3.753c-.002 -.249 1.51 -2.772 1.818 -4.013z"></path>
26    </svg> <span class="sr-only astro-xfej6wit">Steve Xu on Twitter</span> </a><a href="mailto:[email protected]" class="group inline-block hover:text-skin-accent link-button astro-xfej6wit" title="Send an email to Steve Xu" target="_blank"> <svg
27      xmlns="http://www.w3.org/2000/svg"
28      class="icon-tabler"
29      stroke-linecap="round"
30      stroke-linejoin="round"
31    >
32      <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
33      <rect x="3" y="5" width="18" height="14" rx="2"></rect>
34      <polyline points="3 7 12 13 21 7"></polyline>
35    </svg> <span class="sr-only astro-xfej6wit">Send an email to Steve Xu</span> </a> </div>  <div class="copyright-wrapper astro-sz7xmlte"> <span class="astro-sz7xmlte">Copyright &#169; 2024</span> <span class="separator astro-sz7xmlte">&nbsp;|&nbsp;</span> <span class="astro-sz7xmlte">All rights reserved.</span> <span class="separator astro-sz7xmlte">&nbsp;|&nbsp;</span> <span class="astro-sz7xmlte">Powered by <a href="https://astro.build" target="_blank" class="astro-sz7xmlte">Astro</a></span> </div> </div> </footer>   
35<script src="/toggle-theme.js" async></script>
35 
35<script async src="https://www.google-analytics.com/analytics.js"></script>
35 
35<script async>(function(){const id = "UA-138883536-1";
36
37  window.ga =
38    window.ga ||
39    function () {
40      (window.ga.q = window.ga.q || []).push(arguments);
41    };
42  window.ga.l = +new Date();
43  window.ga("create", id, "auto");
44  window.ga("set", "anonymizeIp", true);
45  window.ga("send", "pageview");
46})();</script>
46 
46<script async>(function(){const apiKey = "da1a9b67ea6a904027cfc8b581c0086c";
47
48  !(function () {
49    "use strict";
50    !(function (e, t) {
51      var n = e.amplitude || { _q: [], _iq: {} };
52      if (n.invoked)
53        e.console &&
54          console.error &&
55          console.error("Amplitude snippet has been loaded.");
56      else {
57        var r = function (e, t) {
58            e.prototype[t] = function () {
59              return (
60                this._q.push({
61                  name: t,
62                  args: Array.prototype.slice.call(arguments, 0),
63                }),
64                this
65              );
66            };
67          },
68          s = function (e, t, n) {
69            return function (r) {
70              e._q.push({
71                name: t,
72                args: Array.prototype.slice.call(n, 0),
73                resolve: r,
74              });
75            };
76          },
77          o = function (e, t, n) {
78            e[t] = function () {
79              if (n)
80                return {
81                  promise: new Promise(
82                    s(e, t, Array.prototype.slice.call(arguments)),
83                  ),
84                };
85            };
86          },
87          i = function (e) {
88            for (var t = 0; t < m.length; t++) o(e, m[t], !1);
89            for (var n = 0; n < g.length; n++) o(e, g[n], !0);
90          };
91        n.invoked = !0;
92        var u = t.createElement("script");
93        (u.type = "text/javascript"),
94          (u.integrity =
95            "sha384-x0ik2D45ZDEEEpYpEuDpmj05fY91P7EOZkgdKmq4dKL/ZAVcufJ+nULFtGn0HIZE"),
96          (u.crossOrigin = "anonymous"),
97          (u.async = !0),
98          (u.src =
99            "https://cdn.amplitude.com/libs/analytics-browser-2.0.0-min.js.gz"),
100          (u.onload = function () {
101            e.amplitude.runQueuedFunctions ||
102              console.log("[Amplitude] Error: could not load SDK");
103          });
104        var a = t.getElementsByTagName("script")[0];
105        a.parentNode.insertBefore(u, a);
106        for (
107          var c = function () {
108              return (this._q = []), this;
109            },
110            p = [
111              "add",
112              "append",
113              "clearAll",
114              "prepend",
115              "set",
116              "setOnce",
117              "unset",
118              "preInsert",
119              "postInsert",
120              "remove",
121              "getUserProperties",
122            ],
123            l = 0;
124          l < p.length;
125          l++
126        )
127          r(c, p[l]);
128        n.Identify = c;
129        for (
130          var d = function () {
131              return (this._q = []), this;
132            },
133            f = [
134              "getEventProperties",
135              "setProductId",
136              "setQuantity",
137              "setPrice",
138              "setRevenue",
139              "setRevenueType",
140              "setEventProperties",
141            ],
142            v = 0;
143          v < f.length;
144          v++
145        )
146          r(d, f[v]);
147        n.Revenue = d;
148        var m = [
149            "getDeviceId",
150            "setDeviceId",
151            "getSessionId",
152            "setSessionId",
153            "getUserId",
154            "setUserId",
155            "setOptOut",
156            "setTransport",
157            "reset",
158            "extendSession",
159          ],
160          g = [
161            "init",
162            "add",
163            "remove",
164            "track",
165            "logEvent",
166            "identify",
167            "groupIdentify",
168            "setGroup",
169            "revenue",
170            "flush",
171          ];
172        i(n),
173          (n.createInstance = function (e) {
174            return (n._iq[e] = { _q: [] }), i(n._iq[e]), n._iq[e];
175          }),
176          (e.amplitude = n);
177      }
178    })(window, document);
179  })();
180  window.amplitude.init(apiKey);
181})();</script>
181 
181<script defer src="https://eu.umami.is/script.js" data-website-id="6ca6aa2c-2898-47e1-8747-6c29b3c1626c"></script>
181 </body> </html>

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