Vortex 代码风格规范(CODESTYLE.md)实战指南:从童子军规则到 TypeScript 工程化落地
桌面应用【免费下载链接】VortexVortex Development项目地址https://gitcode.com/gh_mirrors/vor/Vortex点击查看免费下载Vortex 是 Nexus Mods 出品的开源游戏模组管理工具其代码库横跨 Electron 主进程、React 渲染进程、共享工具库与数十个游戏扩展规模庞大且长期演进。为了保证大规模协作下的代码质量与可维护性项目在根目录维护了一份 CODESTYLE.md 作为团队统一遵循的风格规范。本文将以该文档为核心骨架逐条讲解其规定行数限制、命名约定、异步风格、本地化、错误日志、测试策略等并结合仓库中的 ESLint 配置、自定义 lint 规则与源码实例说明这些规范是如何在真实工程中落地的。读完本文你将掌握 Vortex 代码评审与提交时的完整风格检查清单也能将其中的工程化思路迁移到自己的 TypeScript/React 项目中。一、总体原则童子军规则Boy Scout RuleCODESTYLE.md 开篇定下的不是某条具体语法而是一条代码卫生原则——童子军规则总是把露营地打扫得比你发现它时更干净。原文的阐释是当你在代码中发现脏乱时无论是不是你造成的都应该顺手清理为下一个维护者留下更好的环境。Vortex 把这条规则直接应用到代码演进中每次重构或改进旧代码时都要顺带把这段代码更新到当前的质量标准。也就是说风格规范的升级不应只约束新代码旧代码在被触碰时也要同步消毒。这一原则在仓库中有直接的工程化体现随着团队决定弃用 Bluebird、收紧类型检查他们为 eslint-rules 目录新增了多个自定义 lint 规则并在 src/renderer/eslint.config.mjs 中注册、逐步从warn提升到error例如vortex/no-bluebird-promise-alias已是error而vortex/no-bluebird-resolve-promiselike仍标注着// TODO: change to error。这种先警告、再报错、最后清理存量代码的节奏正是童子军规则的实践形态——规范在收紧存量代码也在被持续打扫。二、JavaScript / TypeScript 基线CODESTYLE.md 明确除非下文另有规定Vortex 遵循 Airbnb JavaScript 编码指南即 airbnb/javascript 风格指南。这是团队风格的默认底座而 CODESTYLE.md 中的各条规定则是在此基础上的本地化修订。从仓库的工程配置看这份基线在 ESLint 中是这样落地的eslint.config.base.mjs基于eslint/js的recommended规则集叠加typescript-eslint的recommendedTypeChecked启用基于 TypeScript 类型信息的规则通过eslint-config-prettier关闭与 Prettier 冲突的格式类规则让格式化交给 Prettier 处理引入eslint-plugin-perfectionist对导出进行排序perfectionist/sort-exports为warn强制typescript-eslint/consistent-type-importserror即类型导入必须使用import typetypescript-eslint/no-unused-vars为warn并配置了^_前缀忽略模式——参数、捕获的异常、解构项只要以下划线开头就不会被误报这对应着命名即语义的团队习惯。渲染进程侧src/renderer/eslint.config.mjs还额外接入了eslint-react、stylistic与better-tailwindcss插件并对 JSX 属性排序、JSX 换行、自闭合标签等做了约束。主进程与渲染进程都从这份 baseConfig 派生自己的配置保证全仓库基线一致。三、行数与函数长度约束CODESTYLE.md 对代码体积给出两条硬指标行宽每行软上限 100 字符、硬上限 150 字符。这样做的直接动机是便于在 IDE 中并排打开多个文件——行太宽会导致侧向滚动破坏并排阅读体验。函数长度每个函数软上限 25 行。长函数难以理解应该被拆分成多个只完成一件小事的短函数。这两条是软限制意味着允许合理的例外但一旦超过就要有意识地质疑自己的实现。在仓库源码中可以看到大量符合该约束的短函数范例例如 src/renderer/src/controls/ActionControl.tsx 中的numOr处理数值默认值与iconSort按 position 排序操作按钮都只有寥寥数行职责单一、一眼可读。这类小函数组合在 Vortex 的 UI 控制组件中反复出现是 25 行约束在真实代码中的常态体现。四、异步与 Promise 规范告别 BluebirdCODESTYLE.md 对异步代码的规定非常明确优先使用async/await避免书写冗长的 Promise 链不要使用 Bluebird改用 ES6 原生 Promise。文档解释了历史原因Vortex 诞生时 ES Promise 尚不完整团队选择了 Bluebird如今 ES 标准已经成熟不再需要它。文档还专门列出了 Bluebird 特有写法与合规写法的对照必须完整继承somethingAsync().catch(ExceptionType, err { … }) // NO somethingAsync().catch(err { if (err instanceof ExceptionType) { … } else { return Promise.reject(err); } }) // YES Promise.map(stuff, item somethingAsync(item)) // NO Promise.all(stuff.map(item somethingAsync(item))) // YES for (const item of stuff) { await somethingAsync(item) } // ALSO YES要点解析Bluebird 的catch支持按异常类型筛选catch(ExceptionType, handler)而原生 Promise 不支持必须手写instanceof判断并把不匹配的错误return Promise.reject(err)继续抛给下游Bluebird 的Promise.map是集合级并发工具原生方案要么用Promise.all(stuff.map(...))并行执行要么用for...ofawait串行执行——后者在需要控制并发粒度如限流、依赖顺序时尤其常用。为了让禁用 Bluebird从文档落到代码仓库在 eslint-rules 下实现了三套自定义规则并在 src/renderer/eslint.config.mjs 注册vortex/no-bluebird-promise-aliaserror实现 检查import Bluebird from bluebird时是否把默认导入命名为Promise禁止用 Bluebird 冒充原生 Promise 造成类型与语义混淆vortex/no-bluebird-resolve-promiselikewarn待提升为 error实现 利用 TypeScript 类型检查器ESLintUtils.getParserServices 类型检查器判断Bluebird.resolve(...)的参数是否为PromiseLike——包括原生PromiseT、联合类型如PromiseT | null以及带可调用then属性的 thenable命中即提示改用原生 Promisevortex/no-restricted-imports-warningswarn实现 是一个通用黑名单导入规则当前配置把bluebird列入警告名单消息为Please avoid using Bluebird. Use ES6 promises instead。此外渲染进程配置还使用 ESLint 内置no-restricted-imports禁止从electron导入clipboard因为渲染进程无法直接使用该模块必须走window.api.clipboard。这组规则的组合展示了 Vortex 的风格治理方式文档定标准lint 做门槛warn 先行、error 收尾。五、命名约定CODESTYLE.md 用一整套命名约定统一全仓库的代码词汇覆盖从组件到常量的每个层级对象约定示例React 组件用户自定义 JSXPascalCaseTestComponent /类型名typePascalCasetype NotificationFunc (dismiss: NotificationDismiss) void;接口interfaceI 前缀 PascalCaseinterface IBaseProps {}枚举值PascalCaseexport enum Decision {}函数名camelCasefunction fetchReduxState(tries: number 5) {}属性名与局部变量camelCaselet visibleLineCount 0;全局/导出常量UPPER_SNAKE_CASEexport const NEXUS_MEMBERSHIP_URL https://users.nexusmods.com/register/memberships;几个值得展开的点接口的 I 前缀。文档坦率说明这是历史背景使然most of the team has a C# background。虽然这在现代 TS 社区存在争议很多人主张接口不应带前缀但 Vortex 明确保留该约定且存量代码量极大——例如 src/renderer/src/controls/ActionControl.tsx 中的IActionControlProps、IExtensionPropssrc/renderer/src/controls/ActionDropdown.tsx 中的IBaseProps。在 Vortex 生态包括扩展开发中遵循这一命名是对既有代码库的尊重也是通过 lint/评审的门槛。any的使用。文档规定no-explicit-any这个 ESLint 规则虽然被禁用绝不意味着可以随意使用any——只在严格必要时使用。从源码看这一态度已随时间收紧在 src/renderer/eslint.config.mjs 中typescript-eslint/no-explicit-any目前以warn级别提示配合recommendedTypeChecked的no-unsafe-*系列规则任何any的扩散都会被类型系统标记出来。实践中应优先用unknown 类型收窄、泛型或接口定义替代any。私有属性。文档给出明确优先级优先使用 JavaScript 原生私有字段#前缀而不是 TypeScript 的private修饰符class Foo { #preferred: boolean; }原因是#私有字段是语言级硬性约束运行时真正不可访问而 TS 的private只是编译期约定。不过从源码看Vortex 的存量代码仍大量使用private mXxx风格例如 src/renderer/src/ExtensionManager.ts 的private mWrappee: EventEmitter;、private mExtension: IRegisteredExtension;同时新代码中#私有字段也已在出现如 src/renderer/src/util/i18n.ts 的this.#backendOptions。这说明这是一项正在迁移中的规范新代码遵循#老代码在被触碰时按童子军规则逐步改造。六、函数对齐与格式化对于函数签名CODESTYLE.md 规定两种允许的排版方式单行容纳若参数与返回类型在 100 字符软限制内放得下就全部放在一行多行对齐放不下时每个参数单独一行并对齐缩进返回类型也独占一行function convertRowT(t: TFunction, group: string, rowId: string, value: T) : IRowT { [...] }同时还有一个参数排序约定把泛型/上下文类参数如api、t放在函数参数的最前面function setShortcut(api: IExtensionApi, t: TFunction, profile: IProfile) { [...] }这一约定的工程意义在于api扩展 API与t翻译函数是 Vortex 扩展代码中的横切依赖几乎每个函数都要用到把它们固定在首位读者无需在长参数列表里翻找调用处也更一致。源码实证随处可见例如 src/renderer/src/controls/ActionDropdown.tsx 的IBaseProps把t: TFunction列为第一个属性src/renderer/src/controls/ActionControl.tsx 中IActionControlProps亦然。TFunction类型的定义位于 src/renderer/src/util/i18n.tsexport type TFunction typeof I18next.t;扩展开发者可以直接复用它声明自己函数的t参数类型。七、本地化i18n规范Vortex 是多语言应用CODESTYLE.md 因此对前端文本的本地化提出硬性要求前端所有文本都必须可本地化错误信息除外错误信息见下一节走的是另一套规范被本地化的文本必须是静态的——禁止把动态拼接的字符串传给翻译函数。文档给出正反示例// 错误示范动态拼接的 key/文本 const text something ? give you up : let you down const song t(Never gonna ${text}) // 正确示范静态模板 占位符替换 const text something ? give you up : let you down const song t(Never gonna {{ text }},{ replace: { text } })核心原因翻译后端i18next按静态 key查找译文案动态拼接的字符串无法被匹配与翻译也会破坏缺失 key 的统计而{{ }}占位符 { replace: { ... } }的机制既能表达动态内容又保持模板本身静态。仓库的 i18n 初始化代码src/renderer/src/util/i18n.ts印证了这套机制init()基于 BCP 47 语言标签校验无效则回退en、fallbackLng: en、fallbackNS: common并注册了common、collection、mod_management、download_management、profile_management、nexus_integration、gamemode_management、extension_manager、health_check、gamebryo-plugin-management、support_bundle等多个命名空间——对应的翻译文件可以在 locales/en 下找到。开发模式还会启用HIGHLIGHT_I18N后处理器HighlightPP把所有译文变成大写并打上TT:前缀用于肉眼识别漏翻译/重复翻译。八、错误日志规范让错误消息可分组Vortex 的错误反馈机制是按错误消息 堆栈对用户上报的错误进行分组以避免同一问题被重复上报刷屏。因此 CODESTYLE.md 规定错误消息中凡是依赖用户系统、随机数、URL 等动态信息必须放进引号中这样分组逻辑会忽略引号内的动态片段否则同一个错误只要设置了 message每次出现都会生成一条新的上报记录。throw new CustomError(CustomName ${Dynamic information goes here in quotes})这条规范在仓库中有完整的底层支撑。首先错误类型体系位于共享库 src/shared/src/errors/base.tsVortexError的身份不依赖类原型而是承载在data.kind判别联合上消息则要求构造前已解析好上下文路径、URL。其次错误分组的确依赖消息与堆栈的指纹文档 docs/error-reporting/fingerprint-resolution.md 说明遥测系统会给每个错误打上堆栈指纹如a1b2c3d4相同指纹的错误在仪表盘上合并为一行而动态片段必须被隔离在引号内正是为了保证指纹稳定——否则每个用户的错误都会算出不同指纹仪表盘将充满重复条目。在 src/renderer/src/util/CustomErrors.ts 中可以看到ProcessCanceled、UserCanceled等常用错误类型该文件只是兼容层实际类型从vortex/shared/errors再导出。给扩展开发者的建议自定义错误时把易变信息游戏路径、模组名、URL、版本号等一律包进引号固定信息放在引号外这样同一个根因的错误才能被正确聚合也便于团队定位修复。九、文件命名与目录结构CODESTYLE.md 对文件命名给出如下提案文档中标注为Proposal若文件主要内容是类、接口或 React 组件文件名与类名一致使用UpperCamelCase如ActionControl.tsx对应组件ActionControl若文件主要是独立函数使用lowerCamelCase如i18n.ts、CustomErrors.ts。仓库中该约定执行得相当一致src/renderer/src/controls 下的.tsx组件几乎全部采用UpperCamelCase.tsx命名与文件内组件同名而工具类文件如 src/renderer/src/util/i18n.ts、src/shared/src/errors/base.ts 则用小驼峰。目录结构上Vortex 渲染进程按功能域组织controls、util、actions、contexts、extensions/功能域共享代码收拢在 src/shared/src游戏扩展各自独立成包extensions/games 下的每个game-*目录。清晰的文件命名 职责分明的目录让 1000 文件的仓库依然可以快速定位代码。十、测试策略聚焦 off-path 与关键行为CODESTYLE.md 对测试的态度很务实不追求 99.9999999% 的覆盖率但必须写测试。团队约定所有off-path非主路径/边界路径和关键行为都要有测试覆盖文档特别点名了两类场景——修改 mod 暂存文件夹mod staging folders设置与下载目录downloads directory设置。理由是这类代码一旦出错会直接影响用户数据模组文件、下载文件的位置管理必须保证可靠。仓库中的测试体系与此呼应渲染进程存在 346 个测试文件src/renderer/src下覆盖actions/、contexts/、下载适配器IPCDownloadAdapter.test.ts等等关键路径游戏扩展同样带测试例如 extensions/gamebryo-savegame-management/test/savegame-parser.test.ts 对每个游戏Skyrim、Fallout4等的存档做quick read/full read解析断言反馈扩展 extensions/feedback/src/actions/session.test.ts 验证 action 创建与 reducer 行为工具函数也有单测如bcp47.test.ts语言标签校验、safeCreateAction.test.ts等。测试框架统一为 Vitest根目录 vitest.config.ts 及各子包的vitest.config.*配合 oxlint.base.config.jsonvitest插件被显式启用与 ESLint 的 type-checked 规则共同守护质量。从源码结构看Vortex 的策略是**覆盖率不设数字目标但关键逻辑必须有断言兜底**这与 CODESTYLE.md 的表述完全一致。结语风格规范如何融入日常开发回顾 CODESTYLE.md它的价值不在背下每条规则而在于一套可执行的协作契约童子军规则确立了顺手清理存量代码的演进姿态行宽/函数长度限制保证代码在并排窗口中可读弃 Bluebird、规范命名、静态本地化、错误消息分组、关键行为测试这些条目则逐一对应着仓库中的 lint 规则、自定义 error 类型与 Vitest 测试。对于希望为 Vortex 贡献代码尤其是编写扩展的开发者本文就是你的提交前检查清单而对于任何正在演进的大型 TS/React 项目Vortex 这套文档定标准 → lint 设门槛 → warn 先行 → error 收尾的治理模式本身就是一个值得借鉴的范本。快速自查清单提交前过一遍行宽 ≤ 100硬 150函数 ≤ 25 行没有 Bluebird类型/接口/枚举/组件按约定命名且接口带I前缀前端文本全部走t()且模板静态错误消息中的动态信息在引号内关键与 off-path 逻辑有测试——全部通过你就可以像童子军一样留下一片比自己来时更干净的营地。赞分享桌面应用【免费下载链接】VortexVortex Development项目地址https://gitcode.com/gh_mirrors/vor/Vortex点击查看免费下载相关推荐如何为 SillyTavern 配置 AI 后端从云端 API 到本地模型的完整实战如何为 SillyTavern 配置 AI 后端从云端 API 到本地模型的完整实战 SillyTavern 是一个开源的 LLM 前端把 OpenAI、C人工智能AI 应用交互助手前端gRPC C 代码风格指南Google 风格规范与 clang-format 工程化落地实践gRPC C 代码风格指南Google 风格规范与 clang format 工程化落地实践 本文围绕 gRPC 仓库中的 C 代码风格规范展开系统后端RPC框架微服务通信OpenIM Go 编码规范实战指南从代码风格、命名到 golangci-lint 落地OpenIM Go 编码规范实战指南从代码风格、命名到 golangci lint 落地 OpenIMopen im server是一套以 Go 为核心语即时通讯后端微服务WebSocket上一篇learnxinyminutes-docs 德文版 Vim 指南深度解析从导航基础到 .vimrc 定制下一篇Convex 文本批量导入实战基于 text-importer 示例构建带文本索引的大数据表创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

进销存ERP源码+小程序二次开发实战:库存扣减、单据流与避坑指南

进销存ERP源码+小程序二次开发实战:库存扣减、单据流与避坑指南

简介:这是一套面向中小企业与开发者的完整进销存ERP管理系统源码,采用VS2012 .NET与MsSQL技术栈,标准版功能简洁实用,已有多家企业稳定运行,适合需要快速搭建电商、销售、采购、生产等业务模块的团队参考或二次开发。压…

2026/10/14 20:22:41 阅读更多 →
C#科学计算器核心:递归下降解析器与表达式求值实践

C#科学计算器核心:递归下降解析器与表达式求值实践

简介:C#科学型计算器完整开发资料,面向正在学习WinForms/WPF桌面编程的高校学生,及需要完成课程设计或巩固C#事件驱动开发的读者。项目覆盖四则运算、对数、正弦余弦、百分比和二进制/八进制/十六进制转换,以“界面控件布局—按钮…

2026/10/14 20:22:41 阅读更多 →
OCLP-Mod 后台守护进程机制全解析:自动根补丁监控、更新预缓存与 KDK 管理

OCLP-Mod 后台守护进程机制全解析:自动根补丁监控、更新预缓存与 KDK 管理

桌面应用CLI系统编程 【免费下载链接】OCLP-Mod A mod version for OCLP,with more interesting features. 项目地址: https://gitcode.com/gh_mirrors/oc/OCLP-Mod 点击查看 免费下载 OCLP-Mod 通过一组常驻后台的 launchd 服务(LaunchAgent / LaunchD…

2026/10/14 20:22:41 阅读更多 →

最新新闻

AI高薪风口来袭!小白程序员如何抓住机遇,收藏这份学习指南?

AI高薪风口来袭!小白程序员如何抓住机遇,收藏这份学习指南?

文章主要介绍了AI行业的薪资现状,从实习生日薪5000元到年薪上亿,AI人才市场正在经历一场白热化的争夺战。文章指出,AI正在“入侵”每一个行业,人才缺口超过500万,普通人有机会分到一杯羹。文章建议普通人通过系统学习掌…

2026/10/14 21:14:53 阅读更多 →
大厂校招薪资大揭秘:小白程序员必看,收藏这份热门岗位薪资指南!

大厂校招薪资大揭秘:小白程序员必看,收藏这份热门岗位薪资指南!

本文汇总了字节跳动、腾讯、阿里巴巴等热门大厂校招薪资情况,涵盖前后端开发、AI/Agent方向、测开等岗位。数据来源于往届案例及公开信息,详细展示了不同级别薪资待遇及福利。文章提醒求职者在选择Offer时,不仅要关注总包,还要了解…

2026/10/14 21:14:53 阅读更多 →
如何快速上手cad-viewer:10分钟在浏览器中打开你的第一份DWG/DWG图纸

如何快速上手cad-viewer:10分钟在浏览器中打开你的第一份DWG/DWG图纸

前端3D渲染图形学 【免费下载链接】cad-viewer The world’s first fully web-based DXF/DWG viewer and editor that runs entirely in the browser — no backend server required. 项目地址: https://gitcode.com/gh_mirrors/cad/cad-viewer 点击查看 免费下载 …

2026/10/14 21:14:53 阅读更多 →
大模型高薪诱惑:年薪百万?小白必看收藏!

大模型高薪诱惑:年薪百万?小白必看收藏!

一篇顶会一作AIGC方向211本硕,某短视频大厂算法岗月入4.5万,实际年薪或超百万。但需注意,高薪并非保底,且薪资构成复杂,包括签字费、期权等。大厂算法岗普通档薪资为26k-36k,该岗位薪资远超普通水平&#x…

2026/10/14 21:14:53 阅读更多 →
AI工程师两大门派:传统算法与AI大模型应用开发,收藏这份入门指南!

AI工程师两大门派:传统算法与AI大模型应用开发,收藏这份入门指南!

文章介绍了AI领域的两大门派:传统算法工程师和AI大模型应用开发工程师。前者是“基建狂魔”,通过数学和编程解决实际问题,如精准推荐、最优路线规划等;后者是“场景魔术师”,利用现成大模型解决业务落地难题&#xff0…

2026/10/14 21:14:53 阅读更多 →
阿里云短信签名模板审核避坑指南与Python调用实战

阿里云短信签名模板审核避坑指南与Python调用实战

简介:本资源是一份面向Java开发者的企业级短信集成实战示例,聚焦阿里云短信服务(Dysmsapi)的快速接入与稳定调用,适用于用户注册验证、密码重置、订单通知等典型业务场景。压缩包共92个文件,含68个C#源码文…

2026/10/14 21:13:53 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →