[{"data":1,"prerenderedAt":75},["ShallowReactive",2],{"content:\u002Farticles:2064":3},{"item":4,"md":15,"html":16,"menu":17,"excerpt":28,"related":29},{"title":5,"len":6,"tags":7,"id":9,"time":10,"modifyTime":11,"encrypt":12,"showComments":13,"customSlug":14},"记录油猴脚本的开发过程",2633,[8],"杂谈",2064,1709708038546,1712060506584,false,true,"",null,"\u003Cdiv data-marked-line=\"1\" class=\"container-block tip\">\n                    \u003Cp class=\"container-title\">说明\u003C\u002Fp>\n                    \u003Cp>&emsp;&emsp;油猴脚本是一种运行在浏览器的第三方脚本，用来修改特定的网站的源代码，实现网站本身没有的功能。它有两个组成部分：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>浏览器扩展\u003C\u002Fstrong>:目前有Tampermonkey 和 Violentmonkey两款，其功能大同小异。浏览器扩展的作用是充当脚本的载体。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>用户脚本\u003C\u002Fstrong>: 真正发挥作用的是用户脚本。可以自己编写脚本，或者在诸如\u003Ca href=\"https:\u002F\u002Fgreasyfork.org\u002Fzh-CN\" target=\"_blank\">Greasy Fork\u003C\u002Fa>的网站寻找其他大神编写的脚本。\u003C\u002Fli>\n\u003C\u002Ful>\n\n                  \u003C\u002Fdiv>\u003Cp data-marked-line=\"7\">&emsp;&emsp;前几天我给煎蛋网(jandan.net)写了一个脚本：\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fyunyuyuan\u002Fjandan-recorder\" target=\"_blank\">煎蛋吐槽记录器\u003C\u002Fa>，主要是想练手，顺便用用我好久前star过的一个有趣的项目：\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Flisonge\u002Fvite-plugin-monkey\" target=\"_blank\">vite-plugin-monkey\u003C\u002Fa>。第一版比较粗糙，用jQuery写的，感觉像现代人去钻木取火一样，最后实在受不了了，换vue重写。然后把自动更新也做了，下面记录一下过程。\u003C\u002Fp>\n\u003Ch2 data-marked-line=\"9\">\u003Csup class=\"fake-head\" id=\"%E8%B5%B7%E9%A1%B9%E7%9B%AE\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E8%B5%B7%E9%A1%B9%E7%9B%AE\">起项目\u003C\u002Fa>\u003C\u002Fh2>\u003Col data-marked-line=\"10\">\n\u003Cli>\u003Cp data-marked-line=\"10\">参考vite-plugin-monkey的文档，起项目只需一行命令\u003Ccode>pnpm create monkey\u003C\u002Fcode>。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp data-marked-line=\"12\">参考文档的\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Flisonge\u002Fvite-plugin-monkey\u002Fblob\u002Fmain\u002FREADME.md#config\" target=\"_blank\">Config部分\u003C\u002Fa>，修改\u003Ccode>vite.config.ts\u003C\u002Fcode>，这里决定编译后的脚本的元数据。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp data-marked-line=\"14\">写代码（此处省略一万字\u003Cimg src=\"\u002Fsticker\u002Faru\u002F38.png\" alt=\"sticker\"\u002F>），测试。vite-plugin-monkey的调试非常方便，只需要\u003Ccode>npm run dev\u003C\u002Fcode>，浏览器安装测试脚本，后续就可以完美实现热更新，开发效率非常高！\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 data-marked-line=\"16\">\u003Csup class=\"fake-head\" id=\"%E5%8F%91%E5%B8%83%E5%88%B0Greasy%20Fork\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E5%8F%91%E5%B8%83%E5%88%B0Greasy%20Fork\">发布到Greasy Fork\u003C\u002Fa>\u003C\u002Fh2>\u003Cp data-marked-line=\"17\">&emsp;&emsp;如果每次更新都手动去Greasy Fork发布，那就显得太繁琐了。好在Greasy Fork有个webhook同步功能，文档在\u003Ca href=\"https:\u002F\u002Fgreasyfork.org\u002Fzh-CN\u002Fusers\u002Fwebhook-info\" target=\"_blank\">https:\u002F\u002Fgreasyfork.org\u002Fzh-CN\u002Fusers\u002Fwebhook-info\u003C\u002Fa>。首先去github仓库配置webhook，然后在脚本的管理页面设置同步下载的地址。\n\u003Cspan class=\"image-container\">\u003Cimg data-viewer alt=\"配置脚本自动更新\" title=\"配置脚本自动更新\" src=\"https:\u002F\u002Fr2-blog.yunyuyuan.net\u002F6AHf9lVcFiTCNv3.png\"\u002F>\u003Csmall class=\"desc\">配置脚本自动更新\u003C\u002Fsmall>\u003C\u002Fspan>\n&emsp;&emsp;如上配置后，每次有新的github release发布，Greasy Fork就会拉取最新的脚本内容以及脚本描述。\u003C\u002Fp>\n\u003Ch2 data-marked-line=\"21\">\u003Csup class=\"fake-head\" id=\"Github%20Actions%E8%87%AA%E5%8A%A8%E5%8F%91%E5%B8%83release\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#Github%20Actions%E8%87%AA%E5%8A%A8%E5%8F%91%E5%B8%83release\">Github Actions自动发布release\u003C\u002Fa>\u003C\u002Fh2>\u003Cp data-marked-line=\"22\">&emsp;&emsp;Greasy Fork配置好了后，还需要让Github也智能一点：每次push新tag的时候，就编译出新的脚本，并发布release。\n&emsp;&emsp;对应的\u003Ccode>.github\\workflows\\main.yml\u003C\u002Fcode>内容如下：\u003C\u002Fp>\n\u003Cpre data-marked-line=\"24\" data-lang=\"yml\" data-shiki>\u003Ccode class=\"language-yml\">\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\">on\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">  push\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">    tags\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">      - \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">'v*'\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"> # 触发条件为：推送tag，且tag开头是v，例如v1.0.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">permissions\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">  contents\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">write\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"> # 授予actions发布release的权限\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">name\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">Create Release\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">jobs\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">  build\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">    name\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">Create Release\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">    runs-on\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">ubuntu-latest\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">    steps\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">      - \u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">name\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">Checkout code\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">        uses\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">actions\u002Fcheckout@v2\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">      # 初始化node和pnpm环境\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">      - \u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">uses\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">pnpm\u002Faction-setup@v2\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\"> \u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">        with\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">          version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\">6.10.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">      - \u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">uses\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">actions\u002Fsetup-node@v4\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">        with\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">          node-version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">'18'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">          cache\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">'pnpm'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">      # 安装依赖\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">      - \u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">run\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">pnpm install\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">      # 编译脚本\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">      - \u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">run\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">pnpm run build\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">      # 发布release\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">      - \u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">name\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">Release\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">        uses\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">softprops\u002Faction-gh-release@v1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">        if\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">startsWith(github.ref, 'refs\u002Ftags\u002F')\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">        with\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#E06C75\">          files\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">dist\u002Fjandan-recorder.user.js\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp data-marked-line=\"62\">&emsp;&emsp;以上全部配置完成后，每次写完代码，只需如下几步：\u003C\u002Fp>\n\u003Col data-marked-line=\"63\">\n\u003Cli>更新\u003Ccode>vite.config.ts\u003C\u002Fcode>里的version字段，例如以前是\u003Ccode>version: &quot;1.0.2&quot;\u003C\u002Fcode>，新版是\u003Ccode>version: &quot;1.1.0&quot;\u003C\u002Fcode>。\u003C\u002Fli>\n\u003Cli>提交代码：\u003Cpre data-marked-line=\"65\" data-lang=\"bash\" data-shiki>\u003Ccode class=\"language-bash\">\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">git\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> add\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> vite.config.ts\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">git\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> commit\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\"> -m\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> \"xxx\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">git\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> push\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># 发布新tag，触发脚本编译\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">git\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> tag\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> v1.1.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">git\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> push\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\"> --tags\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fli>\n\u003Cli>等待Greasy Fork自动拉取。\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cdiv data-marked-line=\"75\" class=\"container-block warning\">\n                    \u003Cp class=\"container-title\">更新\u003C\u002Fp>\n                    \u003Cp>&emsp;&emsp;webhook触发greasyfork拉取最新代码是从file tree而不是release(\u003Ca href=\"https:\u002F\u002Fgreasyfork.org\u002Fen\u002Fdiscussions\u002Fgreasyfork\u002F204541-why-is-my-webhook-update-not-working\" target=\"_blank\">参考\u003C\u002Fa>)，所以目前上述方法无法生效。\n&emsp;&emsp;现在我改成了让greasyfork定时更新，而不是通过webhook更新。有一说一greasyfork应该提供一个选项可以自定义webhook拉取地址。\u003C\u002Fp>\n\n                  \u003C\u002Fdiv>",[18,22,25],{"size":19,"text":20,"url":21},"big","起项目","%E8%B5%B7%E9%A1%B9%E7%9B%AE",{"size":19,"text":23,"url":24},"发布到Greasy Fork","%E5%8F%91%E5%B8%83%E5%88%B0Greasy%20Fork",{"size":19,"text":26,"url":27},"Github Actions自动发布release","Github%20Actions%E8%87%AA%E5%8A%A8%E5%8F%91%E5%B8%83release","说明 油猴脚本是一种运行在浏览器的第三方脚本，用来修改特定的网站的源代码，实现网站本身没有的功能。它有两个组成部分： 浏览器扩展:目前有Tampermonkey 和 Violentmonkey两款，其功能大同小异。浏览器扩展的作用是充当脚本的载体。 用户脚本: 真正发挥作用的是用户脚本。可以自己编写…",[30,40,51,59,67],{"item":31,"count":39},{"title":32,"len":33,"tags":34,"id":35,"customSlug":36,"time":37,"modifyTime":38,"showComments":13,"encrypt":12},"个人 vide coding 的经历",1156,[8],8485,"vibe-coding",1787219870808,1787408949138,1,{"item":41,"count":39},{"title":42,"len":43,"tags":44,"id":47,"time":48,"modifyTime":49,"showComments":13,"encrypt":12,"customSlug":50},"关于本站的重构 (又双叒叕重构了)",1503,[45,46,8],"前端","vue",8500,1741528184917,1759579038298,"about-renovate",{"item":52,"count":39},{"title":53,"len":54,"tags":55,"id":56,"time":57,"modifyTime":58,"encrypt":12,"showComments":13,"customSlug":14},"详解SICP习题1.19",4629,[8],6711,1686738135301,1686880845509,{"item":60,"count":39},{"title":61,"len":62,"tags":63,"id":65,"time":66,"modifyTime":66,"encrypt":12,"showComments":13,"customSlug":14},"stardust: 年付5欧元的ipv6主机，性价比王者",243,[64,8],"linux",6167,1678125830054,{"item":68,"count":39},{"title":69,"len":70,"tags":71,"id":72,"time":73,"modifyTime":74,"encrypt":12,"showComments":13,"customSlug":14},"使用cloudflare tunnel打洞，随时随地访问内网服务",5331,[8,64],5896,1673123801345,1678975490497,1793351207561]