[{"data":1,"prerenderedAt":244},["ShallowReactive",2],{"\u002Fvideos\u002Fpublish-your-own-shadcn-extension-with-cli":3},{"video":4,"previous":33,"next":160},{"id":5,"title":6,"body":7,"category":14,"date":15,"description":16,"episode":15,"extension":17,"meta":18,"navigation":19,"order":20,"path":21,"platforms":22,"repository":25,"seo":26,"series":15,"status":15,"stem":27,"tags":28,"__hash__":32},"videos\u002Fvideos\u002F26.publish-your-own-shadcn-extension-with-cli.md","发布属于你自己的 shadcn 扩展包，并让它可以使用 cli 安装",{"type":8,"value":9,"toc":10},"minimark",[],{"title":11,"searchDepth":12,"depth":12,"links":13},"",2,[],"构建现场",null,"你可以发布一个属于你自己的 shadcn-vue 扩展包，并且像 shadcn-vue 原生组件那样使用命令行安装","md",{},true,26,"\u002Fvideos\u002Fpublish-your-own-shadcn-extension-with-cli",{"bilibili":23,"youtube":24},"https:\u002F\u002Fwww.bilibili.com\u002Fvideo\u002FBV1TLq4BmEfd\u002F","https:\u002F\u002Fyoutu.be\u002FiaBpP5LQOTo?si=CgNiT7PTpr219nxm","https:\u002F\u002Fgithub.com\u002Fprop-show\u002Fprop-show-kit",{"title":6,"description":16},"videos\u002F26.publish-your-own-shadcn-extension-with-cli",[29,30,31],"shadcn-vue","cli","components","3nRGwODT-PDsIeXF8JLxC3op8VmsMNxMY17cl_MXMOg",{"id":34,"title":35,"body":36,"category":14,"date":15,"description":145,"episode":146,"extension":17,"meta":147,"navigation":19,"order":148,"path":149,"platforms":15,"repository":73,"seo":150,"series":151,"status":15,"stem":152,"tags":153,"__hash__":159},"videos\u002Fvideos\u002F25.ys-23-the-end.md","乙巳项目结语",{"type":8,"value":37,"toc":143},[38,42,45,48,51,54,57,81,84,95,98,104,107,110,116,122,129,136],[39,40,41],"p",{},"剪完最后一节，点击导出、发布，窗口处溜进几股寒风。我对着屏幕发了很久的呆——这个陪伴了我数个日夜的“第一次”，就这样画上了仓促的句点。",[39,43,44],{},"像一场彩排许久却突然拉上幕布的演出，我还欠着好多案例没讲，好多深夜闪过的灵感没来得及整理，好多留言里的疑问没逐一回应。是的，我有遗憾。",[39,46,47],{},"但就在这份遗憾身旁，另一些东西悄悄亮了起来。\n第一次有人催更，第一次收到陌生的打赏，第一次发现原来有那么多人在屏幕另一端默默陪着。这些光很轻，却足够暖。",[39,49,50],{},"这23集的合集，一定不完美。但它或许够真诚。\n有位老师说过：“教育不是注满一桶水，而是点燃一把火。”在这个什么都求快的时代，我固执地用最笨的方式，把代码一行行敲出来。坚持保留那些卡顿、重录、说错又纠正的瞬间——因为学习本身，就是一次次调试和运行。",[39,52,53],{},"或许最珍贵的不是完美演绎，而是有人陪你一起“不熟练”。",[39,55,56],{},"现在，这个带着毛边的合集，完整交到你手里：",[58,59,60,64,67,78],"ul",{},[61,62,63],"li",{},"23期内容，从基础搭建到逐步实现",[61,65,66],{},"国内少见全程免费、结构完整的 Monorepo 全栈项目实践",[61,68,69,70,77],{},"全部代码开源，已在 ",[71,72,76],"a",{"href":73,"rel":74},"https:\u002F\u002Fgithub.com\u002Fprop-show\u002Fys",[75],"nofollow","GitHub"," 同步更新",[61,79,80],{},"以及一个恨不得把所知一切都掏出来给你的分享者",[39,82,83],{},"如果你正在找：",[58,85,86,89,92],{},[61,87,88],{},"✅ 一个不故弄玄虚的实践入口",[61,90,91],{},"✅ 一套能跟着敲的真实项目框架",[61,93,94],{},"✅ 一份坦诚甚至有点话多的陪伴感",[39,96,97],{},"那么，它也许适合你。",[39,99,100],{},[101,102,103],"strong",{},"它不承诺捷径，但或许能陪你走稳最初几步。",[39,105,106],{},"学习这条路，我们都是行者。我的第一次长途，脚印深浅不一，却始终朝着同一个方向——让有用的知识，找到需要的人。",[39,108,109],{},"门仍开着，灯还亮着，等你来坐坐。",[111,112,113],"poetry",{},[39,114,115],{},"所有抵达都有起点，\n所有圆满都有缺口。\n感谢你，\n成为这段不完美旅程的一部分。",[117,118,119],"alert",{},[39,120,121],{},"草草结束，有一些遗憾。但万物都似这样，带着些许不完美。这是给我自己找的理由。—— 乙巳年丁亥月乙酉日夜",[39,123,124],{},[71,125,128],{"href":126,"rel":127},"https:\u002F\u002Fspace.bilibili.com\u002F104376935\u002Flists\u002F6369614",[75],"Bilibili合集链接入口",[39,130,131],{},[71,132,135],{"href":133,"rel":134},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=EUdVfSPbhQI&list=PLzeJmkf0DSD0IR_HwGpZVFd1miNSKNaLQ",[75],"YouTube合集链接入口",[39,137,138],{},[71,139,142],{"href":140,"rel":141},"https:\u002F\u002Fv.douyin.com\u002FE1tFmKpWDTo\u002F",[75],"抖音合集链接入口",{"title":11,"searchDepth":12,"depth":12,"links":144},[],"亲爱的陌生人，我的第一次分享合集完结了，带着一些不完美，一些坚持，和一些想对你说的话。","23",{},25,"\u002Fvideos\u002Fys-23-the-end",{"title":35,"description":145},"乙巳","videos\u002F25.ys-23-the-end",[154,155,156,157,158],"项目","nodejs","nestjs","vue","typescript","dCSCu7nF2Pnto-SN6iVAa0RzWJUYyq3p-BRGdnpNVVA",{"id":161,"title":162,"body":163,"category":230,"date":15,"description":15,"episode":15,"extension":17,"meta":231,"navigation":19,"order":232,"path":233,"platforms":234,"repository":15,"seo":237,"series":15,"status":15,"stem":238,"tags":239,"__hash__":243},"videos\u002Fvideos\u002F27.npm-supply-chain-simple-defense.md","供应链攻击简易防护",{"type":8,"value":164,"toc":228},[165,168,176,201,207,218,224],[39,166,167],{},"蠕虫病毒又来喽！我们可以通过配置 minimumReleaseAge 来进行简单的防护。一般配置个一个星期就可以了。",[39,169,170,171,175],{},"你用 pnpm 可以在 ",[172,173,174],"code",{},"pnpm-workspace.yaml"," 中配置",[177,178,182],"pre",{"className":179,"code":180,"language":181,"meta":11,"style":11},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","minimumReleaseAge: 10080\n","yaml",[172,183,184],{"__ignoreMap":11},[185,186,189,193,197],"span",{"class":187,"line":188},"line",1,[185,190,192],{"class":191},"swJcz","minimumReleaseAge",[185,194,196],{"class":195},"sMK4o",":",[185,198,200],{"class":199},"sbssI"," 10080\n",[39,202,203,204,175],{},"如果你是用 npm，可以在 ",[172,205,206],{},".npmrc",[177,208,212],{"className":209,"code":210,"language":211,"meta":11,"style":11},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","min-release-age=7d\n","ini",[172,213,214],{"__ignoreMap":11},[185,215,216],{"class":187,"line":188},[185,217,210],{},[219,220,221],"note",{},[39,222,223],{},"注意：在 npm 中默认单位是天，pnpm 中默认单位是分钟",[225,226,227],"style",{},"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 .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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":11,"searchDepth":12,"depth":12,"links":229},[],"编程技巧",{},27,"\u002Fvideos\u002Fnpm-supply-chain-simple-defense",{"bilibili":235,"youtube":236},"https:\u002F\u002Fwww.bilibili.com\u002Fvideo\u002FBV1wwMS6eEsH\u002F","https:\u002F\u002Fyoutu.be\u002FfKisny6Pz9g?si=lsOvCgZlRUYt1p1q",{"title":162,"description":15},"videos\u002F27.npm-supply-chain-simple-defense",[240,241,242],"npm","蠕虫病毒","供应链攻击","WuobWhMBQWBG_wU-n7_7o6gQroUd2UM_6EPl_P8LUGE",1787059916675]