diff --git a/docs/.vitepress/content-list.json b/docs/.vitepress/content-list.json index c9ca8ce..b818133 100644 --- a/docs/.vitepress/content-list.json +++ b/docs/.vitepress/content-list.json @@ -1,653 +1,681 @@ [ { - "created-at": "2025-07-02 22:20", - "is-hide": "", - "slug": "bluefox-nx1-flash-gsi", "title": "蓝狐(BLUEFOX)NX1 刷 GSI 系统", - "updated-at": "2025-07-03 21:54" + "slug": "bluefox-nx1-flash-gsi", + "created-at": "2025-07-02 22:20", + "updated-at": "2025-07-03 21:54", + "is-hide": "" }, { - "created-at": "2025-04-18 22:55", - "is-hide": "", - "slug": "ffmpeg-merge-video-files", "title": "使用 FFmpeg 合并多个视频文件", - "updated-at": "2025-07-03 21:58" + "slug": "ffmpeg-merge-video-files", + "created-at": "2025-04-18 22:55", + "updated-at": "2025-07-03 21:58", + "is-hide": "" }, { - "created-at": "2025-03-22 22:20", - "is-hide": "", - "slug": "fix-redirect-dingtalk-miniprogram-scheme-blank-page", "title": "解决钉钉通过短链接跳转小程序 scheme 的方式打开小程序时会有一个空白页面的问题", - "updated-at": "2025-03-22 22:32" + "slug": "fix-redirect-dingtalk-miniprogram-scheme-blank-page", + "created-at": "2025-03-22 22:20", + "updated-at": "2025-03-22 22:32", + "is-hide": "" + }, + { + "title": "解决 ESLint 提示“Parsing error: Unexpected token <”的问题", + "slug": "fix-eslint-unexpected-token-right-angle-bracket-error", + "created-at": "2025-03-09 22:32", + "updated-at": "2025-10-12 18:14", + "is-hide": "" + }, + { + "title": "「Web 前端」Vue 为组件模板引用标注类型", + "slug": "vue-typing-component-template-refs", + "created-at": "2025-03-09 22:30", + "updated-at": "2025-10-12 18:27", + "is-hide": "" + }, + { + "title": "Git 提交信息规范(Angular)", + "slug": "git-angular-commits-specification", + "created-at": "2025-02-13 09:57", + "updated-at": "2025-02-13 09:58", + "is-hide": "" + }, + { + "title": "使用 Ventoy 工具制作U盘启动盘", + "slug": "ventoy-tool-usage-tutorial", + "created-at": "2025-02-13 09:45", + "updated-at": "2025-10-12 18:19", + "is-hide": "" }, { - "created-at": "2025-02-11 00:00", - "is-hide": "", - "slug": "post-2025-02-11-1", "title": "在用 uni-app 开发钉钉小程序的时候遇到一个奇怪的问题,发送请求拿不到返回的数据", - "updated-at": "2025-02-12 09:51" + "slug": "post-2025-02-11-1", + "created-at": "2025-02-11 00:00", + "updated-at": "2025-02-12 09:51", + "is-hide": "" }, { - "created-at": "2024-01-19 00:00", - "is-hide": "", - "slug": "fix-ant-tree-select-can-select-disabled-item", "title": "解决 Ant TreeSelect(树选择)组件可以使用键盘选中 disabled(已禁用)项的问题", - "updated-at": "2025-02-20 22:56" + "slug": "fix-ant-tree-select-can-select-disabled-item", + "created-at": "2024-01-19 00:00", + "updated-at": "2025-02-20 22:56", + "is-hide": "" }, { - "created-at": "2023-12-18 00:00", - "is-hide": "", - "slug": "nodejs-check-is-tablet-pc", "title": "Electron 或 Node.js 判断当前设备是否支持触摸屏", - "updated-at": "2025-02-20 22:57" + "slug": "nodejs-check-is-tablet-pc", + "created-at": "2023-12-18 00:00", + "updated-at": "2025-02-20 22:57", + "is-hide": "" }, { - "created-at": "2023-11-07 00:00", - "is-hide": "", - "slug": "miui-dial-plate-commands", "title": "MIUI 拨号盘指令(代码)合集", - "updated-at": "2025-02-20 22:58" + "slug": "miui-dial-plate-commands", + "created-at": "2023-11-07 00:00", + "updated-at": "2025-02-20 22:58", + "is-hide": "" }, { - "created-at": "2023-11-06 00:00", - "is-hide": "", - "slug": "calculation-test-code", "title": "运算速度测试代码", - "updated-at": "2025-02-20 22:58" + "slug": "calculation-test-code", + "created-at": "2023-11-06 00:00", + "updated-at": "2025-02-20 22:58", + "is-hide": "" }, { - "created-at": "2023-10-08 00:00", - "is-hide": "", - "slug": "use-css-function-in-less", "title": "在 Less 中使用与 Less 内置函数同名的原生 CSS 函数", - "updated-at": "2025-02-20 22:58" + "slug": "use-css-function-in-less", + "created-at": "2023-10-08 00:00", + "updated-at": "2025-02-20 22:58", + "is-hide": "" }, { - "created-at": "2023-09-17 00:00", - "is-hide": "", - "slug": "common-usage-git-commands", "title": "常用的 Git 命令", - "updated-at": "2025-02-20 22:59" - }, - { + "slug": "common-usage-git-commands", "created-at": "2023-09-17 00:00", - "is-hide": "", - "slug": "javascript-define-and-init-array", + "updated-at": "2025-02-20 22:59", + "is-hide": "" + }, + { "title": "JavaScript 创建并初始化任意长度的数组", - "updated-at": "2025-02-20 22:59" + "slug": "javascript-define-and-init-array", + "created-at": "2023-09-17 00:00", + "updated-at": "2025-02-20 22:59", + "is-hide": "" }, { - "created-at": "2023-05-30 00:00", - "is-hide": "", - "slug": "zlm-rtc-client-multi-video-pull-once", "title": "通过画布(Canvas)实现 ZLMRTCClient 同一视频流多次显示时只拉取一次", - "updated-at": "2025-02-12 09:50" + "slug": "zlm-rtc-client-multi-video-pull-once", + "created-at": "2023-05-30 00:00", + "updated-at": "2025-02-12 09:50", + "is-hide": "" }, { - "created-at": "2023-02-21 00:00", - "is-hide": "", - "slug": "vscode-minecraft-nbt-editor", "title": "使用 VSCode 查看和编辑 Minecraft 存档的 NBT", - "updated-at": "2025-03-15 22:22" + "slug": "vscode-minecraft-nbt-editor", + "created-at": "2023-02-21 00:00", + "updated-at": "2025-03-15 22:22", + "is-hide": "" }, { - "created-at": "2023-01-15 00:00", - "is-hide": "", - "slug": "windows-10-unable-to-login", "title": "解决 Windows 10 提示“无法登录到你的账户”问题", - "updated-at": "2025-03-15 22:26" + "slug": "windows-10-unable-to-login", + "created-at": "2023-01-15 00:00", + "updated-at": "2025-03-15 22:26", + "is-hide": "" }, { - "created-at": "2022-09-20 00:00", - "is-hide": "", - "slug": "vue-jsx-syntax", "title": "「Web 前端」在 Vue 中使用 JSX 的语法", - "updated-at": "2025-10-07 16:10" + "slug": "vue-jsx-syntax", + "created-at": "2022-09-20 00:00", + "updated-at": "2025-10-07 16:10", + "is-hide": "" }, { - "created-at": "2022-05-25 00:00", - "is-hide": "", - "slug": "canvas-library-fabric-js", "title": "Fabric.js 简单介绍和使用", - "updated-at": "2025-03-15 22:55" + "slug": "canvas-library-fabric-js", + "created-at": "2022-05-25 00:00", + "updated-at": "2025-03-15 22:55", + "is-hide": "" }, { - "created-at": "2022-05-25 00:00", - "is-hide": "", - "slug": "html-form-submit-no-redirect", "title": "「Web 前端」通过 iframe 实现 form 表单提交不跳转页面", - "updated-at": "2025-03-15 22:50" - }, - { + "slug": "html-form-submit-no-redirect", "created-at": "2022-05-25 00:00", - "is-hide": "", - "slug": "javascript-modify-input-file-object", + "updated-at": "2025-03-15 22:50", + "is-hide": "" + }, + { "title": "「JavaScript」修改 input type=\"file\" 元素的文件对象", - "updated-at": "2025-03-15 22:43" + "slug": "javascript-modify-input-file-object", + "created-at": "2022-05-25 00:00", + "updated-at": "2025-03-15 22:43", + "is-hide": "" }, { - "created-at": "2022-05-24 00:00", - "is-hide": "", - "slug": "nginx-config-snippet", "title": "Nginx 常用配置文件片段", - "updated-at": "2025-03-15 22:59" + "slug": "nginx-config-snippet", + "created-at": "2022-05-24 00:00", + "updated-at": "2025-03-15 22:59", + "is-hide": "" }, { - "created-at": "2021-12-29 00:00", - "is-hide": "", - "slug": "vue-scrollbar-plugin", "title": "「Web 前端」Vue 使用滚动条插件", - "updated-at": "2025-03-15 23:15" + "slug": "vue-scrollbar-plugin", + "created-at": "2021-12-29 00:00", + "updated-at": "2025-03-15 23:15", + "is-hide": "" }, { - "created-at": "2021-12-11 00:00", - "is-hide": "", - "slug": "termux-jdk", "title": "「教程」在 Termux 中安装任意版本的 JDK", - "updated-at": "2025-03-16 15:45" + "slug": "termux-jdk", + "created-at": "2021-12-11 00:00", + "updated-at": "2025-03-16 15:45", + "is-hide": "" }, { - "created-at": "2021-11-28 00:00", - "is-hide": "", - "slug": "collection-windows-commands", "title": "「合集」Windows BAT CMD 常用命令", - "updated-at": "2025-03-16 15:47" + "slug": "collection-windows-commands", + "created-at": "2021-11-28 00:00", + "updated-at": "2025-03-16 15:47", + "is-hide": "" }, { - "created-at": "2021-11-10 00:00", - "is-hide": "", - "slug": "android-rdc-custom-resolution", "title": "「教程」Android 微软远程桌面客户端使用自定义分辨率", - "updated-at": "2025-03-16 15:50" + "slug": "android-rdc-custom-resolution", + "created-at": "2021-11-10 00:00", + "updated-at": "2025-03-16 15:50", + "is-hide": "" }, { - "created-at": "2021-10-09 00:00", - "is-hide": "", - "slug": "chromium-dev-tools", "title": "浏览器 DevTools(开发人员工具)部分实用功能介绍", - "updated-at": "2025-03-16 15:58" + "slug": "chromium-dev-tools", + "created-at": "2021-10-09 00:00", + "updated-at": "2025-03-16 15:58", + "is-hide": "" }, { - "created-at": "2021-07-09 00:00", - "is-hide": "", - "slug": "vue-cli-less-global-variables", "title": "「Web 前端」Vue CLI 配置 Less 全局变量", - "updated-at": "2025-03-15 23:19" + "slug": "vue-cli-less-global-variables", + "created-at": "2021-07-09 00:00", + "updated-at": "2025-03-15 23:19", + "is-hide": "" }, { - "created-at": "2021-05-03 00:00", - "is-hide": "", - "slug": "javascript-export-ncm-playlist-song-info", "title": "「JavaScript」提取(导出)网易云音乐歌单歌曲列表信息为文件", - "updated-at": "2025-03-16 16:12" + "slug": "javascript-export-ncm-playlist-song-info", + "created-at": "2021-05-03 00:00", + "updated-at": "2025-03-16 16:12", + "is-hide": "" }, { - "created-at": "2021-02-20 00:00", - "is-hide": "", - "slug": "temporarily-set-java-path", "title": "临时设置 Java 环境变量(PATH)", - "updated-at": "2025-03-16 16:10" + "slug": "temporarily-set-java-path", + "created-at": "2021-02-20 00:00", + "updated-at": "2025-03-16 16:10", + "is-hide": "" }, { - "created-at": "2021-02-12 00:00", - "is-hide": "", - "slug": "windows-command-mklink", "title": "Windows mklink 命令", - "updated-at": "2025-03-15 22:30" + "slug": "windows-command-mklink", + "created-at": "2021-02-12 00:00", + "updated-at": "2025-03-15 22:30", + "is-hide": "" }, { - "created-at": "2021-02-10 00:00", - "is-hide": "", - "slug": "windows-command-forfiles", "title": "Windows forfiles 命令", - "updated-at": "2025-03-16 16:08" + "slug": "windows-command-forfiles", + "created-at": "2021-02-10 00:00", + "updated-at": "2025-03-16 16:08", + "is-hide": "" }, { - "created-at": "2021-01-09 00:00", - "is-hide": "", - "slug": "ubuntu-20-04-netplan", "title": "记一次 Ubuntu 20.04 双网卡配置过程", - "updated-at": "2025-03-16 15:59" + "slug": "ubuntu-20-04-netplan", + "created-at": "2021-01-09 00:00", + "updated-at": "2025-03-16 15:59", + "is-hide": "" }, { - "created-at": "2020-11-10 00:00", - "is-hide": "", - "slug": "windows-useful-tools", "title": "Windows 实用小工具推荐", - "updated-at": "2025-03-16 16:19" + "slug": "windows-useful-tools", + "created-at": "2020-11-10 00:00", + "updated-at": "2025-03-16 16:19", + "is-hide": "" }, { - "created-at": "2020-10-25 00:00", - "is-hide": "", - "slug": "linux-ssh-allow-or-deny-user", "title": "Linux 允许或禁止指定用户进行 SSH 登录", - "updated-at": "2025-03-16 16:06" + "slug": "linux-ssh-allow-or-deny-user", + "created-at": "2020-10-25 00:00", + "updated-at": "2025-03-16 16:06", + "is-hide": "" }, { - "created-at": "2020-06-28 00:00", - "is-hide": "", - "slug": "javascript-merge-dynmap-images", "title": "「JavaScript」将 Dynmap 网页上的地图图片合成为一张图", - "updated-at": "2025-03-16 16:26" + "slug": "javascript-merge-dynmap-images", + "created-at": "2020-06-28 00:00", + "updated-at": "2025-03-16 16:26", + "is-hide": "" }, { - "created-at": "2020-05-24 00:00", - "is-hide": "", - "slug": "elementary-os-5-1-hera-setup-uefi", "title": "安装 elementary OS 后没有自动写入 EFI 引导", - "updated-at": "2025-03-16 16:29" + "slug": "elementary-os-5-1-hera-setup-uefi", + "created-at": "2020-05-24 00:00", + "updated-at": "2025-03-16 16:29", + "is-hide": "" }, { - "created-at": "2020-05-15 00:00", - "is-hide": "", - "slug": "query-domain-srv-records", "title": "在 Linux Windows 查询域名的 SRV 记录", - "updated-at": "2025-03-16 16:03" + "slug": "query-domain-srv-records", + "created-at": "2020-05-15 00:00", + "updated-at": "2025-03-16 16:03", + "is-hide": "" }, { - "created-at": "2020-05-06 00:00", - "is-hide": "", - "slug": "minecraft-custom-sounds-resourcepack", "title": "「Minecraft」自定义声音资源包", - "updated-at": "2025-03-16 17:46" + "slug": "minecraft-custom-sounds-resourcepack", + "created-at": "2020-05-06 00:00", + "updated-at": "2025-03-16 17:46", + "is-hide": "" }, { - "created-at": "2020-03-02 00:00", - "is-hide": "", - "slug": "windows-run-minecraft-with-discrete-graphics-card", "title": "Windows 10 设置独立显卡运行 Minecraft", - "updated-at": "2025-03-16 16:02" + "slug": "windows-run-minecraft-with-discrete-graphics-card", + "created-at": "2020-03-02 00:00", + "updated-at": "2025-03-16 16:02", + "is-hide": "" }, { - "created-at": "2020-02-05 00:00", - "is-hide": "", - "slug": "obs-fullscreen-capture-failed", "title": "解决 OBS 显示器捕获黑屏的三个方法", - "updated-at": "2025-03-16 16:23" + "slug": "obs-fullscreen-capture-failed", + "created-at": "2020-02-05 00:00", + "updated-at": "2025-03-16 16:23", + "is-hide": "" }, { - "created-at": "2019-12-04 00:00", - "is-hide": "", - "slug": "html5-filereader-load-file", "title": "HTML5 使用 FileReader 读取并预览文件内容", - "updated-at": "2025-03-16 18:27" + "slug": "html5-filereader-load-file", + "created-at": "2019-12-04 00:00", + "updated-at": "2025-03-16 18:27", + "is-hide": "" }, { - "created-at": "2019-11-05 00:00", - "is-hide": "", - "slug": "windows-10-explorer-ogg-file-lag", "title": "解决 Windows 10 资源管理器操作 OGG 文件时未响应的问题", - "updated-at": "2025-03-16 16:28" + "slug": "windows-10-explorer-ogg-file-lag", + "created-at": "2019-11-05 00:00", + "updated-at": "2025-03-16 16:28", + "is-hide": "" }, { - "created-at": "2019-11-03 00:00", - "is-hide": "", - "slug": "plotsquared-minecraft-default-generator", "title": "PlotSquared 创建 Minecraft 默认地形的地皮世界", - "updated-at": "2025-03-16 18:30" + "slug": "plotsquared-minecraft-default-generator", + "created-at": "2019-11-03 00:00", + "updated-at": "2025-03-16 18:30", + "is-hide": "" }, { - "created-at": "2019-10-29 00:00", - "is-hide": "", - "slug": "javascript-snack-game", "title": "「Web 前端」原生 JavaScript 实现贪吃蛇游戏", - "updated-at": "2025-03-16 16:21" + "slug": "javascript-snack-game", + "created-at": "2019-10-29 00:00", + "updated-at": "2025-03-16 16:21", + "is-hide": "" }, { - "created-at": "2019-10-25 00:00", - "is-hide": "", - "slug": "windows-command-prompt-file-checksum", "title": "Windows 通过命令提示符校验文件(MD5、SHA1等)", - "updated-at": "2025-03-16 18:33" + "slug": "windows-command-prompt-file-checksum", + "created-at": "2019-10-25 00:00", + "updated-at": "2025-03-16 18:33", + "is-hide": "" }, { - "created-at": "2019-09-10 00:00", - "is-hide": "", - "slug": "jsdoc-learning", "title": "「JavaScript」JSDoc 学习记录", - "updated-at": "2025-03-15 23:25" + "slug": "jsdoc-learning", + "created-at": "2019-09-10 00:00", + "updated-at": "2025-03-15 23:25", + "is-hide": "" }, { - "created-at": "2019-09-07 00:00", - "is-hide": "", - "slug": "frost-navigation", "title": "「工具」Frost 网址导航 V2", - "updated-at": "2025-03-16 18:36" + "slug": "frost-navigation", + "created-at": "2019-09-07 00:00", + "updated-at": "2025-03-16 18:36", + "is-hide": "" }, { - "created-at": "2019-08-29 00:00", - "is-hide": "", - "slug": "minecraft-in-game-info-xml", "title": "「Minecraft」In-Game Info XML 样式", - "updated-at": "2025-03-16 18:39" + "slug": "minecraft-in-game-info-xml", + "created-at": "2019-08-29 00:00", + "updated-at": "2025-03-16 18:39", + "is-hide": "" }, { - "created-at": "2019-07-09 00:00", - "is-hide": "", - "slug": "minecraft-mod-funny-items", "title": "「Minecraft」Funny Items Mod", - "updated-at": "2025-03-16 18:44" + "slug": "minecraft-mod-funny-items", + "created-at": "2019-07-09 00:00", + "updated-at": "2025-03-16 18:44", + "is-hide": "" }, { - "created-at": "2019-06-12 00:00", - "is-hide": "", - "slug": "npm-yarn-vuecli-common-problems-and-solutions", "title": "NPM、Yarn、Vue CLI 的常见问题以及解决方法", - "updated-at": "2025-03-15 23:02" + "slug": "npm-yarn-vuecli-common-problems-and-solutions", + "created-at": "2019-06-12 00:00", + "updated-at": "2025-03-15 23:02", + "is-hide": "" }, { - "created-at": "2019-05-27 00:00", - "is-hide": "", - "slug": "minecraft-10th-article", "title": "Minecraft 十周年,感谢有你", - "updated-at": "2025-03-17 00:18" + "slug": "minecraft-10th-article", + "created-at": "2019-05-27 00:00", + "updated-at": "2025-03-17 00:18", + "is-hide": "" }, { - "created-at": "2019-05-12 00:00", - "is-hide": "", - "slug": "dynmapforge-warsftbdynmap-compatible", "title": "「Minecraft」修改 Dynmap 让 WarsFtbDynmap 能正常使用", - "updated-at": "2025-03-16 19:02" + "slug": "dynmapforge-warsftbdynmap-compatible", + "created-at": "2019-05-12 00:00", + "updated-at": "2025-03-16 19:02", + "is-hide": "" }, { - "created-at": "2019-04-27 00:00", - "is-hide": "", - "slug": "tutorial-minecraft-server-on-android", "title": "「教程」在 Android 手机上开 Minecraft 服务器", - "updated-at": "2025-03-16 19:05" + "slug": "tutorial-minecraft-server-on-android", + "created-at": "2019-04-27 00:00", + "updated-at": "2025-03-16 19:05", + "is-hide": "" }, { - "created-at": "2019-03-15 00:00", - "is-hide": "", - "slug": "translation-universe-guard-2", "title": "「Minecraft」UniverseGuard 2 插件部分提示文本汉化", - "updated-at": "2025-03-16 19:07" + "slug": "translation-universe-guard-2", + "created-at": "2019-03-15 00:00", + "updated-at": "2025-03-16 19:07", + "is-hide": "" }, { - "created-at": "2019-02-20 00:00", - "is-hide": "", - "slug": "minecraft-java-edition-commands", "title": "Minecraft Java Edition 命令合集", - "updated-at": "2025-03-16 22:26" + "slug": "minecraft-java-edition-commands", + "created-at": "2019-02-20 00:00", + "updated-at": "2025-03-16 22:26", + "is-hide": "" }, { - "created-at": "2019-02-16 00:00", - "is-hide": "", - "slug": "interesting-chinese-sentences", "title": "一些有趣的中文句子(中文博大精深)", - "updated-at": "2025-03-16 19:19" + "slug": "interesting-chinese-sentences", + "created-at": "2019-02-16 00:00", + "updated-at": "2025-03-16 19:19", + "is-hide": "" }, { - "created-at": "2018-12-24 00:00", - "is-hide": "", - "slug": "video-av38895913", "title": "「生活」中国人到底有多拼?", - "updated-at": "2025-03-16 16:56" + "slug": "video-av38895913", + "created-at": "2018-12-24 00:00", + "updated-at": "2025-03-16 16:56", + "is-hide": "" }, { - "created-at": "2018-12-20 00:00", - "is-hide": "", - "slug": "collection-linux-commands", "title": "「合集」Linux 常用命令", - "updated-at": "2025-03-16 19:28" + "slug": "collection-linux-commands", + "created-at": "2018-12-20 00:00", + "updated-at": "2025-03-16 19:28", + "is-hide": "" }, { - "created-at": "2018-12-17 00:00", - "is-hide": "", - "slug": "tutorial-custom-block-in-minecart", "title": "「Minecraft」矿车内显示自定义方块", - "updated-at": "2025-03-16 19:38" + "slug": "tutorial-custom-block-in-minecart", + "created-at": "2018-12-17 00:00", + "updated-at": "2025-03-16 19:38", + "is-hide": "" }, { - "created-at": "2018-11-16 00:00", - "is-hide": "", - "slug": "recommend-usefulwebsites", "title": "「推荐」实用网站", - "updated-at": "2025-03-19 11:43" + "slug": "recommend-usefulwebsites", + "created-at": "2018-11-16 00:00", + "updated-at": "2025-03-19 11:43", + "is-hide": "" }, { - "created-at": "2018-11-15 00:00", - "is-hide": "", - "slug": "windows-rdp-custom-port-and-60fps", "title": "修改 Windows 远程桌面端口以及开启 60FPS", - "updated-at": "2025-03-16 19:12" + "slug": "windows-rdp-custom-port-and-60fps", + "created-at": "2018-11-15 00:00", + "updated-at": "2025-03-16 19:12", + "is-hide": "" }, { - "created-at": "2018-11-11 00:00", - "is-hide": "", - "slug": "test", "title": "内容格式测试", - "updated-at": "2025-10-07 18:32" - }, - { + "slug": "test", "created-at": "2018-11-11 00:00", - "is-hide": "", - "slug": "warning-network-error", + "updated-at": "2025-10-07 18:32", + "is-hide": "" + }, + { "title": "「提示」网络连接不可用", - "updated-at": "2025-03-16 21:36" + "slug": "warning-network-error", + "created-at": "2018-11-11 00:00", + "updated-at": "2025-03-16 21:36", + "is-hide": "" }, { - "created-at": "2018-11-08 00:00", - "is-hide": "", - "slug": "video-honor-your-father-and-your-mother", "title": "「公益」当孝敬父母", - "updated-at": "2025-03-17 00:50" + "slug": "video-honor-your-father-and-your-mother", + "created-at": "2018-11-08 00:00", + "updated-at": "2025-03-17 00:50", + "is-hide": "" }, { - "created-at": "2018-11-05 00:00", - "is-hide": "", - "slug": "video-shanghai-a-city-on-the-rise", "title": "「生活」上海,不夜的精彩", - "updated-at": "2025-03-16 21:44" + "slug": "video-shanghai-a-city-on-the-rise", + "created-at": "2018-11-05 00:00", + "updated-at": "2025-03-16 21:44", + "is-hide": "" }, { - "created-at": "2018-11-04 00:00", - "is-hide": "", - "slug": "collection-javascript-code", "title": "「合集」常用的 JavaScript 代码", - "updated-at": "2025-03-16 22:02" + "slug": "collection-javascript-code", + "created-at": "2018-11-04 00:00", + "updated-at": "2025-03-16 22:02", + "is-hide": "" }, { - "created-at": "2018-11-02 00:00", - "is-hide": "", - "slug": "useful-css-javascript-libraries", "title": "「合集」实用的 CSS、JavaScript 库", - "updated-at": "2025-03-15 23:13" + "slug": "useful-css-javascript-libraries", + "created-at": "2018-11-02 00:00", + "updated-at": "2025-03-15 23:13", + "is-hide": "" }, { - "created-at": "2018-10-31 00:00", - "is-hide": "", - "slug": "mobile-qq-page-links", "title": "移动端 QQ & 微信页面链接", - "updated-at": "2025-03-16 22:14" + "slug": "mobile-qq-page-links", + "created-at": "2018-10-31 00:00", + "updated-at": "2025-03-16 22:14", + "is-hide": "" }, { - "created-at": "2018-10-24 00:00", - "is-hide": "", - "slug": "classical-quotations", "title": "经典句子、经典语录", - "updated-at": "2025-03-19 11:46" + "slug": "classical-quotations", + "created-at": "2018-10-24 00:00", + "updated-at": "2025-03-19 11:46", + "is-hide": "" }, { - "created-at": "2018-10-22 00:00", - "is-hide": "", - "slug": "windows-vbs-code", "title": "「合集」VBS 代码", - "updated-at": "2025-03-16 22:06" + "slug": "windows-vbs-code", + "created-at": "2018-10-22 00:00", + "updated-at": "2025-03-16 22:06", + "is-hide": "" }, { - "created-at": "2018-10-14 00:00", - "is-hide": "", - "slug": "software-chrome-urls", "title": "Chrome URLs 列表(List of Chrome URLs)", - "updated-at": "2025-03-16 22:17" + "slug": "software-chrome-urls", + "created-at": "2018-10-14 00:00", + "updated-at": "2025-03-16 22:17", + "is-hide": "" }, { - "created-at": "2018-10-05 00:00", - "is-hide": "", - "slug": "video-ppt-gzl9-lcd", "title": "「还原」使用 PPT 还原广州地铁 9 号线 LCD(单站)", - "updated-at": "2025-03-17 11:49" + "slug": "video-ppt-gzl9-lcd", + "created-at": "2018-10-05 00:00", + "updated-at": "2025-03-17 11:49", + "is-hide": "" }, { - "created-at": "2018-09-30 00:00", - "is-hide": "", - "slug": "minecraft-links", "title": "「Minecraft」相关链接", - "updated-at": "2025-03-16 22:23" - }, - { + "slug": "minecraft-links", "created-at": "2018-09-30 00:00", - "is-hide": "", - "slug": "qqpet-html5", + "updated-at": "2025-03-16 22:23", + "is-hide": "" + }, + { "title": "QQ 宠物 HTML5 版", - "updated-at": "2025-03-16 22:21" + "slug": "qqpet-html5", + "created-at": "2018-09-30 00:00", + "updated-at": "2025-03-16 22:21", + "is-hide": "" }, { - "created-at": "2018-09-20 00:00", - "is-hide": "", - "slug": "description-cors-preflight-request", "title": "CORS 预检请求(preflight request)", - "updated-at": "2025-03-15 23:08" + "slug": "description-cors-preflight-request", + "created-at": "2018-09-20 00:00", + "updated-at": "2025-03-15 23:08", + "is-hide": "" }, { - "created-at": "2018-08-16 00:00", - "is-hide": "", - "slug": "baidu-mobile-links", "title": "百度触屏版首页不同样式的页面", - "updated-at": "2025-03-16 22:32" + "slug": "baidu-mobile-links", + "created-at": "2018-08-16 00:00", + "updated-at": "2025-03-16 22:32", + "is-hide": "" }, { - "created-at": "2018-08-12 00:00", - "is-hide": "", - "slug": "windows-copy-command-usage", "title": "Windows copy 命令的妙用(文件里藏文件、合并文件)", - "updated-at": "2025-03-29 18:30" + "slug": "windows-copy-command-usage", + "created-at": "2018-08-12 00:00", + "updated-at": "2025-03-29 18:30", + "is-hide": "" }, { - "created-at": "2018-08-09 00:00", - "is-hide": "", - "slug": "description-date-time-string-format", "title": "包含 T 和 Z 的日期时间字符串格式", - "updated-at": "2025-03-15 23:11" + "slug": "description-date-time-string-format", + "created-at": "2018-08-09 00:00", + "updated-at": "2025-03-15 23:11", + "is-hide": "" }, { - "created-at": "2018-07-22 00:00", - "is-hide": "", - "slug": "tutorial-signpicture", "title": "「Minecraft」SignPicture(告示牌图片)教程", - "updated-at": "2025-03-16 22:19" + "slug": "tutorial-signpicture", + "created-at": "2018-07-22 00:00", + "updated-at": "2025-03-16 22:19", + "is-hide": "" }, { - "created-at": "2018-07-10 00:00", - "is-hide": "", - "slug": "minecraft-java-server-options", "title": "Minecraft Java 版服务端启动参数选项", - "updated-at": "2025-03-16 15:42" + "slug": "minecraft-java-server-options", + "created-at": "2018-07-10 00:00", + "updated-at": "2025-03-16 15:42", + "is-hide": "" }, { - "created-at": "2018-07-02 00:00", - "is-hide": "", - "slug": "minecraft-op-permission-level", "title": "「Minecraft」OP 权限等级", - "updated-at": "2025-03-19 12:35" - }, - { + "slug": "minecraft-op-permission-level", "created-at": "2018-07-02 00:00", - "is-hide": "", - "slug": "windows-antivirus-ability-test", + "updated-at": "2025-03-19 12:35", + "is-hide": "" + }, + { "title": "杀毒软件能力测试", - "updated-at": "2025-03-19 11:49" + "slug": "windows-antivirus-ability-test", + "created-at": "2018-07-02 00:00", + "updated-at": "2025-03-19 11:49", + "is-hide": "" }, { - "created-at": "2018-07-01 00:00", - "is-hide": "", - "slug": "wtp-video-show-201802-201807", "title": "「MC」麦子茶会展示(201802 - 201807)", - "updated-at": "2025-03-22 22:14" + "slug": "wtp-video-show-201802-201807", + "created-at": "2018-07-01 00:00", + "updated-at": "2025-03-22 22:14", + "is-hide": "" }, { - "created-at": "2018-05-29 00:00", - "is-hide": "", - "slug": "wtp-video-wr-l1-preview-201805", "title": "「MC」麦子轨道交通 1 号线工程预览(2018-05)", - "updated-at": "2025-03-22 22:15" + "slug": "wtp-video-wr-l1-preview-201805", + "created-at": "2018-05-29 00:00", + "updated-at": "2025-03-22 22:15", + "is-hide": "" }, { - "created-at": "2018-05-15 00:00", - "is-hide": "", - "slug": "text-english-sentences", "title": "英语句子", - "updated-at": "2025-03-16 19:58" + "slug": "text-english-sentences", + "created-at": "2018-05-15 00:00", + "updated-at": "2025-03-16 19:58", + "is-hide": "" }, { - "created-at": "2018-05-02 00:00", - "is-hide": "", - "slug": "forge-auto-remove-erroring-entities", "title": "「Minecraft」自动修复部分由异常实体或异常方块实体导致的崩溃", - "updated-at": "2025-03-16 19:22" + "slug": "forge-auto-remove-erroring-entities", + "created-at": "2018-05-02 00:00", + "updated-at": "2025-03-16 19:22", + "is-hide": "" }, { - "created-at": "2018-02-20 00:00", - "is-hide": "", - "slug": "minecraft-official-website-login-problem", "title": "使用 gooreplacer 插件解决国内在 Minecraft 官网不能登录的问题", - "updated-at": "2025-03-16 18:53" - }, - { + "slug": "minecraft-official-website-login-problem", "created-at": "2018-02-20 00:00", - "is-hide": "", - "slug": "windows-bat-anti-autorun-virus", + "updated-at": "2025-03-16 18:53", + "is-hide": "" + }, + { "title": "「BAT工具」防止病毒在打开U盘时自动运行", - "updated-at": "2025-03-16 21:41" + "slug": "windows-bat-anti-autorun-virus", + "created-at": "2018-02-20 00:00", + "updated-at": "2025-03-16 21:41", + "is-hide": "" }, { - "created-at": "2017-11-06 00:00", - "is-hide": "", - "slug": "video-2017-guangzhou-international-light-festival-1", "title": "「摄影」2017 广州国际灯光节(固定机位夜景)", - "updated-at": "2025-03-16 19:46" + "slug": "video-2017-guangzhou-international-light-festival-1", + "created-at": "2017-11-06 00:00", + "updated-at": "2025-03-16 19:46", + "is-hide": "" }, { - "created-at": "2017-08-01 00:00", - "is-hide": "", - "slug": "wtp-video-wr-l1-2", "title": "「MC」麦子轨道交通 1 号线 2 期展示", - "updated-at": "2025-03-22 22:15" + "slug": "wtp-video-wr-l1-2", + "created-at": "2017-08-01 00:00", + "updated-at": "2025-03-22 22:15", + "is-hide": "" }, { - "created-at": "2017-05-02 00:00", - "is-hide": "", - "slug": "chromium-startup-arguments", "title": "Chromium 内核浏览器命令行启动参数", - "updated-at": "2025-03-19 11:40" + "slug": "chromium-startup-arguments", + "created-at": "2017-05-02 00:00", + "updated-at": "2025-03-19 11:40", + "is-hide": "" }, { - "created-at": "2017-03-16 00:00", - "is-hide": "", - "slug": "wtp-video-wr-l1-1", "title": "「MC」麦子轨道交通 1 号线 1 期展示", - "updated-at": "2025-03-22 22:15" + "slug": "wtp-video-wr-l1-1", + "created-at": "2017-03-16 00:00", + "updated-at": "2025-03-22 22:15", + "is-hide": "" }, { - "created-at": "2016-08-30 00:00", - "is-hide": "", - "slug": "minecraft-optimize-fps", "title": "「优化」使你的 Minecraft 玩起来更流畅", - "updated-at": "2025-02-20 23:04" + "slug": "minecraft-optimize-fps", + "created-at": "2016-08-30 00:00", + "updated-at": "2025-02-20 23:04", + "is-hide": "" }, { - "created-at": "2015-04-18 00:00", - "is-hide": "", - "slug": "record-gamecomplete", "title": "「记录」游戏通关记录", - "updated-at": "2025-03-19 12:32" + "slug": "record-gamecomplete", + "created-at": "2015-04-18 00:00", + "updated-at": "2025-03-19 12:32", + "is-hide": "" }, { - "created-at": "2013-03-22 00:00", - "is-hide": "", - "slug": "video-minecraft-played-together", "title": "「游戏」那些年,我们一起玩过的 MC", - "updated-at": "2025-03-17 00:10" + "slug": "video-minecraft-played-together", + "created-at": "2013-03-22 00:00", + "updated-at": "2025-03-17 00:10", + "is-hide": "" } ] \ No newline at end of file diff --git a/docs/content/android-rdc-custom-resolution.md b/docs/content/android-rdc-custom-resolution.md index 0a8f0b4..b46ef38 100644 --- a/docs/content/android-rdc-custom-resolution.md +++ b/docs/content/android-rdc-custom-resolution.md @@ -1,5 +1,5 @@ --- -title: 「教程」Android 微软远程桌面客户端使用自定义分辨率 +title: "「教程」Android 微软远程桌面客户端使用自定义分辨率" date: 2025-03-16T15:48:43Z lastmod: 2025-03-16T15:50:59Z tags: [Windows,教程,Android,远程桌面] @@ -11,7 +11,7 @@ tags: [Windows,教程,Android,远程桌面] 通过远程桌面连接 Windows 时,不能在系统中修改分辨率,只能在连接远程桌面的工具中设置。 -对于 Windows 上的“远程桌面连接”工具,可在它的 `显示 - 显示配置` 中修改(只能选择给出的分辨率),也可以在远程桌面配置文件(`.rdp`)中修改(可以设置为任意合适的分辨率)。 +对于 Windows 上的“远程桌面连接”工具,可在它的 `显示 - 显示配置`​ 中修改(只能选择给出的分辨率),也可以在远程桌面配置文件(`.rdp`)中修改(可以设置为任意合适的分辨率)。 而对于 Android 系统上的“RD Client”,只能选择它给出的分辨率(目前还不支持手动输入分辨率数值),且由于给出的分辨率与手机的分辨率相关,在全面屏手机上使用的时候会比较奇怪(例如不能设置为 16:9 的分辨率)。 @@ -37,7 +37,7 @@ tags: [Windows,教程,Android,远程桌面] ![截图](assets/network-asset-1_01_rdc_add-20250316154915-1rwvoe6.png "截图") 3. 打开安装的 MiXplorer,授予 ROOT 权限。 -4. 进入路径 `/data/data/com.microsoft.rdc.androidx/databases`。 +4. 进入路径 `/data/data/com.microsoft.rdc.androidx/databases`​。 ​![截图](assets/network-asset-1_02_file_path-20250316154915-w3z5ov1.png "截图") 5. 使用 MiXplorer 的“SQLite Editor”工具打开文件夹中的 `RDPConnection.db` 文件。 @@ -45,7 +45,7 @@ tags: [Windows,教程,Android,远程桌面] > ![截图](assets/network-asset-1_03_open-20250316154916-m1ql94t.png "截图") -6. 点击左上方的下拉菜单,切换到 `resolution_table` 项。 +6. 点击左上方的下拉菜单,切换到 `resolution_table`​ 项。 此时可以看到刚刚在 RD Client 中添加的几个分辨率项。 ​![截图](assets/network-asset-1_04_table-20250316154916-4boacd2.png "截图") 7. 长按需要修改的项进行编辑,点击“UPDATE”保存。 @@ -69,7 +69,7 @@ tags: [Windows,教程,Android,远程桌面] 2. 解压下载的 ADB 工具包(文件路径最好不包含中文)。 3. 启动“命令提示符”(CMD),执行 `CD /D 文件夹路径` 命令,将工作目录切换到 ADB 工具所在的文件夹。 - > 例如 `CD /D D:\Development\adb`​ + > 例如 `CD /D D:\Development\adb` > 4. 使用 USB 数据线将手机与电脑连接。 5. 在手机系统的“开发者选项”中开启“USB 调试”。 @@ -83,17 +83,17 @@ tags: [Windows,教程,Android,远程桌面] List of devices attached 2ab5d50e device ``` -7. 执行 `adb shell` 命令,进入 Shell 环境。 +7. 执行 `adb shell`​ 命令,进入 Shell 环境。 ​![截图](assets/network-asset-2_03_adb_shell-20250316154917-0wv5gpl.png "截图") -8. 执行 `wm size` 命令,查看和记下设备的**默认分辨率**,还原的时候会用到。 +8. 执行 `wm size`​ 命令,查看和记下设备的**默认分辨率**,还原的时候会用到。 ​![截图](assets/network-asset-2_04_original_size-20250316154917-xxth547.png "截图") 9. 执行 `wm size 宽x高` 命令,设置想要在远程桌面中使用的分辨率。 - > “宽”和“高”对应手机竖屏状态下的数值(请参考默认分辨率),例如 `wm size 1080x1920`。 + > “宽”和“高”对应手机竖屏状态下的数值(请参考默认分辨率),例如 `wm size 1080x1920`​。 > 不建议设置过大或过小的分辨率,以免导致系统出错。 > 执行命令前,请务必**检查确认无误**。 > 执行命令后,**手机的分辨率会变为指定的值**。 - > 如果不小心设置错了,可以尝试执行 `wm size reset` 或 `wm size 默认分辨率` 命令进行还原。 + > 如果不小心设置错了,可以尝试执行 `wm size reset`​ 或 `wm size 默认分辨率` 命令进行还原。 > ![截图](assets/network-asset-2_05_1_wm_size-20250316154917-ilz94fw.png "截图") @@ -112,12 +112,12 @@ tags: [Windows,教程,Android,远程桌面] ​![截图](assets/network-asset-2_07_2_app-20250316154918-oseljk6.jpg "截图") ​![截图](assets/network-asset-2_08_1_wm_size-20250316154918-s58a8az.png "截图") ​![截图](assets/network-asset-2_08_2_app-20250316154918-28ql07i.jpg "截图") -14. 保存完所有需要的分辨率后,执行 `wm size reset` 或 `wm size 默认分辨率` 命令,把手机的分辨率还原为默认值。 +14. 保存完所有需要的分辨率后,执行 `wm size reset`​ 或 `wm size 默认分辨率` 命令,把手机的分辨率还原为默认值。 15. 重新打开客户端,保存的分辨率都在,且有效果。 ​![截图](assets/network-asset-2_09_app-20250316154918-8s0r8ec.jpg "截图") -16. 执行 `exit` 命令,退出 Shell 环境。 +16. 执行 `exit`​ 命令,退出 Shell 环境。 ​![截图](assets/network-asset-2_10_exit-20250316154918-nu3c97e.png "截图") -17. 执行 `adb kill-server` 命令,结束 ADB 服务。 +17. 执行 `adb kill-server`​ 命令,结束 ADB 服务。 ​![截图](assets/network-asset-2_11_kill_server-20250316154918-o1l309g.png "截图") 18. 现在可以关闭 USB 调试,然后断开手机与电脑的连接了。 diff --git a/docs/content/assets/application-file-20250213095330-718k9j6.png b/docs/content/assets/application-file-20250213095330-718k9j6.png new file mode 100644 index 0000000..85ece9b Binary files /dev/null and b/docs/content/assets/application-file-20250213095330-718k9j6.png differ diff --git a/docs/content/assets/extract-files-20250213095303-aywmav3.png b/docs/content/assets/extract-files-20250213095303-aywmav3.png new file mode 100644 index 0000000..b25ad99 Binary files /dev/null and b/docs/content/assets/extract-files-20250213095303-aywmav3.png differ diff --git a/docs/content/assets/image-20250715091122-81qrd27.png b/docs/content/assets/image-20250715091122-81qrd27.png new file mode 100644 index 0000000..d50f94c Binary files /dev/null and b/docs/content/assets/image-20250715091122-81qrd27.png differ diff --git a/docs/content/assets/image-20250715091338-mnzarei.png b/docs/content/assets/image-20250715091338-mnzarei.png new file mode 100644 index 0000000..b7a6a66 Binary files /dev/null and b/docs/content/assets/image-20250715091338-mnzarei.png differ diff --git a/docs/content/assets/image-20250715091554-u8q9frs.png b/docs/content/assets/image-20250715091554-u8q9frs.png new file mode 100644 index 0000000..b72af8f Binary files /dev/null and b/docs/content/assets/image-20250715091554-u8q9frs.png differ diff --git a/docs/content/assets/image-20250715091715-ct5nj3e.png b/docs/content/assets/image-20250715091715-ct5nj3e.png new file mode 100644 index 0000000..8ea24f1 Binary files /dev/null and b/docs/content/assets/image-20250715091715-ct5nj3e.png differ diff --git a/docs/content/assets/image-20250717170359-41u38nf.png b/docs/content/assets/image-20250717170359-41u38nf.png new file mode 100644 index 0000000..3cecd0d Binary files /dev/null and b/docs/content/assets/image-20250717170359-41u38nf.png differ diff --git a/docs/content/assets/mirror-download-20250213095240-umr8ocy.png b/docs/content/assets/mirror-download-20250213095240-umr8ocy.png new file mode 100644 index 0000000..92c5630 Binary files /dev/null and b/docs/content/assets/mirror-download-20250213095240-umr8ocy.png differ diff --git a/docs/content/assets/success-20250213095358-7jrshcl.png b/docs/content/assets/success-20250213095358-7jrshcl.png new file mode 100644 index 0000000..8e8fb3d Binary files /dev/null and b/docs/content/assets/success-20250213095358-7jrshcl.png differ diff --git a/docs/content/assets/windows-download-20250213095228-60or0qq.png b/docs/content/assets/windows-download-20250213095228-60or0qq.png new file mode 100644 index 0000000..1a2cb6c Binary files /dev/null and b/docs/content/assets/windows-download-20250213095228-60or0qq.png differ diff --git a/docs/content/baidu-mobile-links.md b/docs/content/baidu-mobile-links.md index 06600a9..633f92c 100644 --- a/docs/content/baidu-mobile-links.md +++ b/docs/content/baidu-mobile-links.md @@ -1,5 +1,5 @@ --- -title: 百度触屏版首页不同样式的页面 +title: "百度触屏版首页不同样式的页面" date: 2025-03-16T22:31:54Z lastmod: 2025-03-16T22:32:26Z tags: [链接,网站] @@ -7,8 +7,8 @@ tags: [链接,网站] # 百度触屏版首页不同样式的页面 -- 普通版:`https://m.baidu.com`​ -- 简版一:`https://m.baidu.com/?wpo=btmfast&pu=sz%401321_000`​ -- 简版二:`https://m.baidu.com/?wpo=btmfast&pu=sz%401325_000`​ +- 普通版:`https://m.baidu.com` +- 简版一:`https://m.baidu.com/?wpo=btmfast&pu=sz%401321_000` +- 简版二:`https://m.baidu.com/?wpo=btmfast&pu=sz%401325_000` ‍ diff --git a/docs/content/bluefox-nx1-flash-gsi.md b/docs/content/bluefox-nx1-flash-gsi.md index 49695e1..70d152d 100644 --- a/docs/content/bluefox-nx1-flash-gsi.md +++ b/docs/content/bluefox-nx1-flash-gsi.md @@ -1,5 +1,5 @@ --- -title: 蓝狐(BLUEFOX)NX1 刷 GSI 系统 +title: "蓝狐(BLUEFOX)NX1 刷 GSI 系统" date: 2025-07-02T22:27:40Z lastmod: 2025-07-03T21:54:29Z tags: [Android,GSI,刷机,系统] @@ -21,11 +21,11 @@ tags: [Android,GSI,刷机,系统] 手机关机,打开 MTK Client 软件,手机同时按住“音量加”和“音量减”键,然后通过数据线连接到电脑。 -![image](assets/image-20250702233608-t3r8wve.png)​ +![image](assets/image-20250702233608-t3r8wve.png) 使用 MTK Client 的“Read partition”功能读出除“userdata”(用户数据)以外的分区,备份,以便刷坏了可以还原。 -![image](assets/image-20250702224334-vyg3sj8.png)​ +![image](assets/image-20250702224334-vyg3sj8.png) ### 二、解锁 BootLoader @@ -39,7 +39,7 @@ tags: [Android,GSI,刷机,系统] 然后执行 `adb reboot bootloader` 命令,等待几秒钟,直到设备重新启动进入引导加载程序。 -> 注意:进入 fastboot 模式后,大概率会因为没有驱动程序,执行 `fastboot` 命令失败,需要参考“[https://www.cnblogs.com/changweijinghu/p/16880803.html](https://www.cnblogs.com/changweijinghu/p/16880803.html)”解决。 +> 注意:进入 fastboot 模式后,大概率会因为没有驱动程序,执行 `fastboot`​ 命令失败,需要参考“[https://www.cnblogs.com/changweijinghu/p/16880803.html](https://www.cnblogs.com/changweijinghu/p/16880803.html)”解决。 > > 驱动程序下载地址:[获取 Google USB 驱动程序](https://developer.android.com/studio/run/win-usb) / [usb_driver_r13-windows.zip](https://dl.google.com/android/repository/usb_driver_r13-windows.zip) @@ -59,7 +59,7 @@ No (Volume Down): Do not unlock bootloader. 将下载的 GSI 文件包解压到 ADB 工具所在文件夹内。 -> 例如本文使用的 `aosp_arm64-exp-BP1A.250405.005.C1-13151952-61d23231.zip`,可以解压得到 `system.img` 和 `vbmeta.img` 这两个镜像文件。 +> 例如本文使用的 `aosp_arm64-exp-BP1A.250405.005.C1-13151952-61d23231.zip`​,可以解压得到 `system.img`​ 和 `vbmeta.img` 这两个镜像文件。 依次执行以下命令,刷入镜像: @@ -72,6 +72,6 @@ fastboot reboot > 注意:执行 `fastboot reboot fastboot` 命令后如果等待比较久都没出现“Finished”提示,则需要插拔一下数据线。 -![image](assets/image-20250702232252-k8k0r2r.png)​ +![image](assets/image-20250702232252-k8k0r2r.png) ‍ diff --git a/docs/content/calculation-test-code.md b/docs/content/calculation-test-code.md index ad6965e..b989cf2 100644 --- a/docs/content/calculation-test-code.md +++ b/docs/content/calculation-test-code.md @@ -1,5 +1,5 @@ --- -title: 运算速度测试代码 +title: "运算速度测试代码" date: 2025-02-11T20:55:04Z lastmod: 2025-02-20T22:58:29Z tags: [测试,代码片段] diff --git a/docs/content/canvas-library-fabric-js.md b/docs/content/canvas-library-fabric-js.md index be6359f..bed0d12 100644 --- a/docs/content/canvas-library-fabric-js.md +++ b/docs/content/canvas-library-fabric-js.md @@ -1,5 +1,5 @@ --- -title: Fabric.js 简单介绍和使用 +title: "Fabric.js 简单介绍和使用" date: 2025-03-15T22:51:22Z lastmod: 2025-03-15T22:55:55Z tags: [Web 前端,JavaScript,Canvas,Fabric.js] @@ -26,53 +26,53 @@ Fabric.js 是一个功能强大的 Canvas 库,它在原生 Canvas 之上提供 |名称|描述| | ------| ------------------------------| -|​`ActiveSelection`​|选区| -|​`Group`​|分组| -|​`Image`​|图像| -|​`Line`​|线段| -|​`Rect`​|矩形| -|​`Text`​|文本(不可编辑,不换行)| -|​`IText`​|可编辑文本(可编辑,不换行)| -|​`Textbox`​|文本框(可编辑,自动换行)| +|​`ActiveSelection`|选区| +|​`Group`|分组| +|​`Image`|图像| +|​`Line`|线段| +|​`Rect`|矩形| +|​`Text`|文本(不可编辑,不换行)| +|​`IText`|可编辑文本(可编辑,不换行)| +|​`Textbox`|文本框(可编辑,自动换行)| ### 常用属性 |属性|描述| | ------| ---------------------------------------------| -|​`type`​|对象类型| -|​`data`​|用于添加自定义的数据| -|​`originX`​|对象转换的水平原点(left / center / right)| -|​`originY`​|对象转换的垂直原点(top / center / bottom)| -|​`left`​|水平坐标| -|​`top`​|垂直坐标| -|​`width`​|宽度| -|​`height`​|高度| -|​`angle`​|旋转角度| -|​`scaleX`​|水平方向缩放倍数| -|​`scaleY`​|垂直方向缩放倍数| -|​`stroke`​|线段颜色| -|​`strokeWidth`​|线段宽度| -|​`fill`​|填充颜色| -|​`fontFamily`​|文本字体名称| -|​`fontSize`​|文本字体大小| -|​`opacity`​|对象的不透明度| -|​`borderColor`​|选区边框颜色| -|​`borderDashArray`​|选区边框虚线样式| -|​`borderOpacityWhenMoving`​|选区拖拽时的边框透明度| -|​`cornerColor`​|选区 “操作点” 填充颜色| -|​`cornerSize`​|选区 “操作点” 大小| -|​`cornerStrokeColor`​|选区 “操作点” 描边颜色| -|​`cornerStyle`​|选区 “操作点” 样式(circle / rect)| -|​`transparentCorners`​|选区 “操作点” 中心是否透明(只有描边)| -|​`hasControls`​|是否有 “操作点”| -|​`lockRotation`​|是否禁止旋转对象| -|​`lockMovementX`​|是否禁止水平移动对象| -|​`lockMovementY`​|是否禁止垂直移动对象| -|​`lockScaleX`​|是否禁止水平缩放对象| -|​`lockScaleY`​|是否禁止垂直缩放对象| -|​`selectable`​|是否可以被选中| -|​`hoverCursor`​|光标在对象上方时的样式(子对象优先)| -|​`moveCursor`​|光标在可移动对象上方时的样式(子对象优先)| +|​`type`|对象类型| +|​`data`|用于添加自定义的数据| +|​`originX`|对象转换的水平原点(left / center / right)| +|​`originY`|对象转换的垂直原点(top / center / bottom)| +|​`left`|水平坐标| +|​`top`|垂直坐标| +|​`width`|宽度| +|​`height`|高度| +|​`angle`|旋转角度| +|​`scaleX`|水平方向缩放倍数| +|​`scaleY`|垂直方向缩放倍数| +|​`stroke`|线段颜色| +|​`strokeWidth`|线段宽度| +|​`fill`|填充颜色| +|​`fontFamily`|文本字体名称| +|​`fontSize`|文本字体大小| +|​`opacity`|对象的不透明度| +|​`borderColor`|选区边框颜色| +|​`borderDashArray`|选区边框虚线样式| +|​`borderOpacityWhenMoving`|选区拖拽时的边框透明度| +|​`cornerColor`|选区 “操作点” 填充颜色| +|​`cornerSize`|选区 “操作点” 大小| +|​`cornerStrokeColor`|选区 “操作点” 描边颜色| +|​`cornerStyle`|选区 “操作点” 样式(circle / rect)| +|​`transparentCorners`|选区 “操作点” 中心是否透明(只有描边)| +|​`hasControls`|是否有 “操作点”| +|​`lockRotation`|是否禁止旋转对象| +|​`lockMovementX`|是否禁止水平移动对象| +|​`lockMovementY`|是否禁止垂直移动对象| +|​`lockScaleX`|是否禁止水平缩放对象| +|​`lockScaleY`|是否禁止垂直缩放对象| +|​`selectable`|是否可以被选中| +|​`hoverCursor`|光标在对象上方时的样式(子对象优先)| +|​`moveCursor`|光标在可移动对象上方时的样式(子对象优先)| ### 常用方法 @@ -80,35 +80,35 @@ Fabric.js 是一个功能强大的 Canvas 库,它在原生 Canvas 之上提供 |方法|描述| | ------| ------------------------------------| -|​`add(...object)`​|添加对象到画布| -|​`insertAt(object, index, nonSplicing)`​|添加对象到画布指定层级| -|​`moveTo(object, index)`​|更改对象所在的层级| -|​`remove(...object)`​|移除画布上的对象| -|​`discardActiveObject()`​|取消选中对象| -|​`getActiveObject()`​|获取选中的对象| -|​`setActiveObject()`​|更改选中的对象| -|​`getPointer()`​|传递事件对象,获取相对于画布的坐标| -|​`fire()`​|触发画布事件| -|​`forEachObject()`​|遍历画布上的对象| -|​`getZoom()`​|获取画布缩放比例| -|​`setZoom()`​|设置画布缩放比例| -|​`on()`​|监听画布事件| -|​`requestRenderAll()`​|刷新画布| -|​`set()`​|设置画布属性| +|​`add(...object)`|添加对象到画布| +|​`insertAt(object, index, nonSplicing)`|添加对象到画布指定层级| +|​`moveTo(object, index)`|更改对象所在的层级| +|​`remove(...object)`|移除画布上的对象| +|​`discardActiveObject()`|取消选中对象| +|​`getActiveObject()`|获取选中的对象| +|​`setActiveObject()`|更改选中的对象| +|​`getPointer()`|传递事件对象,获取相对于画布的坐标| +|​`fire()`|触发画布事件| +|​`forEachObject()`|遍历画布上的对象| +|​`getZoom()`|获取画布缩放比例| +|​`setZoom()`|设置画布缩放比例| +|​`on()`|监听画布事件| +|​`requestRenderAll()`|刷新画布| +|​`set()`|设置画布属性| #### 对象(Object) |方法|描述| | ------| ------------------------------| -|​`bringToFront()`​|改变对象层级,置顶| -|​`bringForward()`​|改变对象层级,上移| -|​`sendBackwards()`​|改变对象层级,下移| -|​`sendToBack()`​|改变对象层级,置底| -|​`intersectsWithObject()`​|检测两个对象是否相交(重叠)| -|​`isContainedWithinObject()`​|检测对象是在另外一个对象内| -|​`on()`​|监听对象事件| -|​`set()`​|设置对象属性| -|​`toDataURL()`​|转换为 Base64| +|​`bringToFront()`|改变对象层级,置顶| +|​`bringForward()`|改变对象层级,上移| +|​`sendBackwards()`|改变对象层级,下移| +|​`sendToBack()`|改变对象层级,置底| +|​`intersectsWithObject()`|检测两个对象是否相交(重叠)| +|​`isContainedWithinObject()`|检测对象是在另外一个对象内| +|​`on()`|监听对象事件| +|​`set()`|设置对象属性| +|​`toDataURL()`|转换为 Base64| ## 创建对象 @@ -231,9 +231,9 @@ canvas.add(el); ### 画布内容撤销、恢复 -主要通过 Fabric.js 画布对象的 `toObject()` 和 `loadFromJSON()` 方法实现。 +主要通过 Fabric.js 画布对象的 `toObject()`​ 和 `loadFromJSON()` 方法实现。 -为了提高性能,默认情况下 `toObject()` 只会导出对象上**常用**的属性,其他属性(例如 `data`、`selectable`)不会被导出,需要手动在其 `propertiesToInclude` 参数中指定(例如 `canvas.toObject(['data', 'selectable'])`)。 +为了提高性能,默认情况下 `toObject()`​ 只会导出对象上**常用**的属性,其他属性(例如 `data`​、`selectable`​)不会被导出,需要手动在其 `propertiesToInclude`​ 参数中指定(例如 `canvas.toObject(['data', 'selectable'])`)。 ### 画布内容导出为图片 @@ -279,7 +279,7 @@ let dataURL = rect.toDataURL({ The canvas has been tainted by cross-origin data. ``` -其中一种解决方式是先使用 `new Image()` 设置 `crossorigin` 属性,加载图片,再创建 `fabric.Image` 对象(参考 “创建对象 - 图片”)。 +其中一种解决方式是先使用 `new Image()`​ 设置 `crossorigin`​ 属性,加载图片,再创建 `fabric.Image` 对象(参考 “创建对象 - 图片”)。 ### 画布自适应父 DOM 元素宽高 @@ -376,7 +376,7 @@ clearTimeout(debounce); ### 解决画布缩放后,对象显示模糊 -把对象的 `objectCaching` 属性设置为 `false`,关闭缓存即可。 +把对象的 `objectCaching`​ 属性设置为 `false`,关闭缓存即可。 例如: @@ -429,13 +429,13 @@ const item = new fabric.Rect({ }); ``` -**关于** **​`absolutePositioned`​** **属性:** +**关于** **​`absolutePositioned`​**​ **属性:** -仅当对象作为 `clipPath` 使用时才有意义。如果为 `true`,`clipPath` 的位置将会相对于画布,且不受对象变换影响。([JSDoc: Class: Object#absolutePositioned](http://fabricjs.com/docs/fabric.Object.html#absolutePositioned)) +仅当对象作为 `clipPath`​ 使用时才有意义。如果为 `true`​,`clipPath`​ 的位置将会相对于画布,且不受对象变换影响。([JSDoc: Class: Object#absolutePositioned](http://fabricjs.com/docs/fabric.Object.html#absolutePositioned)) **注意:** -后续通过 `.set()` 更新对象的 `clipPath` 属性时,建议同时将其 `dirty` 属性设置为 `true`,以便清除缓存,防止裁剪区域没有更新。([JSDoc: Class: Object#dirty](http://fabricjs.com/docs/fabric.Object.html#dirty)) +后续通过 `.set()`​ 更新对象的 `clipPath`​ 属性时,建议同时将其 `dirty`​ 属性设置为 `true`​,以便清除缓存,防止裁剪区域没有更新。([JSDoc: Class: Object#dirty](http://fabricjs.com/docs/fabric.Object.html#dirty)) ```javascript item.set({ clipPath: null, dirty: true }); @@ -443,7 +443,7 @@ item.set({ clipPath: null, dirty: true }); ### 鼠标滚轮缩放画布 -主要用到了画布的鼠标事件(`mouse:wheel`)以及调用画布的 `zoomToPoint()` 方法改变视图缩放。 +主要用到了画布的鼠标事件(`mouse:wheel`​)以及调用画布的 `zoomToPoint()` 方法改变视图缩放。 ```javascript // 监听事件:鼠标滚轮 @@ -497,9 +497,9 @@ canvas.on('mouse:wheel', function (ev) { ### 鼠标拖拽移动画布 -主要用到了画布的鼠标事件(`mouse:down`、`mouse:move` 和 `mouse:up`)以及调用画布的 `setViewportTransform()` 方法改变视图偏移量。 +主要用到了画布的鼠标事件(`mouse:down`​、`mouse:move`​ 和 `mouse:up`​)以及调用画布的 `setViewportTransform()` 方法改变视图偏移量。 -注意:在拖拽前,若鼠标选中了对象,需要将对象的 `lockMovementX` 和 `lockMovementY` 属性设置为 `true`,锁定对象的移动,否则拖拽后对象的位置会变化。 +注意:在拖拽前,若鼠标选中了对象,需要将对象的 `lockMovementX`​ 和 `lockMovementY`​ 属性设置为 `true`,锁定对象的移动,否则拖拽后对象的位置会变化。 ```javascript // 监听事件:鼠标按下 @@ -578,9 +578,9 @@ canvas.on('mouse:up', function ({ target }) { 默认情况下,对于分组,`ev.target` 只能获取到整个分组,并不能具体到其中的对象。 -在创建分组时,将 `subTargetCheck` 属性设置为 `true`,即可通过 `ev.subTargets` 获取触发事件时的子对象。 +在创建分组时,将 `subTargetCheck`​ 属性设置为 `true`​,即可通过 `ev.subTargets` 获取触发事件时的子对象。 -对于支持该功能的事件(`mouse:down`、`mouse:up`、`mouse:move` 等),该属性为 `fabric.Object` 数组; +对于支持该功能的事件(`mouse:down`​、`mouse:up`​、`mouse:move`​ 等),该属性为 `fabric.Object` 数组; 对于不支持该功能的事件,该属性为 `undefined`。 @@ -603,7 +603,7 @@ canvas.on('mouse:down', function (ev) { Fabeic.js 的文本框对象(Textbox)默认支持文本自动换行,但只能在**空格**处换行,对于类似中文句子这种不带空格的字符串并不会换行,且文本框的宽度会自动被撑开。 -在 Fabric.js 2.6.0 版本中,新增了一个 `splitByGrapheme` 属性,将其设置为 `true` 即可启用在任意字符之间自动换行(参考:[JSDoc: Global](http://fabricjs.com/docs/global.html#splitByGrapheme)),例如: +在 Fabric.js 2.6.0 版本中,新增了一个 `splitByGrapheme`​ 属性,将其设置为 `true`​ 即可启用在任意字符之间自动换行(参考:[JSDoc: Global](http://fabricjs.com/docs/global.html#splitByGrapheme)),例如: ```javascript const textbox = new fabric.Textbox('文本框', { diff --git a/docs/content/chromium-dev-tools.md b/docs/content/chromium-dev-tools.md index e82b32b..4bc1293 100644 --- a/docs/content/chromium-dev-tools.md +++ b/docs/content/chromium-dev-tools.md @@ -1,5 +1,5 @@ --- -title: 浏览器 DevTools(开发人员工具)部分实用功能介绍 +title: "浏览器 DevTools(开发人员工具)部分实用功能介绍" date: 2025-03-16T15:54:20Z lastmod: 2025-03-16T15:58:30Z tags: [Chromium,Chrome,浏览器,工具,Web 前端,DevTools] @@ -45,17 +45,17 @@ DevTools 的 Console 是在开发过程中常用的功能之一,在其中可 实际上,`$0` 是对当前选中的 DOM 节点的引用。 -除此之外,`$1` 是对上一次选择的 DOM 节点的引用,一直到 `$4`。 +除此之外,`$1`​ 是对上一次选择的 DOM 节点的引用,一直到 `$4`。 ![](assets/network-asset-c-02-20250316155450-imayn8e.png) ### \$ 和 \$\$ -在默认情况下(没有定义过 `$` 变量),它在 Console 中是 `document.querySelector` 的别名。 +在默认情况下(没有定义过 `$`​ 变量),它在 Console 中是 `document.querySelector` 的别名。 ![](assets/network-asset-c-03-20250316155450-w9czvqh.png) -而 `$$` 则类似 `document.QuerySelectorAll`,但它返回的是包含 DOM 节点的数组,而不是 NodeList。 +而 `$$`​ 则类似 `document.QuerySelectorAll`,但它返回的是包含 DOM 节点的数组,而不是 NodeList。 ![](assets/network-asset-c-04-20250316155450-ge91fnx.png) @@ -91,8 +91,8 @@ DevTools 的 Console 是在开发过程中常用的功能之一,在其中可 ![](assets/network-asset-f-04-20250316155451-32iica5.png) -Copy selector:`#head_wrapper > div > div` -Copy JS path:`document.querySelector("#head_wrapper > div > div")`​ +Copy selector:`#head_wrapper > div > div`​ +Copy JS path:`document.querySelector("#head_wrapper > div > div")` ## Sources(源代码) @@ -128,7 +128,7 @@ DevTools 代码片段合集:[DevTools Snippets](http://bgrins.github.io/devtoo ![](assets/network-asset-d-02-20250316155452-gdsmr1f.png) -之后网页会被模拟为聚焦状态,即使它不在前台。此时执行 `document.hasFocus()` 会返回 `true`。通过该功能,可以阻止大部分网站检测用户是否离开页面。 +之后网页会被模拟为聚焦状态,即使它不在前台。此时执行 `document.hasFocus()`​ 会返回 `true`。通过该功能,可以阻止大部分网站检测用户是否离开页面。 ## 截屏 diff --git a/docs/content/chromium-startup-arguments.md b/docs/content/chromium-startup-arguments.md index 473923d..c9987f9 100644 --- a/docs/content/chromium-startup-arguments.md +++ b/docs/content/chromium-startup-arguments.md @@ -1,5 +1,5 @@ --- -title: Chromium 内核浏览器命令行启动参数 +title: "Chromium 内核浏览器命令行启动参数" date: 2025-03-19T11:37:29Z lastmod: 2025-03-19T11:40:14Z tags: [Chrome,Chromium,Windows] diff --git a/docs/content/classical-quotations.md b/docs/content/classical-quotations.md index 6491d3e..bfa491b 100644 --- a/docs/content/classical-quotations.md +++ b/docs/content/classical-quotations.md @@ -1,5 +1,5 @@ --- -title: 经典句子、经典语录 +title: "经典句子、经典语录" date: 2025-03-19T11:45:59Z lastmod: 2025-03-19T11:46:31Z tags: [文字,经典] diff --git a/docs/content/collection-javascript-code.md b/docs/content/collection-javascript-code.md index 94012f7..4e86adf 100644 --- a/docs/content/collection-javascript-code.md +++ b/docs/content/collection-javascript-code.md @@ -1,7 +1,7 @@ --- -title: 「合集」常用的 JavaScript 代码 +title: "「合集」常用的 JavaScript 代码" date: 2025-03-16T22:02:06Z -lastmod: 2025-03-16T22:02:51Z +lastmod: 2025-03-16T22:02:33Z tags: [合集,代码片段,Web 前端,JavaScript] --- @@ -77,6 +77,43 @@ document.designMode = 'off'; ## function +#### Blob 转 DataURL + +```javascript +/** + * @description 转换 Blob 为 DataURL + * @param {Blob} blob + * @returns {Promise<{ dataURL: string; success: boolean; }>} + */ +function blobToDataURL(blob) { + return new Promise((resolve) => { + + let fileReader = new FileReader(); + + // 处理读取异常 + fileReader.onerror = function () { + resolve({ + dataURL: '', + success: false, + }); + }; + + // 处理读取完成 + fileReader.onload = function () { + resolve({ + dataURL: fileReader.result, + success: true, + }); + }; + + // 开始读取 + fileReader.readAsDataURL(blob); + + }); + +} +``` + #### 查找元素的 Vue 对象 ```javascript @@ -134,7 +171,7 @@ function findElementVue(el) { } ``` -#### 查找字符 `char` 在 `str` 中第 `num` 次出现的位置 +#### 查找字符 `char`​ 在 `str`​ 中第 `num` 次出现的位置 ```javascript function findChar(str = '', char = '', num = 1) { @@ -149,6 +186,136 @@ function findChar(str = '', char = '', num = 1) { } ``` +#### 处理过渡效果 + +```javascript +// https://www.npmjs.com/package/d3-ease + +/** + * @description 处理过渡效果 + * @param {object} opts + * @param {number} opts.duration 时长(毫秒) + * @param {Function} opts.easeFn 过渡计算函数 + * @param {Function} opts.onStop 结束时回调 + * @param {Function} opts.onTick 进行时回调 + * @returns {Promise} + */ +function easeHandler(opts = {}) { + + const { + duration = 0, + easeFn = easeLinear, + onStop = null, + onTick = null, + } = opts; + + const isValid = ( + (typeof duration === 'number' && duration >= 0) && + (typeof easeFn === 'function') && + (onStop ? typeof onStop === 'function' : true) && + (onTick ? typeof onTick === 'function' : true) + ); + + if (!isValid) { + console.error('处理失败:参数错误'); + return Promise.resolve(false); + } + + // 时长为 0,直接结束 + if (duration === 0) { + onTick && onTick(1); + onStop && onStop(); + return Promise.resolve(true); + } + + const sTime = Date.now(); + const eTIme = sTime + duration; + + return new Promise((resolve) => { + + const fn = function () { + try { + + const curr = Date.now(); + const diff = Math.min(duration, curr - sTime); + const p = parseFloat((diff / duration).toFixed(3)); + const n = parseFloat(easeFn(p).toFixed(3)); + + if (curr < eTIme) { + // [继续] + onTick && onTick(n); + requestAnimationFrame(fn); + } else { + // [结束] + onTick && onTick(1); + onStop && onStop(); + resolve(true); + } + + } catch (error) { + console.error('处理失败:'); + console.error(error); + resolve(false); + } + }; + + // 开始 + fn(); + + }); + +} +``` + +#### 对有符号整型、无符号整型、浮点型、十六进制、二进制的数据处理 + +参考:https://www.cnblogs.com/zhouheblog/p/13578012.html + +```javascript +// 十六进制字符串转有符号整型(支持 S8、S16、S32) +function hexToInt(hex) { + if (!hex) { + return NaN; + } + if (hex.length % 2 !== 0) { + hex = '0' + hex; + } + let num = parseInt(hex, 16); + let max = Math.pow(2, hex.length / 2 * 8); + if (num > max / 2 - 1) { + num = num - max; + } + return num; +} +``` + +```javascript +// 十六进制字符串转无符号整型(支持 U8、U16、U32) +parseInt(str, 16); +``` + +```javascript +/** + * @description 合并对象(lodash.mergeWith) + * - 将会修改目标对象 + * - 若来源属性为数组,将会直接替换 + * - 若目标属性为对象,但来源属性为 `null`,则跳过 + * @template TObject + * @param {TObject} obj 合并目标 + * @param {TObject} src 合并来源 + * @returns {TObject} + */ +function mergeObject(obj, src) { + return mergeWith(obj, src, function (objValue, srcValue) { + if (Array.isArray(srcValue)) { + return srcValue; + } else if (srcValue === null && isObject(objValue)) { + return objValue; + } + }); +} +``` + #### 格式化时间 ```javascript @@ -679,3 +846,72 @@ function strToFile(data = '', filename = 'export.txt', filetype = 'text/plain') ``` ‍ + +#### 转换 JSON 为 SQLite 插入语句 + +```javascript +/** + * @description 生成 SQLite 插入语句 + * @param {string} t 表名 + * @param {string[]} k 键名列表 + * @param {(number|string)[]} v 值列表 + */ +function getSqlInsert(t, k, v) { + k = k.map(val => `"${val}"`); + v = v.map(val => (val === null ? 'NULL' : `'${val}'`)); + return `INSERT INTO "${t}" (${k.join(', ')}) VALUES (${v.join(', ')})`; +} + +/** + * @description 转换 JSON 为 SQLite 语句(INSERT) + * @param {string} table 表名 + * @param {Record[]} data + * @param {string[]} [keys] 属性过滤 + */ +function jsonToSql(table, data, keys) { + try { + + const result = []; + const filter = Array.isArray(keys); + + if (!table) { + throw new Error('缺少 table 参数'); + } + + if (!Array.isArray(data)) { + throw new Error('缺少 data 参数'); + } + + for (let i = 0; i < data.length; i++) { + let item = data[i]; + let keys = []; + let values = []; + let sql = ''; + // 记录 key 和 value + if (filter) { + for (let key in item) { + if (keys.includes(key)) { + keys.push(key); + values.push(item[key]); + } + } + } else { + for (let key in item) { + keys.push(key); + values.push(item[key]); + } + } + // 生成 SQL 插入语句 + sql = getSqlInsert(table, keys, values); + result.push(sql); + } + + return result; + + } catch (error) { + console.error('转换失败:'); + console.error(error); + return null; + } +} +``` diff --git a/docs/content/collection-linux-commands.md b/docs/content/collection-linux-commands.md index 0dd7c48..7e4e146 100644 --- a/docs/content/collection-linux-commands.md +++ b/docs/content/collection-linux-commands.md @@ -1,5 +1,5 @@ --- -title: 「合集」Linux 常用命令 +title: "「合集」Linux 常用命令" date: 2025-03-16T19:25:02Z lastmod: 2025-03-16T19:28:22Z tags: [合集,Linux,命令] @@ -15,7 +15,7 @@ tags: [合集,Linux,命令] ## init -重启:`init 6`​ +重启:`init 6` --- @@ -25,9 +25,9 @@ tags: [合集,Linux,命令] 配置自动维护日志文件大小 -只保留近两周的日志:`journalctl --vacuum-time=2w`​ +只保留近两周的日志:`journalctl --vacuum-time=2w` -只保留 256MB 的日志:`journalctl --vacuum-size=256M`​ +只保留 256MB 的日志:`journalctl --vacuum-size=256M` 参考:[Linux 系统 /var/log/journal/ 垃圾日志清理](https://cloud.tencent.com/developer/article/1446278) @@ -51,7 +51,7 @@ pkill -kill -t 说明: -​`` 为要踢的用户的 tty,例如 `pkill -kill -t pts/1`。 +​``​ 为要踢的用户的 tty,例如 `pkill -kill -t pts/1`。 --- @@ -125,38 +125,38 @@ screen -r -d name ### 命令 -#### 压缩当前路径下的 `test/content/` 文件夹为 `file.tgz`​ +#### 压缩当前路径下的 `test/content/`​ 文件夹为 `file.tgz` ```bash tar -zcvf file.tgz test/content/ ``` -#### 压缩当前路径下的 `test/content/` 文件夹和 `test/text.txt` 文件为 `file.tgz`​ +#### 压缩当前路径下的 `test/content/`​ 文件夹和 `test/text.txt`​ 文件为 `file.tgz` ```bash tar -zcvf file.tgz test/content/ test/text.txt ``` -#### 压缩 `当前路径` 的文件夹为 `file.tgz`​ +#### 压缩 `当前路径`​ 的文件夹为 `file.tgz` ```bash tar -zcvf file.tgz ./ ``` -#### 压缩当前路径下的 `test/content/` 文件夹为 `file.tgz`, +#### 压缩当前路径下的 `test/content/`​ 文件夹为 `file.tgz`, ```bash # 其中不包含 `test/content/text_a.txt` 文件和 `test/content/test/text_b.txt` 文件 tar --exclude=text_a.txt --exclude=test/text_b.txt -zcvf file.tgz test/content/ ``` -#### 解压 `当前路径` 下的 `file.tar`​ +#### 解压 `当前路径`​ 下的 `file.tar` ```bash tar -xvf file.tar ``` -#### 解压 `当前路径` 下的 `file.tgz`​ +#### 解压 `当前路径`​ 下的 `file.tgz` ```bash tar -zxvf file.tgz @@ -164,7 +164,7 @@ tar -zxvf file.tgz ## taskset -指定 CPU `0~3` 执行当前路径下的 `start.sh`: +指定 CPU `0~3`​ 执行当前路径下的 `start.sh`: ```bash taskset -c 0-3 ./start.sh diff --git a/docs/content/collection-windows-commands.md b/docs/content/collection-windows-commands.md index e3f23f4..ffc77f8 100644 --- a/docs/content/collection-windows-commands.md +++ b/docs/content/collection-windows-commands.md @@ -1,5 +1,5 @@ --- -title: 「合集」Windows BAT CMD 常用命令 +title: "「合集」Windows BAT CMD 常用命令" date: 2025-03-16T15:47:13Z lastmod: 2025-03-16T15:47:31Z tags: [合集,Windows,命令提示符,命令,BAT,脚本] @@ -84,7 +84,7 @@ ping -n 次数 主机名 #### Ping 指定的主机,直到停止 -> 按下 `Ctrl + Break` 查看统计信息并继续操作; +> 按下 `Ctrl + Break`​ 查看统计信息并继续操作; > 按下 `Ctrl + C` 以停止。 ```bat diff --git a/docs/content/common-usage-git-commands.md b/docs/content/common-usage-git-commands.md index 7d53bde..f9501b4 100644 --- a/docs/content/common-usage-git-commands.md +++ b/docs/content/common-usage-git-commands.md @@ -1,5 +1,5 @@ --- -title: 常用的 Git 命令 +title: "常用的 Git 命令" date: 2025-02-11T20:43:29Z lastmod: 2025-02-20T22:59:20Z tags: [Git,命令,开发] @@ -43,13 +43,13 @@ git config --global commit.gpgsign true ### 单行显示 -​`git log --oneline`​ +​`git log --oneline` 把每一条提交压缩到只有一行,仅保留短哈希、提价说明等最必要的信息,以一种更干净的方式查看提交。 ### 显示差异 -​`git log -p`​ +​`git log -p` 展示带有改动内容的历史,可以看到每条提交都改动了哪些内容。 @@ -65,7 +65,7 @@ Git 会使用正则来进行筛选和过滤,因此非准确的名字或大小 ### 按时间过滤 -添加参数 `--after` 和 `--before` 以按时间过滤。 +添加参数 `--after`​ 和 `--before` 以按时间过滤。 2021-01-01 之后: @@ -318,7 +318,7 @@ git gc --aggressive --prune=now ```text git rebase e2394c2^ --interactive ``` -3. 在打开的编辑界面中将需要修改的提交前的 `pick` 改为 `edit`,然后保存退出。 +3. 在打开的编辑界面中将需要修改的提交前的 `pick`​ 改为 `edit`,然后保存退出。 4. 修改文件,然后重新提交。 ```text @@ -327,7 +327,7 @@ git gc --aggressive --prune=now ``` 注意:提交使用的参数是 `--amend`。 -5. 执行 `git rebase --continue` 命令逐步前进到最新的提交位置。 +5. 执行 `git rebase --continue`​ 命令逐步前进到最新的提交位置。 注意:修改文件后可能会产生冲突,解决冲突并提交后需要再次执行 `git rebase --continue` 命令以继续。 6. 提交到远程: diff --git a/docs/content/description-cors-preflight-request.md b/docs/content/description-cors-preflight-request.md index ade3a99..762d75c 100644 --- a/docs/content/description-cors-preflight-request.md +++ b/docs/content/description-cors-preflight-request.md @@ -1,5 +1,5 @@ --- -title: CORS 预检请求(preflight request) +title: "CORS 预检请求(preflight request)" date: 2025-03-15T23:08:14Z lastmod: 2025-03-15T23:08:41Z tags: [Web 前端,JavaScript,HTTP] @@ -39,7 +39,7 @@ CORS 预检请求主要用于检测服务器是否支持 CORS(跨域资源共 - text/plain - multipart/form-data - application/x-www-form-urlencoded -- 请求中的任意 `XMLHttpRequest` 对象均没有注册任何事件监听器;可以通过 `XMLHttpRequest.upload` 属性访问 `XMLHttpRequest` 对象。 +- 请求中的任意 `XMLHttpRequest`​ 对象均没有注册任何事件监听器;可以通过 `XMLHttpRequest.upload`​ 属性访问 `XMLHttpRequest` 对象。 - 请求中没有使用 `ReadableStream` 对象。 ‍ diff --git a/docs/content/description-date-time-string-format.md b/docs/content/description-date-time-string-format.md index 5794af7..980bbfa 100644 --- a/docs/content/description-date-time-string-format.md +++ b/docs/content/description-date-time-string-format.md @@ -1,5 +1,5 @@ --- -title: 包含 T 和 Z 的日期时间字符串格式 +title: "包含 T 和 Z 的日期时间字符串格式" date: 2025-03-15T23:11:02Z lastmod: 2025-03-15T23:11:27Z tags: [格式,时间,日期] @@ -9,7 +9,7 @@ tags: [格式,时间,日期] ECMAScript 基于 ISO 8601 扩展格式的简化定义了日期时间的字符串交换格式。 -格式为:`YYYY-MM-DDTHH:mm:ss.sssZ`​ +格式为:`YYYY-MM-DDTHH:mm:ss.sssZ` |内容|描述| | :-----| :-------------------------------------------------------------------| @@ -29,16 +29,16 @@ ECMAScript 基于 ISO 8601 扩展格式的简化定义了日期时间的字符 所有数字必须为**十进制**形式。 -如果 `MM` 或 `DD` 字段不存在,则使用默认值 “01”。 +如果 `MM`​ 或 `DD` 字段不存在,则使用默认值 “01”。 -如果 `HH`、`mm` 或 `ss` 字段不存在,则使用默认值 “00”。 +如果 `HH`​、`mm`​ 或 `ss` 字段不存在,则使用默认值 “00”。 若 `sss` 字段不存在,则使用默认值 “000”。 如果没有指定时区,则把字符串作为**本地时间**进行解析。 -由于每天都以午夜开始和结束,所以可以在时间表达式中使用 `00:00` 和 `24:00` 来区分相同时间点的两个午夜。 -也就是说,字符串 `1995-02-04T24:00` 和 `1995-02-05T00:00` 可以表示完全相同的时间点。 +由于每天都以午夜开始和结束,所以可以在时间表达式中使用 `00:00`​ 和 `24:00`​ 来区分相同时间点的两个午夜。 +也就是说,字符串 `1995-02-04T24:00`​ 和 `1995-02-05T00:00` 可以表示完全相同的时间点。 字符串中可以只包含日期: diff --git a/docs/content/dynmapforge-warsftbdynmap-compatible.md b/docs/content/dynmapforge-warsftbdynmap-compatible.md index 8c8b89a..5419d30 100644 --- a/docs/content/dynmapforge-warsftbdynmap-compatible.md +++ b/docs/content/dynmapforge-warsftbdynmap-compatible.md @@ -1,5 +1,5 @@ --- -title: 「Minecraft」修改 Dynmap 让 WarsFtbDynmap 能正常使用 +title: "「Minecraft」修改 Dynmap 让 WarsFtbDynmap 能正常使用" date: 2025-03-16T18:58:37Z lastmod: 2025-03-16T19:02:34Z tags: [Minecraft,模组,代码片段,Dynmap] @@ -7,7 +7,7 @@ tags: [Minecraft,模组,代码片段,Dynmap] # 「Minecraft」修改 Dynmap 让 WarsFtbDynmap 能正常使用 -修改 Dynmap Forge 的 `index.html` 和 `markers.js` 让 WarsFtbDynmap 能正常使用。记录下来,方便下次使用。 +修改 Dynmap Forge 的 `index.html`​ 和 `markers.js` 让 WarsFtbDynmap 能正常使用。记录下来,方便下次使用。 版本信息: @@ -19,19 +19,19 @@ tags: [Minecraft,模组,代码片段,Dynmap] ## 前言 -可能是因为服务端的多世界功能是使用模组 [Just Enough Dimensions](https://minecraft.curseforge.com/projects/just-enough-dimensions) 实现的,然后 `WarsFtbDynmap` 不能正确识别世界,导致其生成的`marker.json`文件的文件名为 `marker_.json` ,而不是 `marker_世界名称.json`(或者直接把`标记点`的数据写入到原有的 `marker_世界名.json` 中)。 +可能是因为服务端的多世界功能是使用模组 [Just Enough Dimensions](https://minecraft.curseforge.com/projects/just-enough-dimensions) 实现的,然后 `WarsFtbDynmap`​ 不能正确识别世界,导致其生成的`marker.json`​文件的文件名为 `marker_.json`​ ,而不是 `marker_世界名称.json`​(或者直接把`标记点`​的数据写入到原有的 `marker_世界名.json` 中)。 -因为`DynmapForge`只能加载对应世界名称的 `marker.json` 文件,所以 `WarsFtbDynmap` 不能正常使用(不显示 [FTB Utilities](https://minecraft.curseforge.com/projects/ftb-utilities) 设定的领地)。 +因为`DynmapForge`​只能加载对应世界名称的 `marker.json`​ 文件,所以 `WarsFtbDynmap`​ 不能正常使用(不显示 [FTB Utilities](https://minecraft.curseforge.com/projects/ftb-utilities) 设定的领地)。 这只是临时解决方案,且本方案可能有可以改进的地方。 -目前`网页地图`只显示世界 `world` 和世界 `DIM0`(这两个世界名称是 `Just Enough Dimensions` 给的;`world` 是默认的主世界,`DIM0` 是自己加的世界)。 +目前`网页地图`​只显示世界 `world`​ 和世界 `DIM0`​(这两个世界名称是 `Just Enough Dimensions`​ 给的;`world`​ 是默认的主世界,`DIM0` 是自己加的世界)。 ## 进行的修改 #### dynmap/web/js/markers.js -删除了第 28 行中的`world`,使在`网页地图`中切换世界时不能自动传入要加载的`marker.json`的文件名中的`world`参数。 +删除了第 28 行中的`world`​,使在`网页地图`​中切换世界时不能自动传入要加载的`marker.json`​的文件名中的`world`参数。 ```diff - function loadmarkers(world) { @@ -42,7 +42,7 @@ tags: [Minecraft,模组,代码片段,Dynmap] > 因为去掉了“传入参数”,加载 `marker.json` 时会出错,所以要写一个用于手动传入参数的东西。 -在第 38 行的后面插入 1 行,写入以下内容(用于设定初始加载的 `marker.json` 的世界名称为 `DIM0`): +在第 38 行的后面插入 1 行,写入以下内容(用于设定初始加载的 `marker.json`​ 的世界名称为 `DIM0`): ```html @@ -66,7 +66,7 @@ tags: [Minecraft,模组,代码片段,Dynmap] #### dynmap/configuration.txt -> 修改 `DynmapForge` 的配置文件,添加用于切换要加载的 `marker.json` 的按钮。 +> 修改 `DynmapForge`​ 的配置文件,添加用于切换要加载的 `marker.json` 的按钮。 在第 178 行左右(内容是 `# Note: more than one logo component can be defined`)的后面插入 18 行,写入以下内容: diff --git a/docs/content/elementary-os-5-1-hera-setup-uefi.md b/docs/content/elementary-os-5-1-hera-setup-uefi.md index f79da19..8d9bc8b 100644 --- a/docs/content/elementary-os-5-1-hera-setup-uefi.md +++ b/docs/content/elementary-os-5-1-hera-setup-uefi.md @@ -1,5 +1,5 @@ --- -title: 安装 elementary OS 后没有自动写入 EFI 引导 +title: "安装 elementary OS 后没有自动写入 EFI 引导" date: 2025-03-16T16:29:02Z lastmod: 2025-03-16T16:29:48Z tags: [记录,Linux,安装系统] @@ -27,7 +27,7 @@ elementary OS 官网:[https://elementary.io/](https://elementary.io/) 最后看了深度科技论坛的一个帖子《[纯UEFI下安装15.7,结果没有写入efi](https://bbs.deepin.org/forum.php?mod=viewthread&tid=170729)》,按照 10 楼 @redchenjs 说的: -> 把原 `EFI` 文件夹里的 `ubuntu` 文件夹复制到空的 `EFI` 分区的 `efi` 文件夹内,然后在 `efi` 文件夹内创建 `boot` 文件夹,复制 `ubuntu` 文件夹里的 `shimx64.efi` 和 `grubx64.efi` 到创建的 `boot` 文件夹,最后把 `shimx64.efi` 重命名为 `bootx64.efi`。 +> 把原 `EFI`​ 文件夹里的 `ubuntu`​ 文件夹复制到空的 `EFI`​ 分区的 `efi`​ 文件夹内,然后在 `efi`​ 文件夹内创建 `boot`​ 文件夹,复制 `ubuntu`​ 文件夹里的 `shimx64.efi`​ 和 `grubx64.efi`​ 到创建的 `boot`​ 文件夹,最后把 `shimx64.efi`​ 重命名为 `bootx64.efi`。 这样就可以在 BIOS 启动菜单选第二块硬盘启动 elementary OS 了。 diff --git a/docs/content/ffmpeg-merge-video-files.md b/docs/content/ffmpeg-merge-video-files.md index eceb398..73ce49f 100644 --- a/docs/content/ffmpeg-merge-video-files.md +++ b/docs/content/ffmpeg-merge-video-files.md @@ -1,5 +1,5 @@ --- -title: 使用 FFmpeg 合并多个视频文件 +title: "使用 FFmpeg 合并多个视频文件" date: 2025-04-18T22:50:14Z lastmod: 2025-07-03T21:58:34Z tags: [FFmpeg,命令] @@ -9,7 +9,7 @@ tags: [FFmpeg,命令] ## 操作步骤 -1. 将合并的视频文件都放在同一个文件夹下,例如:`file_1.flv` `file_2.flv`​ +1. 将合并的视频文件都放在同一个文件夹下,例如:`file_1.flv`​ `file_2.flv` 2. 新建一个 `video.txt` 文件,写入需要合并的视频文件名称,例如: ```plaintext diff --git a/docs/content/fix-ant-tree-select-can-select-disabled-item.md b/docs/content/fix-ant-tree-select-can-select-disabled-item.md index bdf96a3..9badc9f 100644 --- a/docs/content/fix-ant-tree-select-can-select-disabled-item.md +++ b/docs/content/fix-ant-tree-select-can-select-disabled-item.md @@ -1,5 +1,5 @@ --- -title: 解决 Ant TreeSelect(树选择)组件可以使用键盘选中 disabled(已禁用)项的问题 +title: "解决 Ant TreeSelect(树选择)组件可以使用键盘选中 disabled(已禁用)项的问题" date: 2025-02-11T20:55:27Z lastmod: 2025-02-20T22:56:23Z tags: [Web 前端,Vue.js] @@ -7,7 +7,7 @@ tags: [Web 前端,Vue.js] # 解决 Ant TreeSelect(树选择)组件可以使用键盘选中 disabled(已禁用)项的问题 -最近在使用 Ant Design Vue(V3.2.20)的 TreeSelect 组件时发现一个问题:`tree-data` 中部分数据的 `disabled` 属性设置为了 `true`,选项是“禁用”状态,无法通过鼠标点击选中,但是可以通过键盘 `↑` `↓` 键切换选项,按下 `Enter` 键选中。 +最近在使用 Ant Design Vue(V3.2.20)的 TreeSelect 组件时发现一个问题:`tree-data`​ 中部分数据的 `disabled`​ 属性设置为了 `true`​,选项是“禁用”状态,无法通过鼠标点击选中,但是可以通过键盘 `↑`​ `↓`​ 键切换选项,按下 `Enter` 键选中。 ![](assets/network-asset-3280690-20240119205120253-1872302841-20250212094903-w5wx2lc.png) @@ -15,8 +15,8 @@ tags: [Web 前端,Vue.js] ![](assets/network-asset-3280690-20240119210345097-1090947655-20250212094903-j752pdy.png) -仅将选项的 `selectable` 属性设置为 `false` 时,对应的选项虽然文本颜色不变,但是不可通过点击或键盘选中。 +仅将选项的 `selectable`​ 属性设置为 `false` 时,对应的选项虽然文本颜色不变,但是不可通过点击或键盘选中。 ![](assets/network-asset-3280690-20240119210906388-775240144-20250212094903-n43dx0a.png) -因此,如果要实现选项变为灰色且不可选的效果,需要同时将选项的 `disabled` 属性设置为 `true`,将 `seletable` 属性设置为 `false`。 +因此,如果要实现选项变为灰色且不可选的效果,需要同时将选项的 `disabled`​ 属性设置为 `true`​,将 `seletable`​ 属性设置为 `false`。 diff --git a/docs/content/fix-eslint-unexpected-token-right-angle-bracket-error.md b/docs/content/fix-eslint-unexpected-token-right-angle-bracket-error.md new file mode 100644 index 0000000..46159ae --- /dev/null +++ b/docs/content/fix-eslint-unexpected-token-right-angle-bracket-error.md @@ -0,0 +1,27 @@ +--- +title: "解决 ESLint 提示“Parsing error: Unexpected token <”的问题" +date: 2025-03-09T22:32:22Z +lastmod: 2025-10-12T18:14:59Z +tags: [开发,Web 前端,JavaScript,配置] +--- + +# 解决 ESLint 提示“Parsing error: Unexpected token <”的问题 + +## 参考资料 + +- [error Parsing error: Unexpected token < · Issue #447 · jsx-eslint/eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react/issues/447) + +## 解决方法 + +修改 ESLint 配置文件(`.eslintrc.js`): + +```json +"parserOptions": { + "ecmaFeatures": { + "jsx": true, + "modules": true + } +} +``` + +‍ diff --git a/docs/content/fix-redirect-dingtalk-miniprogram-scheme-blank-page.md b/docs/content/fix-redirect-dingtalk-miniprogram-scheme-blank-page.md index 5e38c46..4b48f32 100644 --- a/docs/content/fix-redirect-dingtalk-miniprogram-scheme-blank-page.md +++ b/docs/content/fix-redirect-dingtalk-miniprogram-scheme-blank-page.md @@ -1,5 +1,5 @@ --- -title: 解决钉钉通过短链接跳转小程序 scheme 的方式打开小程序时会有一个空白页面的问题 +title: "解决钉钉通过短链接跳转小程序 scheme 的方式打开小程序时会有一个空白页面的问题" date: 2025-03-22T22:17:11Z lastmod: 2025-03-22T22:32:06Z tags: [钉钉,小程序,Web 前端] diff --git a/docs/content/forge-auto-remove-erroring-entities.md b/docs/content/forge-auto-remove-erroring-entities.md index 5ebe182..efd08df 100644 --- a/docs/content/forge-auto-remove-erroring-entities.md +++ b/docs/content/forge-auto-remove-erroring-entities.md @@ -1,5 +1,5 @@ --- -title: 「Minecraft」自动修复部分由异常实体或异常方块实体导致的崩溃 +title: "「Minecraft」自动修复部分由异常实体或异常方块实体导致的崩溃" date: 2025-03-16T19:20:29Z lastmod: 2025-03-16T19:22:00Z tags: [Minecraft,Forge,教程] @@ -7,7 +7,7 @@ tags: [Minecraft,Forge,教程] # 「Minecraft」自动修复部分由异常实体或异常方块实体导致的崩溃 -需要安装 `Forge API`;可在 `客户端` 和 `服务端` 中使用;对于部分崩溃有效,例如 `Ticking block entity`。 +需要安装 `Forge API`​;可在 `客户端`​ 和 `服务端`​ 中使用;对于部分崩溃有效,例如 `Ticking block entity`。 已测试游戏版本: @@ -63,17 +63,17 @@ B:removeErroringTileEntities=true Set this to true to remove any Entity that throws an error in its update method instead of closing the server and reporting a crash log. -**注意,把此项设置为** **​`true`​** **前,请备份存档,以免丢失数据。** +**注意,把此项设置为** **​`true`​**​ **前,请备份存档,以免丢失数据。** BE WARNED THIS COULD SCREW UP EVERYTHING USE SPARINGLY WE ARE NOT RESPONSIBLE FOR DAMAGES. #### removeErroringTileEntities -**把此项设置为** **​`true`​** **,可以自动移除发生异常的方块实体,而不是崩溃。** +**把此项设置为** **​`true`​**​ **,可以自动移除发生异常的方块实体,而不是崩溃。** Set this to true to remove any TileEntity that throws an error in its update method instead of closing the server and reporting a crash log. -**注意,把此项设置为** **​`true`​** **前,请备份存档,以免丢失数据。** +**注意,把此项设置为** **​`true`​**​ **前,请备份存档,以免丢失数据。** BE WARNED THIS COULD SCREW UP EVERYTHING USE SPARINGLY WE ARE NOT RESPONSIBLE FOR DAMAGES. diff --git a/docs/content/frost-navigation.md b/docs/content/frost-navigation.md index 7f593cf..fd03201 100644 --- a/docs/content/frost-navigation.md +++ b/docs/content/frost-navigation.md @@ -1,5 +1,5 @@ --- -title: 「工具」Frost 网址导航 V2 +title: "「工具」Frost 网址导航 V2" date: 2025-03-16T18:34:16Z lastmod: 2025-03-16T18:36:28Z tags: [网站,工具,导航,HTML5] diff --git a/docs/content/git-angular-commits-specification.md b/docs/content/git-angular-commits-specification.md new file mode 100644 index 0000000..0ebc112 --- /dev/null +++ b/docs/content/git-angular-commits-specification.md @@ -0,0 +1,113 @@ +--- +title: "Git 提交信息规范(Angular)" +date: 2025-02-13T09:57:48Z +lastmod: 2025-02-13T09:58:02Z +tags: [Git,开发,规范] +--- + +# Git 提交信息规范(Angular) + +## 参考资料 + +- [Angular 提交规范 - GitGuide](https://zjdoc-gitguide.readthedocs.io/zh_CN/latest/message/angular-commit.html) +- [Angular Commit Message Guidelines](https://github.com/angular/angular/blob/22b96b9/CONTRIBUTING.md#-commit-message-guidelines) + +## 提交格式 + +```text +(): + + + +