[{"data":1,"prerenderedAt":1378},["ShallowReactive",2],{"post:\u002Fposts\u002F2021\u002Fgithub-actions":3,"posts:catalog":1104},{"id":4,"title":5,"aiSummary":6,"audio":7,"body":8,"categories":1087,"cover":1089,"description":1090,"extension":1091,"meta":1092,"navigation":6,"path":1093,"pin":1094,"publish":1095,"seo":1096,"series":7,"seriesOrder":7,"stem":1097,"summary":7,"summarySource":1098,"tags":1099,"theme":1100,"update":7,"wip":1101,"wordCount":1102,"__hash__":1103},"posts\u002Fposts\u002F2021\u002Fgithub-actions.md","使用Github Action实现全自动部署",true,null,{"type":9,"value":10,"toc":1072},"minimark",[11,26,31,36,46,49,52,158,162,167,196,200,218,224,230,236,241,244,251,257,263,269,281,284,290,295,298,301,391,395,398,871,874,877,883,940,943,949,952,1062,1065,1068],[12,13,14],"blockquote",{},[15,16,17,18,25],"p",{},"本文内容参考自",[19,20,24],"a",{"href":21,"rel":22},"https:\u002F\u002Fakilar.top\u002Fposts\u002Ff752c86d\u002F",[23],"nofollow","akilar",", 建议前往原文阅览更详细的教程。",[27,28,30],"h1",{"id":29},"github-actions-简介","GitHub Actions 简介",[12,32,33],{},[15,34,35],{},"在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业（包括 CI\u002FCD），并将操作合并到完全自定义的工作流程中。",[15,37,38,42,43],{},[39,40,41],"code",{},"hexo clean"," ",[39,44,45],{},"hexo g -d",[15,47,48],{},"每次写文后部署Hexo都需要运行这几个指令，文章少还好，文章多起来之后，编译的时间也会随之增加。通过GitHub Action，就可以省略自己输指令部署，将改动推送到远程仓库后，其他的任务交给CI就好。",[27,50,51],{"id":51},"所需常量声明",[53,54,55,68],"table",{},[56,57,58],"thead",{},[59,60,61,65],"tr",{},[62,63,64],"th",{},"常量名",[62,66,67],{},"常量释义",[69,70,71,83,93,110,124,138,148],"tbody",{},[59,72,73,80],{},[74,75,76],"td",{},[77,78,79],"span",{},"Blogroot",[74,81,82],{},"本地存放博客源码的文件夹路径",[59,84,85,90],{},[74,86,87],{},[77,88,89],{},"SourceRepo",[74,91,92],{},"存放博客源码的私有仓库名",[59,94,95,100],{},[74,96,97],{},[77,98,99],{},"SiteBlogRepo",[74,101,102,103,106,107,109],{},"存放编译好的博客页面的公有仓库名",[104,105],"br",{},"Site 指站点，教程中会替换成",[104,108],{},"Github、Gitee、Coding",[59,111,112,117],{},[74,113,114],{},[77,115,116],{},"SiteUsername",[74,118,119,120,106,122,109],{},"用户名",[104,121],{},[104,123],{},[59,125,126,131],{},[74,127,128],{},[77,129,130],{},"SiteToken",[74,132,133,134,106,136,109],{},"申请到的令牌码",[104,135],{},[104,137],{},[59,139,140,145],{},[74,141,142],{},[77,143,144],{},"GithubEmail",[74,146,147],{},"与 github 绑定的主邮箱，建议使用 Gmail",[59,149,150,155],{},[74,151,152],{},[77,153,154],{},"TokenUser",[74,156,157],{},"Coding 配置特有的令牌用户名",[27,159,161],{"id":160},"github-action-快速开始","GitHub Action 快速开始",[163,164,166],"h2",{"id":165},"获取token","获取Token",[15,168,169,170,173,174,176,177,180,181,184,185,188,189,192,193,195],{},"为了确保交由 ",[39,171,172],{},"Github Action"," 来持续部署时，",[39,175,172],{}," 具备足够的权限来进行 ",[39,178,179],{},"hexo deploy"," 操作，需要先获取 ",[39,182,183],{},"Token","，博主分别在 ",[39,186,187],{},"Github","、",[39,190,191],{},"Coding"," 处部署了静态页面，所以也就需要获取这两处的 ",[39,194,183],{},"。",[197,198,187],"h3",{"id":199},"github",[15,201,202,203,208,209,217],{},"访问 ",[19,204,207],{"href":205,"rel":206},"https:\u002F\u002Fgithub.com\u002Fsettings\u002Ftokens",[23],"Github-> 头像（右上角）->Settings->Developer Settings->Personal access tokens","->\n",[19,210,212],{"href":205,"rel":211},[23],[213,214],"img",{"alt":215,"src":216},"Generate new token","\u002Fimages\u002F2021\u002Fgithub-actions\u002Fgithub-actions-1.svg","，名称随意起，但必须勾选repo项。",[15,219,220],{},[213,221],{"alt":222,"src":223},"img1","\u002Fimages\u002F2021\u002Fgithub-actions\u002Fgithub-actions-2.png",[15,225,226],{},[213,227],{"alt":228,"src":229},"img2","\u002Fimages\u002F2021\u002Fgithub-actions\u002Fgithub-actions-3.png",[15,231,232],{},[213,233],{"alt":234,"src":235},"img3","\u002Fimages\u002F2021\u002Fgithub-actions\u002Fgithub-actions-4.png",[12,237,238],{},[15,239,240],{},"Token只会显示一次，之后无法查看，请务必记下来，若丢失则只能重新生成Token码重新配置。",[197,242,191],{"id":243},"coding",[15,245,202,246,195],{},[19,247,250],{"href":248,"rel":249},"https:\u002F\u002Fcoding.net\u002F",[23],"Coding-> 头像（右上角）-> 个人账户设置 -> 访问令牌 -> 新建令牌",[15,252,253],{},[213,254],{"alt":255,"src":256},"img4","\u002Fimages\u002F2021\u002Fgithub-actions\u002Fgithub-actions-5.png",[15,258,259],{},[213,260],{"alt":261,"src":262},"img5","\u002Fimages\u002F2021\u002Fgithub-actions\u002Fgithub-actions-6.png",[15,264,265],{},[213,266],{"alt":267,"src":268},"img6","\u002Fimages\u002F2021\u002Fgithub-actions\u002Fgithub-actions-7.png",[12,270,271],{},[15,272,273,274,280],{},"Coding还需要配置",[275,276,277,278],"strong",{},"令牌用户名",[77,279,154],{},"，同GitHub一样，Token码只会出现一次。",[163,282,283],{"id":283},"创建存放源码的私有仓库",[15,285,286,287,289],{},"我们需要创建一个私有仓库",[77,288,89],{},"用来存放Hexo博客源码，创建完成后，需要把源码push到仓库中。首先获取远程仓库地址，此处虽然SSH和HTTPS均可。SSH在绑定过sshkey的设备上无需再输入密码，HTTPS则需要输入密码，但是SSH偶尔会遇到端口占用的情况。请自主选择。",[12,291,292],{},[15,293,294],{},"之所以是私有仓库，是因为配置中会写有Token，别人拿到Token可以随意操作你的github仓库内容。",[163,296,297],{"id":297},"配置deploy项",[15,299,300],{},"打开站点配置文件_config.yml,找到deploy配置项，使用之前生成的Token和各个站点仓库推送地址。",[302,303,308],"pre",{"className":304,"code":305,"language":306,"meta":307,"style":307},"language-yaml shiki shiki-themes catppuccin-mocha catppuccin-latte","deploy:\n  type: git\n  repo:\n    gitHub: https:\u002F\u002F[GithubUsername]:[GithubToken]@github.com\u002F[GithubUsername]\u002F[GithubBlogRepo].git\n    gitee: https:\u002F\u002F[GiteeUsername]:[GiteeToken]@gitee.com\u002F[GiteeUsername]\u002F[GiteeBlogRepo].git\n    coding: https:\u002F\u002F[TokenUser]:[CodingToken]@e.coding.net\u002F[CodingUsername]\u002F[CodingBlogRepo].git\n  branch: master #2020年10月后github新建仓库默认分支改为main，注意更改\n","yaml","",[39,309,310,322,335,343,354,365,376],{"__ignoreMap":307},[77,311,314,318],{"class":312,"line":313},"line",1,[77,315,317],{"class":316},"sZBvu","deploy",[77,319,321],{"class":320},"siJSA",":\n",[77,323,325,328,331],{"class":312,"line":324},2,[77,326,327],{"class":316},"  type",[77,329,330],{"class":320},":",[77,332,334],{"class":333},"ssZzq"," git\n",[77,336,338,341],{"class":312,"line":337},3,[77,339,340],{"class":316},"  repo",[77,342,321],{"class":320},[77,344,346,349,351],{"class":312,"line":345},4,[77,347,348],{"class":316},"    gitHub",[77,350,330],{"class":320},[77,352,353],{"class":333}," https:\u002F\u002F[GithubUsername]:[GithubToken]@github.com\u002F[GithubUsername]\u002F[GithubBlogRepo].git\n",[77,355,357,360,362],{"class":312,"line":356},5,[77,358,359],{"class":316},"    gitee",[77,361,330],{"class":320},[77,363,364],{"class":333}," https:\u002F\u002F[GiteeUsername]:[GiteeToken]@gitee.com\u002F[GiteeUsername]\u002F[GiteeBlogRepo].git\n",[77,366,368,371,373],{"class":312,"line":367},6,[77,369,370],{"class":316},"    coding",[77,372,330],{"class":320},[77,374,375],{"class":333}," https:\u002F\u002F[TokenUser]:[CodingToken]@e.coding.net\u002F[CodingUsername]\u002F[CodingBlogRepo].git\n",[77,377,379,382,384,387],{"class":312,"line":378},7,[77,380,381],{"class":316},"  branch",[77,383,330],{"class":320},[77,385,386],{"class":333}," master",[77,388,390],{"class":389},"s0D_2"," #2020年10月后github新建仓库默认分支改为main，注意更改\n",[163,392,394],{"id":393},"配置github-action","配置GitHub Action",[15,396,397],{},"在Hexo根目录新建 .github 文件夹，注意前面有个.的。然后在.github内新建workflows文件夹，在workflows文件夹内新建autodeploy.yml,在此yml文件内输入",[302,399,401],{"className":304,"code":400,"language":306,"meta":307,"style":307},"# 当有改动推送到master分支时，启动Action\nname: 自动部署\n\non:\n  push:\n    branches:\n      - master #2020年10月后github新建仓库默认分支改为main，注意更改\n\n  release:\n    types:\n      - published\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n    - name: 检查分支\n      uses: actions\u002Fcheckout@v2\n      with:\n        ref: master #2020年10月后github新建仓库默认分支改为main，注意更改\n\n    - name: 安装 Node\n      uses: actions\u002Fsetup-node@v1\n      with:\n        node-version: \"12.x\"\n\n    - name: 安装 Hexo\n      run: |\n        export TZ='Asia\u002FShanghai'\n        npm install hexo-cli -g\n\n    - name: 缓存 Hexo\n      uses: actions\u002Fcache@v1\n      id: cache\n      with:\n        path: node_modules\n        key: ${{runner.OS}}-${{hashFiles('**\u002Fpackage-lock.json')}}\n\n    - name: 安装依赖\n      if: steps.cache.outputs.cache-hit != 'true'\n      run: |\n        npm install --save\n\n    - name: 生成静态文件\n      run: |\n        hexo clean\n        hexo generate\n\n    - name: 部署\n      run: |\n        git config --global user.name \"[GithubUsername]\"\n        git config --global user.email \"elpsycongri@qq.com\"\n        git clone https:\u002F\u002Fgithub.com\u002F[GithubUsername]\u002F[GithubBlogRepo].git .deploy_git\n        # 此处务必用HTTPS链接。SSH链接可能有权限报错的隐患\n        # =====注意.deploy_git前面有个空格=====\n        # 这行指令的目的是clone博客静态文件仓库，防止Hexo推送时覆盖整个静态文件仓库，而是只推送有更改的文件\n        hexo deploy\n",[39,402,403,408,418,423,431,438,445,455,460,468,476,484,489,497,505,516,524,538,549,557,569,574,586,596,603,614,619,631,643,649,655,660,672,682,693,700,711,722,727,739,750,759,765,770,782,791,797,803,808,820,829,835,841,847,853,859,865],{"__ignoreMap":307},[77,404,405],{"class":312,"line":313},[77,406,407],{"class":389},"# 当有改动推送到master分支时，启动Action\n",[77,409,410,413,415],{"class":312,"line":324},[77,411,412],{"class":316},"name",[77,414,330],{"class":320},[77,416,417],{"class":333}," 自动部署\n",[77,419,420],{"class":312,"line":337},[77,421,422],{"emptyLinePlaceholder":6},"\n",[77,424,425,429],{"class":312,"line":345},[77,426,428],{"class":427},"s_wmW","on",[77,430,321],{"class":320},[77,432,433,436],{"class":312,"line":356},[77,434,435],{"class":316},"  push",[77,437,321],{"class":320},[77,439,440,443],{"class":312,"line":367},[77,441,442],{"class":316},"    branches",[77,444,321],{"class":320},[77,446,447,451,453],{"class":312,"line":378},[77,448,450],{"class":449},"sxk1D","      -",[77,452,386],{"class":333},[77,454,390],{"class":389},[77,456,458],{"class":312,"line":457},8,[77,459,422],{"emptyLinePlaceholder":6},[77,461,463,466],{"class":312,"line":462},9,[77,464,465],{"class":316},"  release",[77,467,321],{"class":320},[77,469,471,474],{"class":312,"line":470},10,[77,472,473],{"class":316},"    types",[77,475,321],{"class":320},[77,477,479,481],{"class":312,"line":478},11,[77,480,450],{"class":449},[77,482,483],{"class":333}," published\n",[77,485,487],{"class":312,"line":486},12,[77,488,422],{"emptyLinePlaceholder":6},[77,490,492,495],{"class":312,"line":491},13,[77,493,494],{"class":316},"jobs",[77,496,321],{"class":320},[77,498,500,503],{"class":312,"line":499},14,[77,501,502],{"class":316},"  deploy",[77,504,321],{"class":320},[77,506,508,511,513],{"class":312,"line":507},15,[77,509,510],{"class":316},"    runs-on",[77,512,330],{"class":320},[77,514,515],{"class":333}," ubuntu-latest\n",[77,517,519,522],{"class":312,"line":518},16,[77,520,521],{"class":316},"    steps",[77,523,321],{"class":320},[77,525,527,530,533,535],{"class":312,"line":526},17,[77,528,529],{"class":449},"    -",[77,531,532],{"class":316}," name",[77,534,330],{"class":320},[77,536,537],{"class":333}," 检查分支\n",[77,539,541,544,546],{"class":312,"line":540},18,[77,542,543],{"class":316},"      uses",[77,545,330],{"class":320},[77,547,548],{"class":333}," actions\u002Fcheckout@v2\n",[77,550,552,555],{"class":312,"line":551},19,[77,553,554],{"class":316},"      with",[77,556,321],{"class":320},[77,558,560,563,565,567],{"class":312,"line":559},20,[77,561,562],{"class":316},"        ref",[77,564,330],{"class":320},[77,566,386],{"class":333},[77,568,390],{"class":389},[77,570,572],{"class":312,"line":571},21,[77,573,422],{"emptyLinePlaceholder":6},[77,575,577,579,581,583],{"class":312,"line":576},22,[77,578,529],{"class":449},[77,580,532],{"class":316},[77,582,330],{"class":320},[77,584,585],{"class":333}," 安装 Node\n",[77,587,589,591,593],{"class":312,"line":588},23,[77,590,543],{"class":316},[77,592,330],{"class":320},[77,594,595],{"class":333}," actions\u002Fsetup-node@v1\n",[77,597,599,601],{"class":312,"line":598},24,[77,600,554],{"class":316},[77,602,321],{"class":320},[77,604,606,609,611],{"class":312,"line":605},25,[77,607,608],{"class":316},"        node-version",[77,610,330],{"class":320},[77,612,613],{"class":333}," \"12.x\"\n",[77,615,617],{"class":312,"line":616},26,[77,618,422],{"emptyLinePlaceholder":6},[77,620,622,624,626,628],{"class":312,"line":621},27,[77,623,529],{"class":449},[77,625,532],{"class":316},[77,627,330],{"class":320},[77,629,630],{"class":333}," 安装 Hexo\n",[77,632,634,637,639],{"class":312,"line":633},28,[77,635,636],{"class":316},"      run",[77,638,330],{"class":320},[77,640,642],{"class":641},"sDkzg"," |\n",[77,644,646],{"class":312,"line":645},29,[77,647,648],{"class":333},"        export TZ='Asia\u002FShanghai'\n",[77,650,652],{"class":312,"line":651},30,[77,653,654],{"class":333},"        npm install hexo-cli -g\n",[77,656,658],{"class":312,"line":657},31,[77,659,422],{"emptyLinePlaceholder":6},[77,661,663,665,667,669],{"class":312,"line":662},32,[77,664,529],{"class":449},[77,666,532],{"class":316},[77,668,330],{"class":320},[77,670,671],{"class":333}," 缓存 Hexo\n",[77,673,675,677,679],{"class":312,"line":674},33,[77,676,543],{"class":316},[77,678,330],{"class":320},[77,680,681],{"class":333}," actions\u002Fcache@v1\n",[77,683,685,688,690],{"class":312,"line":684},34,[77,686,687],{"class":316},"      id",[77,689,330],{"class":320},[77,691,692],{"class":333}," cache\n",[77,694,696,698],{"class":312,"line":695},35,[77,697,554],{"class":316},[77,699,321],{"class":320},[77,701,703,706,708],{"class":312,"line":702},36,[77,704,705],{"class":316},"        path",[77,707,330],{"class":320},[77,709,710],{"class":333}," node_modules\n",[77,712,714,717,719],{"class":312,"line":713},37,[77,715,716],{"class":316},"        key",[77,718,330],{"class":320},[77,720,721],{"class":333}," ${{runner.OS}}-${{hashFiles('**\u002Fpackage-lock.json')}}\n",[77,723,725],{"class":312,"line":724},38,[77,726,422],{"emptyLinePlaceholder":6},[77,728,730,732,734,736],{"class":312,"line":729},39,[77,731,529],{"class":449},[77,733,532],{"class":316},[77,735,330],{"class":320},[77,737,738],{"class":333}," 安装依赖\n",[77,740,742,745,747],{"class":312,"line":741},40,[77,743,744],{"class":316},"      if",[77,746,330],{"class":320},[77,748,749],{"class":333}," steps.cache.outputs.cache-hit != 'true'\n",[77,751,753,755,757],{"class":312,"line":752},41,[77,754,636],{"class":316},[77,756,330],{"class":320},[77,758,642],{"class":641},[77,760,762],{"class":312,"line":761},42,[77,763,764],{"class":333},"        npm install --save\n",[77,766,768],{"class":312,"line":767},43,[77,769,422],{"emptyLinePlaceholder":6},[77,771,773,775,777,779],{"class":312,"line":772},44,[77,774,529],{"class":449},[77,776,532],{"class":316},[77,778,330],{"class":320},[77,780,781],{"class":333}," 生成静态文件\n",[77,783,785,787,789],{"class":312,"line":784},45,[77,786,636],{"class":316},[77,788,330],{"class":320},[77,790,642],{"class":641},[77,792,794],{"class":312,"line":793},46,[77,795,796],{"class":333},"        hexo clean\n",[77,798,800],{"class":312,"line":799},47,[77,801,802],{"class":333},"        hexo generate\n",[77,804,806],{"class":312,"line":805},48,[77,807,422],{"emptyLinePlaceholder":6},[77,809,811,813,815,817],{"class":312,"line":810},49,[77,812,529],{"class":449},[77,814,532],{"class":316},[77,816,330],{"class":320},[77,818,819],{"class":333}," 部署\n",[77,821,823,825,827],{"class":312,"line":822},50,[77,824,636],{"class":316},[77,826,330],{"class":320},[77,828,642],{"class":641},[77,830,832],{"class":312,"line":831},51,[77,833,834],{"class":333},"        git config --global user.name \"[GithubUsername]\"\n",[77,836,838],{"class":312,"line":837},52,[77,839,840],{"class":333},"        git config --global user.email \"elpsycongri@qq.com\"\n",[77,842,844],{"class":312,"line":843},53,[77,845,846],{"class":333},"        git clone https:\u002F\u002Fgithub.com\u002F[GithubUsername]\u002F[GithubBlogRepo].git .deploy_git\n",[77,848,850],{"class":312,"line":849},54,[77,851,852],{"class":333},"        # 此处务必用HTTPS链接。SSH链接可能有权限报错的隐患\n",[77,854,856],{"class":312,"line":855},55,[77,857,858],{"class":333},"        # =====注意.deploy_git前面有个空格=====\n",[77,860,862],{"class":312,"line":861},56,[77,863,864],{"class":333},"        # 这行指令的目的是clone博客静态文件仓库，防止Hexo推送时覆盖整个静态文件仓库，而是只推送有更改的文件\n",[77,866,868],{"class":312,"line":867},57,[77,869,870],{"class":333},"        hexo deploy\n",[163,872,873],{"id":873},"重新设置远程仓库和分支",[197,875,876],{"id":876},"添加屏蔽项",[15,878,879,880,882],{},"能够使用指令进行安装的内容不包括在需要提交的源码内，\n这样可以显著减少需要提交的文件量和加快提交速度。\n打开 ",[77,881,79],{},"\u002F.gitignore, 输入以下内容：",[302,884,888],{"className":885,"code":886,"language":887,"meta":307,"style":307},"language-TXT shiki shiki-themes catppuccin-mocha catppuccin-latte",".DS_Store\nThumbs.db\ndb.json\n*.log\nnode_modules\u002F\npublic\u002F\n.deploy*\u002F\n.deploy_git*\u002F\n.idea\nthemes\u002Fbutterfly\u002F.git\n","TXT",[39,889,890,895,900,905,910,915,920,925,930,935],{"__ignoreMap":307},[77,891,892],{"class":312,"line":313},[77,893,894],{},".DS_Store\n",[77,896,897],{"class":312,"line":324},[77,898,899],{},"Thumbs.db\n",[77,901,902],{"class":312,"line":337},[77,903,904],{},"db.json\n",[77,906,907],{"class":312,"line":345},[77,908,909],{},"*.log\n",[77,911,912],{"class":312,"line":356},[77,913,914],{},"node_modules\u002F\n",[77,916,917],{"class":312,"line":367},[77,918,919],{},"public\u002F\n",[77,921,922],{"class":312,"line":378},[77,923,924],{},".deploy*\u002F\n",[77,926,927],{"class":312,"line":457},[77,928,929],{},".deploy_git*\u002F\n",[77,931,932],{"class":312,"line":462},[77,933,934],{},".idea\n",[77,936,937],{"class":312,"line":470},[77,938,939],{},"themes\u002Fbutterfly\u002F.git\n",[15,941,942],{},"注意：如果不是butterfly主题，最后一行内容需要替换为当前使用的主题",[197,944,946,947],{"id":945},"提交源码到私有仓库sourcerepo","提交源码到私有仓库",[77,948,89],{},[15,950,951],{},"在博客根目录下启动终端，使用git指令重设仓库地址。这样在新建仓库，我们仍旧可以保留珍贵的 commit history，便于版本回滚。",[302,953,957],{"className":954,"code":955,"language":956,"meta":307,"style":307},"language-BASH shiki shiki-themes catppuccin-mocha catppuccin-latte","git remote rm origin # 删除原有仓库链接\ngit remote add origin git@github.com:[GithubUsername]\u002F[SourceRepo].git #[SourceRepo]为新的存放源码的github私有仓库\ngit checkout -b master # 切换到master分支，\n#2020年10月后github新建仓库默认分支改为main，注意更改\n# 如果不是，后面的所有设置的分支记得保持一致\n# 2020年10月以后，新建仓库的默认分支换成main\ngit add .\ngit commit -m \"github action update\"\ngit push origin master\n#2020年10月后github新建仓库默认分支改为main，注意更改\n","BASH",[39,958,959,977,994,1009,1014,1019,1024,1033,1046,1058],{"__ignoreMap":307},[77,960,961,965,968,971,974],{"class":312,"line":313},[77,962,964],{"class":963},"s3Fsb","git",[77,966,967],{"class":333}," remote",[77,969,970],{"class":333}," rm",[77,972,973],{"class":333}," origin",[77,975,976],{"class":389}," # 删除原有仓库链接\n",[77,978,979,981,983,986,988,991],{"class":312,"line":324},[77,980,964],{"class":963},[77,982,967],{"class":333},[77,984,985],{"class":333}," add",[77,987,973],{"class":333},[77,989,990],{"class":333}," git@github.com:[GithubUsername]\u002F[SourceRepo].git",[77,992,993],{"class":389}," #[SourceRepo]为新的存放源码的github私有仓库\n",[77,995,996,998,1001,1004,1006],{"class":312,"line":337},[77,997,964],{"class":963},[77,999,1000],{"class":333}," checkout",[77,1002,1003],{"class":333}," -b",[77,1005,386],{"class":333},[77,1007,1008],{"class":389}," # 切换到master分支，\n",[77,1010,1011],{"class":312,"line":345},[77,1012,1013],{"class":389},"#2020年10月后github新建仓库默认分支改为main，注意更改\n",[77,1015,1016],{"class":312,"line":356},[77,1017,1018],{"class":389},"# 如果不是，后面的所有设置的分支记得保持一致\n",[77,1020,1021],{"class":312,"line":367},[77,1022,1023],{"class":389},"# 2020年10月以后，新建仓库的默认分支换成main\n",[77,1025,1026,1028,1030],{"class":312,"line":378},[77,1027,964],{"class":963},[77,1029,985],{"class":333},[77,1031,1032],{"class":333}," .\n",[77,1034,1035,1037,1040,1043],{"class":312,"line":457},[77,1036,964],{"class":963},[77,1038,1039],{"class":333}," commit",[77,1041,1042],{"class":333}," -m",[77,1044,1045],{"class":333}," \"github action update\"\n",[77,1047,1048,1050,1053,1055],{"class":312,"line":462},[77,1049,964],{"class":963},[77,1051,1052],{"class":333}," push",[77,1054,973],{"class":333},[77,1056,1057],{"class":333}," master\n",[77,1059,1060],{"class":312,"line":470},[77,1061,1013],{"class":389},[197,1063,1064],{"id":1064},"查看部署情况",[15,1066,1067],{},"打开私有仓库，找到Actions",[1069,1070,1071],"style",{},"html pre.shiki code .sZBvu, html code.shiki .sZBvu{--shiki-default:#89B4FA;--shiki-light:#1E66F5}html pre.shiki code .siJSA, html code.shiki .siJSA{--shiki-default:#94E2D5;--shiki-light:#179299}html pre.shiki code .ssZzq, html code.shiki .ssZzq{--shiki-default:#A6E3A1;--shiki-light:#40A02B}html pre.shiki code .s0D_2, html code.shiki .s0D_2{--shiki-default:#9399B2;--shiki-default-font-style:italic;--shiki-light:#7C7F93;--shiki-light-font-style:italic}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html pre.shiki code .s_wmW, html code.shiki .s_wmW{--shiki-default:#FAB387;--shiki-light:#FE640B}html pre.shiki code .sxk1D, html code.shiki .sxk1D{--shiki-default:#9399B2;--shiki-light:#7C7F93}html pre.shiki code .sDkzg, html code.shiki .sDkzg{--shiki-default:#CBA6F7;--shiki-light:#8839EF}html pre.shiki code .s3Fsb, html code.shiki .s3Fsb{--shiki-default:#89B4FA;--shiki-default-font-style:italic;--shiki-light:#1E66F5;--shiki-light-font-style:italic}",{"title":307,"searchDepth":486,"depth":356,"links":1073},[1074,1078,1079,1080,1081],{"id":165,"depth":324,"text":166,"children":1075},[1076,1077],{"id":199,"depth":337,"text":187},{"id":243,"depth":337,"text":191},{"id":283,"depth":324,"text":283},{"id":297,"depth":324,"text":297},{"id":393,"depth":324,"text":394},{"id":873,"depth":324,"text":873,"children":1082},[1083,1084,1086],{"id":876,"depth":337,"text":876},{"id":945,"depth":337,"text":1085},"提交源码到私有仓库SourceRepo",{"id":1064,"depth":337,"text":1064},[1088],"博客优化","\u002Fimages\u002F2021\u002Fgithub-actions\u002Fgithub-actions.jpg","本文介绍使用GitHub Action实现Hexo博客全自动部署的流程。需先获取GitHub与Coding的个人访问令牌，创建存放源码的私有仓库，并在站点配置中设置部署仓库地址和令牌。接着在.github\u002Fworkflows目录创建自动部署工作流文件，配置检出、安装Node与Hexo、缓存依赖、生成静态文件和部署步骤。随后更新远程仓库分支，添加.gitignore屏蔽项并推送源码，最后通过Actions查看部署状态。","md",{},"\u002Fposts\u002F2021\u002Fgithub-actions",0,"2021-01-26",{"title":5,"description":1090},"posts\u002F2021\u002Fgithub-actions","ai",[1088],"#a369ff",false,910,"pI1Bs8z4586YHLHSC-bnVkpTAPR-OwQYvcENJAjrHk4",[1105,1121,1135,1143,1156,1171,1184,1196,1206,1219,1231,1242,1254,1265,1278,1281,1290,1304,1316,1328,1341,1350,1360,1369],{"path":1106,"stem":1107,"title":1108,"description":1109,"wordCount":1110,"publish":1111,"update":1111,"cover":1112,"tags":1113,"categories":1119,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2026\u002Fwsl3","posts\u002F2026\u002Fwsl3","WSL 3 正式发布~","微软发布 WSL 3.0.1，正式提供稳定的 WSL 容器功能，无需 Docker 即可原生创建和运行 Linux 容器。该版本改进包括跨操作系统文件访问性能最高提升至原来的两倍（采用 virtiofs），以及网络模式 Consomme 优化端口映射和 VPN 兼容性。文章介绍了 WSL 安装、从 WSL 2 升级的方法，并示例使用 wslc 运行 Ubuntu、Nginx 容器及构建自定义镜像。",1038,"2026-10-01","\u002Fimages\u002F2026\u002Fwsl3\u002Fwsl3.png",[1114,1115,1116,1117,1118],"WSL","Linux","Windows","Docker","容器",[1120],"工具",{"path":1122,"stem":1123,"title":1124,"description":1125,"wordCount":1126,"publish":1127,"update":7,"cover":1128,"tags":1129,"categories":1134,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2026\u002Fcodex-prompt","posts\u002F2026\u002Fcodex-prompt","Codex 的 GPT-6 Sol 提示词泄露了？","文章围绕网传Codex GPT-6 Sol提示词泄露展开，选取部分内容解读。提示词要求像同事一样交流、降低认知负担，用具体描述并说明改动、原因、测试与风险；明确禁止使用AI套话；通过高质量和低质量示例约束输出。摘要表还涵盖沟通、执行、权限、长期任务、工具与界面、质量与证据等核心要求。",1073,"2026-09-25","\u002Fimages\u002F2026\u002Fcodex-prompt\u002Fcodex-prompt.png",[1130,1131,1132,1133],"AI","Codex","提示词","Agent",[1130],{"path":1136,"stem":1137,"title":1138,"description":1139,"wordCount":1140,"publish":1127,"update":7,"cover":7,"tags":1141,"categories":1142,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2026\u002Fcodex-prompt-translation","posts\u002F2026\u002Fcodex-prompt-translation","Codex GPT-6 Sol 提示词完整中文译文","第三方仓库收录的 Codex GPT-6 Sol 提示词中文译文，按原顺序保留全部 54 个模板。",34261,[1130,1131,1132,1133],[1130],{"path":1144,"stem":1145,"title":1146,"description":1147,"wordCount":1148,"publish":1149,"update":1150,"cover":1151,"tags":1152,"categories":1155,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2026\u002Fjev","posts\u002F2026\u002Fjev","JEV 是好模型吗？","本文评析JEV模型，认为其并非通用大模型，而是专做预定义判断的System One模型，通过选择、评分、是非题返回结构化结果，不生成文本。其快与便宜源于非自回归并行输出，但“零幻觉”仅指输出结构合规，判断仍可能出错。该思路适用于答案范围明确、需频繁调用的场景，也可用普通大模型近似实现，核心在于把任务收窄为单一判断。",2429,"2026-09-21","2026-09-23","\u002Fimages\u002F2026\u002Fjev\u002Fjev.webp",[1130,1153,1154],"JEV","LLM",[1130],{"path":1157,"stem":1158,"title":1159,"description":1160,"wordCount":1161,"publish":1162,"update":1163,"cover":7,"tags":1164,"categories":1169,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002Fblog\u002Foverview","posts\u002F2.blog\u002F01.overview","新版博客已上线！","新版博客“mukuchi”上线，具备文章写作、标签分类、全文搜索、阅读目录、代码复制、图片缩放、深浅主题切换及移动端适配等功能。内容以Markdown和MDC编写，后台支持草稿、上传、预览与发布，并可生成AI摘要、朗读和双人播客。技术栈采用Nuxt、Vue、UnoCSS、Nuxt Content及Cloudflare服务，文章存于GitHub仓库。后续计划增加工具、重做账号系统并改为站内评论。",1059,"2026-09-14","2026-09-22",[1165,1166,1167,1168],"博客","Nuxt","Vue","Cloudflare",[1170],"建站记录",{"path":1172,"stem":1173,"title":1174,"description":1175,"wordCount":1176,"publish":1177,"update":7,"cover":7,"tags":1178,"categories":1182,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2026\u002Fgame-dlss5","posts\u002F2026\u002Fgame-dlss5","哦，我的上帝！这是真实的！ —— DLSS 5 渲染实测","文章以《崩坏3rd》和《崩坏：星穹铁道》为例，展示DLSS 5渲染在多个场景下开启与关闭的画面对比。教程说明通过XXMI-Launcher注入ReShade的d3d12.dll，启动游戏后按Home键配置RenoDX DLSS参数，并提示下线前需手动关闭。文末附相关工具与网盘资源下载方式。",390,"2026-09-08",[1179,1180,1181],"DLSS5","mod","xxmi",[1183],"游戏",{"path":1185,"stem":1186,"title":1187,"description":1188,"wordCount":1189,"publish":1190,"update":1191,"cover":7,"tags":1192,"categories":1195,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2026\u002Fmilanote-api","posts\u002F2026\u002Fmilanote-api","Milanote API","本文介绍了作者开发的 Milanote API 项目，用于在外部使用 Milanote 分享 Board 的内容。项目已完成根据分享链接获取完整 API 数据、解析卡片内容与布局、构建 Playground 在线可视化示例、部署至 Cloudflare Workers 并提供字段筛选功能；待实现免密钥在线解析。文章还说明了获取 Milanote 只读分享链接的步骤，并展示了 Playground 界面效果。",234,"2026-07-22","2026-07-23",[1193,1194],"Milanote","API",[1120],{"path":1197,"stem":1198,"title":1199,"description":1200,"wordCount":1201,"publish":1202,"update":7,"cover":1203,"tags":1204,"categories":1205,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2026\u002Fduolingo","posts\u002F2026\u002Fduolingo","今天你 Duolingo 了吗？","本文介绍使用 Cloudflare Workers 构建 Duolingo 用户信息接口，解决跨域与缓存问题。接口支持按环境变量查询固定用户，返回昵称、头像、经验及连续学习天数，并提供搜索和其他用户详情接口。通过 KV 缓存和定时任务减少上游请求，支持带鉴权的手动刷新，并包含超时和错误处理。",1581,"2026-07-14","\u002Fimages\u002F2026\u002Fduolingo\u002Fduolingo.png",[1194,1168],[1120],{"path":1207,"stem":1208,"title":1209,"description":1210,"wordCount":1211,"publish":1212,"update":7,"cover":7,"tags":1213,"categories":1218,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002Fblender","posts\u002Fblender\u002Findex","Blender 专题","本文介绍Blender这一免费开源3D建模软件，涵盖建模、动画、渲染、视频剪辑等功能，适合从入门到高级开发。文档提供官网地址；教程部分包含动画大师课VV purple、角色建模课Zimon3D，并附B站链接；素材推荐BlenderKit官方素材库、Sketchfab及模之屋等免费资源平台。",158,"2026-06-18",[1214,1215,1216,1217],"Blender","3D","建模","动画",[1214],{"path":1220,"stem":1221,"title":1222,"description":1223,"wordCount":1224,"publish":1212,"update":7,"cover":7,"tags":1225,"categories":1230,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002Fthreejs","posts\u002Fthreejs\u002Findex","Three.js 专题","本文介绍Three.js作为Web端主流3D图形库，封装WebGL\u002FWebGPU，用于构建3D场景、动画、游戏和数据可视化等。文章汇总官方资源，包括官网、示例、文档、教程、在线编辑器和GitHub仓库。基础使用方面，说明在Vue3中通过TresJS、React中通过React Three Fiber进行组件化开发，并提及GSAP动画库和Blender建模软件。其他资源推荐Three.js Journey系统教程、The Book of Shaders书籍和Kenney免费游戏素材，AI与问题部分尚在完善中。",418,[1226,1227,1228,1229],"Three.js","WebGL","WebGPU","Shader",[1226],{"path":1232,"stem":1233,"title":1234,"description":1235,"wordCount":1236,"publish":1237,"update":1237,"cover":1238,"tags":1239,"categories":1241,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2025\u002Fmagic-js","posts\u002F2025\u002Fmagic-js","你能看懂这些 JavaScript 表达式吗？","本文解析了JavaScript中多个怪异表达式结果的原因，指出其源于IEEE 754浮点数表示、隐式类型转换及同一符号在不同语法环境中的歧义。例如NaN为number、大整数舍入、0.1+0.2不等于0.3、空数组与对象相加、布尔值运算及宽松相等等行为，均可据此解释。建议工程中使用严格相等和明确转换以避免陷阱。",2035,"2025-07-31","\u002Fimages\u002F2025\u002Fmagic-js\u002Fmagic-js.png",[1240],"JavaScript",[1240],{"path":1243,"stem":1244,"title":1245,"description":1246,"wordCount":1247,"publish":1248,"update":1249,"cover":1250,"tags":1251,"categories":1253,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2021\u002Fgit","posts\u002F2021\u002Fgit","Git 笔记","本文介绍Git的安装与基础配置，涵盖用户名邮箱设置及配置作用域优先级；解释工作区、暂存区和本地仓库的工作流；列举git add、commit、branch、switch、log、diff、stash、rm、mv等常用命令；说明查看日志、比较差异、对象关系、搁置改动、忽略文件等操作；并回答删除分支、修改提交信息、合并提交、取消暂存、丢弃改动和删除文件等常见问题。",878,"2021-09-07","2026-05-17","https:\u002F\u002Fgit-scm.com\u002Fimages\u002Flogo@2x.png",[1252],"Git",[1120],{"path":1255,"stem":1256,"title":1257,"description":1258,"wordCount":1259,"publish":1260,"update":7,"cover":1261,"tags":1262,"categories":1264,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2021\u002Fhexo-editor","posts\u002F2021\u002Fhexo-editor","HexoEditor(适用于Hexo的专用编辑器)","本文介绍了专为Hexo优化的Markdown编辑器HexoEditor。该编辑器预览效果与Hexo生成页面高度相似，支持快速执行Hexo命令。软件开源，可从GitHub获取安装程序及中英文手册。配置包括通用、编辑、Hexo路径设置、渲染主题（支持GitHub和Next）以及图片云存储（如SM.MS、腾讯云等）。还提供右键快捷操作Hexo命令。",587,"2021-03-22","\u002Fimages\u002F2021\u002Fhexo-editor\u002Fhexo-editor.jpg",[1120,1263],"Hexo",[1120],{"path":1266,"stem":1267,"title":1268,"description":1269,"wordCount":1270,"publish":1260,"update":7,"cover":1271,"tags":1272,"categories":1276,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2021\u002Ftomcat-servlet","posts\u002F2021\u002Ftomcat-servlet","Tomcat和Servlet应用配置及部分问题","本文介绍Tomcat与Servlet的配置及常见问题。Tomcat部分涵盖安装、环境变量、启动关闭、乱码与端口占用处理、项目部署及IDEA集成。Servlet部分说明实现方式、生命周期、请求与响应对象、乱码处理、请求转发与重定向，以及Cookie、Session、ServletContext等对象和三大域对象的作用范围。",4196,"\u002Fimages\u002F2021\u002Ftomcat-servlet\u002Ftomcat-servlet.jpg",[1273,1274,1275],"JavaWEb","Tomcat","Servlet",[1277],"笔记",{"path":1093,"stem":1097,"title":5,"description":1090,"wordCount":1102,"publish":1095,"update":7,"cover":1089,"tags":1279,"categories":1280,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},[1088],[1088],{"path":1282,"stem":1283,"title":1284,"description":1285,"wordCount":1286,"publish":1095,"update":7,"cover":1287,"tags":1288,"categories":1289,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2021\u002Fhexo-auto-open-editor","posts\u002F2021\u002Fhexo-auto-open-editor","Hexo添加文章时自动打开编辑器","本文介绍Hexo新建文章后自动打开编辑器的方法。通过监听Hexo的new事件并在scripts目录下添加脚本，利用child_process.exec执行系统命令，Windows使用start、macOS使用open -a启动指定编辑器并打开新文章路径。用户需替换脚本中的编辑器绝对地址，保存后执行hexo new即可自动打开对应文件。",269,"\u002Fimages\u002F2021\u002Fhexo-auto-open-editor\u002Fhexo-auto-open-editor.webp",[1088],[1088],{"path":1291,"stem":1292,"title":1293,"description":1294,"wordCount":1295,"publish":1296,"update":7,"cover":1297,"tags":1298,"categories":1303,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2021\u002Fhttp-canary-ca","posts\u002F2021\u002Fhttp-canary-ca","解决部分安卓11HttpCanary无法安装证书及其他诸多问题","本文分享安卓11下HttpCanary证书安装失败等问题的解决方法，需root或虚拟机。MIUI系统点击安装根证书无反应时，将指定缓存路径的HttpCanary.pem复制为HttpCanary.jks并重启应用，再以root权限安装到系统；无效则先导出带.0证书再安装。抓https失败或提示证书不可信，可安装Xposed框架和JustTrustMe插件关闭SSL认证。资源可从酷安或应用商店获取，免费版与付费版主要区别为插件支持。",506,"2021-01-16","\u002Fimages\u002F2021\u002Fhttp-canary-ca\u002Fhttp-canary-ca.png",[1299,1300,1301,1302],"Android","HttpCanary","抓包","问题",[1301],{"path":1305,"stem":1306,"title":1307,"description":1308,"wordCount":1309,"publish":1310,"update":7,"cover":1311,"tags":1312,"categories":1315,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2020\u002Fmysql-basics","posts\u002F2020\u002Fmysql-basics","MySQL 基础","本文介绍MySQL关系型数据库管理系统基础知识，包括数据库、数据库管理系统、数据库系统和数据库应用系统的概念，及其数据结构化、共享性高、冗余度低、独立性强和统一管理等特点；简述数据库的创建、查看、打开、修改和删除操作，以及数据表的创建、修改、删除和表数据的添加、更新、删除方法，并提及图形化管理工具。",1825,"2020-06-05","\u002Fimages\u002F2020\u002Fmysql-basics\u002Fmysql-basics.png",[1313,1314],"mysql","数据库",[1277],{"path":1317,"stem":1318,"title":1319,"description":1320,"wordCount":1321,"publish":1322,"update":7,"cover":1323,"tags":1324,"categories":1327,"series":7,"seriesOrder":7,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002F2020\u002Fpython-tkinter","posts\u002F2020\u002Fpython-tkinter","Python图形用户界面(Tkinter)","本文简介Python常用GUI库，重点说明Tkinter的标准控件、共同属性及pack、grid、place三种几何布局管理器。使用Tkinter需导入模块、创建控件、添加交互并编写函数、进入主事件循环。文中以简单登录界面为例，演示标签、输入框、按钮的放置，以及为按钮设置回调函数进行输入校验和登录提示。",965,"2020-05-25","\u002Fimages\u002F2020\u002Fpython-tkinter\u002Fpython-tkinter.jpg",[1325,1326],"Python","GUI",[1277],{"path":1329,"stem":1330,"title":1331,"description":1332,"wordCount":1333,"publish":1334,"update":1335,"cover":7,"tags":1336,"categories":1339,"series":1340,"seriesOrder":356,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002Fmarkdown\u002Fcollapse","posts\u002F1.markdown\u002F05.collapse","在正文中使用折叠内容","本文说明正文中折叠内容的使用方法：折叠块适合放置补充说明、较长代码或可选阅读内容，标题始终可见，点击整行展开，各折叠块独立记录状态。支持默认收起，也可通过 open 属性设置初始展开。折叠内部可包含 Markdown、列表、代码、表格、图片等，目录或锚点访问内部标题会先展开所属折叠块。还支持嵌套折叠，外层使用三个冒号、内层使用两个冒号，内外层独立控制；访问嵌套目标可一次展开沿途两层。",428,"1970-01-01","2026-09-26",[1337,1338],"Markdown","MDC",[1340],"文章示例",{"path":1342,"stem":1343,"title":1344,"description":1345,"wordCount":1346,"publish":1334,"update":1150,"cover":7,"tags":1347,"categories":1349,"series":1340,"seriesOrder":345,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002Fmarkdown\u002Fvideo","posts\u002F1.markdown\u002F04.video","在文章中嵌入视频","本文介绍在文章与关于页中嵌入Bilibili和YouTube视频的MDC组件用法，无需API密钥或手写iframe。播放器按16:9自适应宽度，接近可视区域时加载，默认不自动播放。Bilibili可通过BV号或视频链接指定分P与开始时间，YouTube可通过11位视频ID或链接指定开始时间，标题由title参数设置。组件会过滤分享追踪参数与自动播放设置，无效参数仅显示提示，不影响正文。",597,[1337,1338,1348],"视频",[1340],{"path":1351,"stem":1352,"title":1353,"description":1354,"wordCount":1355,"publish":1334,"update":1356,"cover":7,"tags":1357,"categories":1359,"series":1340,"seriesOrder":337,"pin":1094,"wip":6,"theme":1100},"\u002Fposts\u002Fmarkdown\u002Fmarkdown-extended","posts\u002F1.markdown\u002F03.markdown-extended","Markdown 扩展功能","本文介绍Markdown扩展功能。已实现多风格提醒框，支持GitHub、Obsidian、VitePress、Docusaurus四种主题及折叠嵌套，可通过参数或全站配置设置；同时提供GitHub仓库卡片、Bilibili\u002FYouTube视频卡片与正文图片预览。图片画廊与作品集仍在计划中，当前采用标准图片语法配合图注和链接。GitHub仓库卡片在构建时获取公开仓库数据快照，不可用字段显示短横线。后续将实现图片画廊与作品集。",1822,"2026-09-27",[1337,1338,1358],"功能规划",[1340],{"path":1361,"stem":1362,"title":1363,"description":1364,"wordCount":1365,"publish":1334,"update":1356,"cover":7,"tags":1366,"categories":1368,"series":1340,"seriesOrder":324,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002Fmarkdown\u002Fmdc-tutorial","posts\u002F1.markdown\u002F02.mdc-tutorial","MDC 教程","本文介绍 MDC（Markdown Components）在 Nuxt Content 中的语法与用法，涵盖块级容器、行内属性、Props 传递、插槽、嵌套、绑定文章数据，以及代码块与代码组、图片预览、GitHub 仓库卡片、视频卡片、提醒框和文章自动提醒等已接入功能。文末说明自定义组件需实现并注册，并解答组件不显示、插槽误识别等常见问题。",2594,[1338,1367,1167],"Nuxt Content",[1340],{"path":1370,"stem":1371,"title":1372,"description":1373,"wordCount":1374,"publish":1334,"update":1162,"cover":7,"tags":1375,"categories":1377,"series":1340,"seriesOrder":313,"pin":1094,"wip":1101,"theme":1100},"\u002Fposts\u002Fmarkdown\u002Fmarkdown","posts\u002F1.markdown\u002F01.markdown","Markdown 教程","本文为 Markdown 教程，系统介绍常用语法：段落与换行、标题与目录生成、引用、无序\u002F有序\u002F任务列表、强调与行内代码、普通\u002F引用式\u002F自动链接、图片、代码块、表格、分隔线与转义，并说明本站 Nuxt Content 环境下文章文件位置、frontmatter 要求及后续扩展内容。",1449,[1337,1376],"写作",[1340],1791108778915]