React Native for OpenHarmony开发环境快速部署指南:从版本选型到踩坑排查
从去年开始我陆续把团队几套存量React Native业务往OpenHarmony生态上搬整个过程比预想中要复杂但也比想象中更有价值。React Native for OpenHarmony后文统一叫RNOH现在确实是很多团队接入鸿蒙应用体系的重要跳板它把前端熟悉的React Native开发体验带到了OpenHarmony设备上让市面上的JavaScript生态资产能够低成本迁移。我第一次搭建环境时光是版本匹配和工具链配置就折腾了两天踩了不少坑。这篇就把快速部署RNOH开发环境的完整流程拆开讲清楚包括版本怎么选、环境怎么搭、工程怎么跑起来以及我在实际项目中总结的排查技巧。1. 部署前需要想清楚的三件事版本、基线与仓源1.1 RNOH到底是什么跟你想象中的React Native有什么不同RNOH不是一个简单的“把React Native包名改一改”的移植项目而是一套面向OpenHarmony的完整适配层。它保留了React Native的JavaScript代码组织方式、组件模型和状态管理范式但把底层的渲染引擎、原生模块和生命周期管理全部重新对接到了OpenHarmony的Ability框架与ArkUI引擎上。换句话说你用React和TypeScript写的业务逻辑几乎可以原样复用但桥接层、自定义原生组件以及构建流程都必须按照RNOH的规范重新走一遍。很多刚从Android转过来的开发者会下意识以为“RN跑起来就是一个app”在OpenHarmony这里并不完全成立。RNOH工程的产物是一个OpenHarmony的hap包里面的入口是一个ArkTS写的壳工程真正跑界面的却是JavaScript bundle。壳工程负责启动、加载bundle、把JS层面的组件树映射到OpenHarmony的原生节点上。这个“壳Bundle”的双层结构是理解后续所有配置的基础。所以你在部署环境时不能只盯着npm和Metro还要同时搞定DevEco Studio、OpenHarmony SDK、hdc工具链以及怎么把React Native的构建输出正确塞进原生工程。这也是很多人第一次搭建时卡住的最大原因以为是“装个node就能跑”结果最后发现原生工程的编译链才是真正的水位线。1.2 版本号必须锁死RNOH、RN、SDK三者如何对齐RNOH的版本兼容性比普通开源库要敏感得多。因为RNOH要跟随React Native上游的API变化同时又要匹配OpenHarmony SDK的接口演进这两条线只要有一方大版本跳动都会导致桥接层报出稀奇古怪的编译错误。我建议在项目初始化之前先去RNOH官方仓库的releases页面确认当前稳定分支的compatibility matrix里面会明确写出某个RNOH版本对应哪个React Native版本、哪个OpenHarmony SDK版本。以我目前常用的一套组合为例RNOH 0.72.5对应React Native 0.72.x适配OpenHarmony API 10到API 12配合DevEco Studio 4.0系列使用如果业务需要更新的组件特性再考虑0.73、0.75等分支但每升一个大版本都要跑一遍官方sample工程确认无异常。更稳妥的做法是在package.json里把所有版本号写成固定的精确版本不要用^或~让依赖自动浮动。还有一点容易被忽略React Native的补丁版本可以随上游正常升级但RNOH的适配版本不要动。比如RN从0.72.3升到0.72.7问题不大可如果RNOH自身版本和RN不匹配运行时会出现找不到内部API的错误。这个三角关系最好用一张表格固定在项目文档里每次新同事装环境时直接照抄。这里给出一个常见的版本搭配参考具体以项目初始化时的官方要求为准。组件版本建议Node.js18 LTS或20 LTSOpenJDK17React Native0.72.xRNOH0.72.5DevEco Studio4.0 ReleaseOpenHarmony SDKAPI 10或API 121.3 基础环境清单一台机器每天要装哪些东西先把基础工具列出来缺一个都会在某个阶段突然炸给你看。Node.js是React Native工具链的基座用于跑npm、Metro和各类脚手架OpenJDK 17是Gradle构建原生壳工程时的硬依赖DevEco Studio则是OpenHarmony开发的集成环境它自带SDK管理器、代码编辑和签名工具hdc用于连接真机和安装hap类似Android里的adbohpm则是OpenHarmony的包管理器负责拉取ArkUI原生三方库。装的时候有几个坑要先说。Node.js版本不要盲目追新我实测Node 22在部分RNOH版本下会因为原生编译器的宏兼容问题报错建议固定使用18或20的LTS版本。OpenJDK更关键的其实是JAVA_HOME环境变量如果机器上之前装过其他JDK版本Gradle很容易拿错运行时导致构建时找不到工具链。DevEco Studio装完之后需要在IDE里的SDK Manager主动勾选对应版本的OpenHarmony SDK和toolchains否则后续连设备时会提示缺少hdc。环境变量方面我习惯把node、hdc、ohpm的路径都加到PATH里另外设置DEVECO_SDK_HOME指向SDK根目录很多特殊场景下IDE会优先读这个变量。准备工作做完后建议在命令行里分别执行node -v、java -version、hdc version、ohpm -v确认所有命令都能正常输出。这一步看起来简单但能帮你把“环境没配好”和“项目代码有问题”这两类错误彻底分开后面排查会快很多。2. 快速部署实操20分钟让RNOH工程在模拟器上跑起来2.1 用脚手架初始化一个双端工程RNOH官方提供了一套脚手架工具可以直接生成一个同时包含OpenHarmony壳工程和React Native前端工程的双端项目。我们在空目录下执行初始化命令比如npx react-native-oh/react-native-applatest init MyRNProject --version 0.72.5这里--version参数指定的是React Native版本建议和前面确认好的版本对齐。命令跑完后项目里会有两个核心目录entry是OpenHarmony的壳工程后续用DevEco Studio打开react-native-project是标准RN工程里面放着package.json、index.js以及你的业务代码。我最初拿到这个结构时有点不习惯总觉得“为什么是一个RN项目套一个原生项目”。实际跑通了就明白这个分离是刻意的React Native侧负责业务开发和JS bundle产物生成原生侧负责最后编译打包成hap。两个目录由脚手架里预先配置的脚本联动不需要你手动复制bundle。初始化过程中可能需要下载大量npm依赖如果网络状况不理想建议先配置一下npm源。执行npm config set registry https://registry.npmmirror.com能明显提高依赖拉取速度这个操作后续有包依赖变更时也会继续受益。另外记得让package.json里的react-native版本和RNOH官方文档保持一致不要在初始化后再随意改。2.2 DevEco Studio里的SDK与签名配置脚手架生成的entry目录要用DevEco Studio打开不能直接用React Native的命令行运行。首次打开时IDE会提示配置SDK你需要在Project Structure里指定OpenHarmony SDK的路径和版本。这里不要图省事选最新的API先看RNOH要求的是哪个API level。比如RNOH 0.72.5对应API 10到API 12的兼容区间我们内部统一用API 12做真机调试。签名配置是个很容易卡住的环节。Debug模式下DevEco Studio可以自动生成签名入口在File Project Structure Signing Configs勾选“Automatically generate signature”。但自动签名依赖你登录并拥有开发者权限如果公司项目是统一管理签名可以手动填入发布证书和profile文件。我在搭建环境时用自动签名跑模拟器没问题但装到部分真机上会提示签名不匹配后来在真机开发者选项里重新打开“允许安装未知来源应用”才解决。还有一个细节在项目的local.properties里我通常会显式写清楚sdk.dir和node.dir避免IDE或命令行工具各自找到不一样的SDK和Node路径。这样以后从命令行触发构建时就不会出现“IDE能跑但命令行报错”的诡异情况。2.3 启动Metro并让首屏显示出来万事俱备后真正把应用跑起来需要同时做两件事一是启动React Native的Metro开发服务器二是在DevEco Studio里运行壳工程。先在react-native-project目录执行npm run start启动完成后Metro会监听8081端口。然后在DevEco Studio中选择entry模块点击Run按钮。壳工程编译并安装到设备后会主动向Metro请求JS bundle。如果一切正常你会在模拟器上看到React Native的默认页面终端里也能看到Metro输出的打包日志。Debug模式默认使用远程bundle也就是每次修改JavaScript代码都能在设备上按R键或通过刷新指令快速看到变化。Release模式下则需要先把JS bundle打进原生资源里。我建议开发期间始终用Debug模式因为热更新和错误日志都清晰得多只有在出测试包或上架包时才切到Release。首次构建原生工程会非常慢Gradle下载依赖和C编译都可能占满CPU这很正常。你把org.gradle.jvmargs-Xmx4g加到gradle.properties可以有效减少内存溢出风险编译等待时间也会缩短一些。2.4 真机调试与hap安装的常用命令模拟器上跑通后真机调试是绕不开的一步。第一步连接设备用数据线连上OpenHarmony真机后在开发者模式中打开USB调试。命令行执行hdc list targets能看到设备序列号就代表连接成功。接下来最常用的操作是安装hap。在DevEco Studio里构建产物通常位于entry/build/default/outputs/default/entry-default-signed.hap使用hdc安装的命令是hdc install -r entry-default-signed.hap-r参数允许覆盖安装配合每日构建流程一个小时重装几十遍都很正常。查看设备日志则用hdc hilog可以理解成OpenHarmony版本的logcat。我习惯在排查问题时加上关键词过滤比如hdc hilog | grep ReactNativeJS这样只保留JavaScript侧的错误日志不会被大量系统噪音淹没。如果在真机上遇到Metro连不上先确认电脑和设备是否在同一局域网并检查壳工程里配置的bundle server地址是否指向电脑的局域网IP。3. 核心配置细节工程化落地的关键设置3.1 Metro配置让平台扩展名和代码排除各就各位Metro是React Native的打包器RNOH环境下它需要做两件特殊的事识别Harmony平台扩展名并正确排除不该打进包里的文件。我在metro.config.js里通常会加这样一段const {getDefaultConfig} require(react-native/metro-config); const config getDefaultConfig(config); config.resolver.sourceExts [...config.resolver.sourceExts, harmony.tsx, harmony.jsx, harmony.js, harmony.ts]; config.resolver.assetExts [...config.resolver.assetExts, bin, har]; module.exports config;这样同一个组件可以按平台编写不同实现比如Button.harmony.tsx和Button.ios.tsxMetro会根据运行平台自动选择文件。不过要注意平台扩展名不一定只在RNOH里用如果其他依赖也定义了同名扩展名可能出现解析歧义。我的经验是只有确定需要为OpenHarmony写特殊分支的文件才加.harmony.后缀普通公共组件不要滥用。另外Metro的blockList最好把entry、oh_modules这类原生工程目录排除掉否则Metro扫描文件时会把大量ArkTS代码误当成JS依赖导致首次启动时又慢又容易内存溢出。排除规则用正则表达式写清楚config.resolver.blockList [/entry[\\/].*/, /oh_modules[\\/].*/];配置完成后记得重启Metro而不是让它在终端里一直挂着因为Metro很多配置变更不会自动热加载。3.2 自定义原生模块的正确接入姿势实际业务不可能只靠React Native内置组件迟早要自己写原生模块。RNOH支持用TypeScript或C编写TurboModule再通过N-API暴露给JS层。以最常见的TypeScript原生模块为例你需要先在壳工程里声明一个接口然后实现对应的方法。我在第一次接入时走了不少弯路直接在JavaScript侧写了NativeModules.MyModule却一直拿到undefined。后来才意识到RNOH的模块注册有三个地方必须一致ArkTS接口定义、C侧的实现导出、以及JavaScript的调用名称。任何一边拼写对不上都只能等到运行时报错。这里建议初始化周期里先跑通一个最简的“加法函数”Demo从JS传两个数字给原生原生算完返回结果。等这个链路完全跑通后再逐步增加复杂业务。直接上手大型模块遇到问题时会分不清是接口问题、编译问题还是打包问题。原生模块开发还有一个关键点是权限声明。如果需要使用蓝牙、网络、文件读写等系统能力必须提前在module.json5里配置对应的权限否则原生层调API会直接返回失败。这类权限错误很多时候只出现在真机上模拟器反而不报排查时容易被忽略。3.3 依赖源与版本锁定的工程化管理团队协作时最怕的就是“我这能跑你那报错”。RNOH项目同时涉及npm依赖和ohpm依赖两个包管理器都需要锁定版本。React Native侧使用package-lock.json或yarn.lock是常规操作原生侧ohpm的oh-package-lock.json也要提交到版本库。另外npm源和ohpm仓库地址在同一项目内建议固化到脚本里。比如在scripts/setup.sh中统一执行以下命令npm config set registry https://registry.npmmirror.com ohpm config set registry https://ohpm.openharmony.cn/ohpm/这个动作能极大减少新人环境搭建时因为下载超时导致的挫败感。依赖锁定的另一个好处是Metro再次启动时不会因为依赖版本变化而重新生成不同的转换逻辑整个构建过程更加可重复。如果你在CI环境里跑构建还要注意Node和JDK版本必须和本地开发完全一致。我遇到过一个尴尬情况本地用Node 20编译没问题CI的Node 18编译出来的bundle在部分设备上白屏最后定位到是依赖里用到了Node 20才有的新API。从那之后我要求所有环境都使用同一个Node版本并在CI脚本里显式检查。4. 常见问题与排查技巧我踩过的坑都在这里4.1 启动白屏先查Metro再查bundle路径最后查日志“react native 启动白屏”这个话题排在热词里不是没有原因的RNOH启动白屏也是我遇到最多的现象而且比Android上更隐蔽。在Android上如果Metro没起红屏报错很醒目在RNOH上很多时候只是空白一片日志也没有明显异常。首次遇到时我甚至以为设备卡死了。排查白屏我的顺序是第一确认Metro是否正常在终端里运行且没有打印报错。第二确认壳工程用的是Debug模式并查看应用日志里是否有请求http://localhost:8081/index.bundle的记录。第三用浏览器访问那个bundle地址如果能正常返回JS内容说明Metro侧没问题问题大概率出在壳工程的bundleURL配置。还有一类白屏是C模块初始化失败导致的表面是白屏实际上是底层的字体、图像或事件系统没有加载成功。遇到这种情况用hdc hilog | grep ReactNativeJS和hdc hilog | grep Cpp分别抓日志能更快定位到具体模块。记住白屏不是单一根因一定要从“JS有没有执行”“原生有没有渲染”“桥接有没有拉起”三个层面逐层确认。释放一个我自己的习惯在开发阶段的根组件里设置一个全局错误监听把ErrorUtils和console.error的输出用hilog打出来。这样白屏时能看到JavaScript层的报错而不是对着一个空白页面空想。4.2 native编译失败clang和NDK版本不用盲目升RNOH的一大槽点是原生编译对工具链版本很挑剔。很多人在升级DevEco Studio后原项目突然编译不过报错指向clang或C标准库。这时第一反应往往是去下载最新NDK但结果反而更糟。OpenHarmony的native编译链使用它自己指定的clang版本与Android NDK不是一回事也不是越新越兼容。我在项目初期手动升级过clang版本结果C侧的内存模型和Ark运行时对不上导致整个React Native渲染线程崩溃。建议是DevEco Studio稳稳定在你选定的版本SDK工具的toolchains目录不要擅自替换。如果确实需要升级先在官方sample工程上跑一遍完整流程确认同一套工具链能编译通过再回到你项目里。最好记录下当前工程使用的clang和SDK的哈希值这样团队其他人复现环境时能精准匹配。4.3 下载超时与依赖缺失换源和锁版本第一次初始化RNOH项目时最容易遇到的就是依赖下载超时。npm包还好国内的公共npm源一般都能解决ohpm的下载反而更容易卡住尤其是ArkUI原生库的压缩包较大时。我的做法是在初始化前先设置好ohpm的registry然后再执行依赖安装。如果已经安装了部分依赖但中途失败不要急着反复重试。我会先检查node_modules和oh_modules目录是否出现了半下载的文件夹把它们清理干净再重装。盲目的重试可能留下损坏的依赖后续编译报错时很难溯源。还有一个容易忽略的点RNOH脚手架会依赖若干个特定的原生C库它们有时不在npm包的依赖树里而是通过postinstall脚本从其他仓下载。如果公司网络策略严格这类动态下载很容易失败。解决方法是提前把所需压缩包下载到本地再用配置文件指向本地缓存路径。4.4 签名与设备安装问题速查表签名错误和安装失败也是高频问题我整理了一份速查表照着排查能省很多时间。现象常见原因解决方案安装hap提示INSTALL_PARSE_FAILED签名文件与模块名不匹配重新生成签名确认应用包名一致真机连接但hdc list targets为空USB调试未开启或驱动缺失打开开发者模式检查连接线是否支持数据传输Metro无法连接到设备壳工程里的调试IP写的是localhost改为电脑的局域网IP编译时报缺少oh_modules原生依赖未完整安装在entry目录下执行ohpm install页面能显示但点击事件无响应组件桥接注册名称不一致检查ArkTS接口导出名和JS侧调用名这张表里的每个问题我都实际碰到过尤其是“Metro无法连接设备”在办公WiFi下特别常见因为手机和电脑可能被AP隔离了。遇到这种情况先换手机热点试一下基本能快速确认是不是网络隔离问题。5. 实践心得三个能长期提升开发体验的小动作5.1 把调试脚本固化成一个Makefile搭建好环境后我建议第一时间把常用的启动、构建、安装命令写进项目的Makefile或npm scripts。比如make start启动Metromake build生成hapmake install安装到设备。这些看起来只是几条命令的别名但在频繁切换上下文时能帮你省去记忆复杂参数的时间。我在项目里还加了一条make clean用来同时清理Metro缓存、原生构建产物和node_modules。RNOH项目一旦出现难以定位的脏数据问题先执行一次make clean再重建比在IDE里点这里点那里高效得多。用命令规范后新同事接入时也只需要对照README里三个命令不会再出现“我明明按步骤做了但结果不一样”。5.2 用hdc hilog加关键词过滤来替代反复看界面界面白屏或者崩溃时直接在设备上看屏幕效率很低尤其当错误只在启动后的前两秒出现时肉眼根本来不及捕捉。我后来养成了连上设备后第一时间开一个日志窗口提前过滤ReactNativeJS、ERROR、FATAL三个关键词。hdc hilog | grep -E ReactNativeJS|ERROR|FATAL这样每次操作后在终端里看到的错误信息往往比界面描述更精准。JavaScript侧的console.log也会通过ReactNativeJS标签输出等于拥有了前端熟悉的日志控制台。这个方法在调试自定义原生模块时尤其好用原生和JS两侧的日志都会汇到一起按时间线看就知道是谁先出问题。5.3 版本升级前先看changelog并跑一遍demoRNOH的版本节奏不算快但每次升级都可能引入破坏性变化。我给自己定了一个规矩任何依赖升级前先看对应版本的changelog然后在官方sample工程上跑一遍完整流程最后再动业务项目。曾经有一次直接升级了React Native小版本结果某个内部模块的接口签名变了导致桥接层大面积报错回滚又麻烦。从那以后我再也不在业务分支上直接升核心依赖。如果你只是想在当前版本上快速部署不用追求最新特性直接锁定一个经过验证的组合就够了。RNOH和OpenHarmony SDK都在快速演进但作为开发者稳定完成业务交付永远比追逐版本数字更重要。最后分享一个我最近常用的做法把离线好的依赖包和服务器的配置模板放到团队内部共享盘新同事第一次配环境时直接引用本地缓存基本二十分钟就能进入开发状态而不是被网络问题耗掉半天。希望这篇指南也能让你在第一次接触RNOH时少走点弯路。

相关新闻

OpenHarmony 跨端开发实践:React Native 环境搭建与真机踩坑记录

OpenHarmony 跨端开发实践:React Native 环境搭建与真机踩坑记录

先交待一下背景:OpenHarmony不是一个模拟层,也不是套了个WebView壳的兼容方案。它有自己的分布式架构、自己的UI框架(ArkUI)和自己的编译工具链。而React Native for OpenHarmony(社区里一般叫RNOH)要做的&…

2026/10/1 11:42:21 阅读更多 →
ComfyUI DynamicNoise节点详解:动态噪声调度让扩散模型采样更可控

ComfyUI DynamicNoise节点详解:动态噪声调度让扩散模型采样更可控

关于Diffusion模型采样时噪声应该怎么给,很多人都踩过同一个坑:想让构图稳一点,就把种子固定;想让细节丰富一点,就把CFG或步数拉高。但试过一轮就知道,固定强度的噪声最多只能“在安全区里微调”&#xff0…

2026/10/1 11:42:21 阅读更多 →
莱布尼茨积分规则详解:积分号下求导与参数化积分技巧

莱布尼茨积分规则详解:积分号下求导与参数化积分技巧

做积分做到一半,突然发现被积函数里还挂着一个参数,这时候摆在你面前的路通常只有两条:要么硬着头皮先把积分算出来,得到一个关于参数的表达式,再回头对这个表达式求导;要么想办法把求导这个动作直接挪到积…

2026/10/1 11:41:21 阅读更多 →

最新新闻

Skills Manager:统一管理AI编程工具Agent技能碎片化

Skills Manager:统一管理AI编程工具Agent技能碎片化

各家的AI编程工具卷到今天,“Agent技能”已经从一个概念变成了实实在在的生产力。我前后把社区里活跃的那批工具翻了个底朝天,整理出54款在官方或社区层面支持了某种形式Skills的AI编程工具,也就是通过SKILL.md这类文件给Agent注入可复用能力…

2026/10/1 13:18:12 阅读更多 →
四元数与分支定界:存在外点Wahba问题的可证明最优解

四元数与分支定界:存在外点Wahba问题的可证明最优解

1. 从一次失败的姿态解算说起:外点才是真正的敌人我接触Wahba问题是在好几年前做无人机视觉惯性导航的时候。当时项目里需要用双目相机和IMU联合估计飞行器的姿态,跑的是经典Davenport q-method加Q方法求解。仿真数据表现很好,误差曲线漂亮得…

2026/10/1 13:18:12 阅读更多 →
MCP server 实战:让 AI 代理自动发现并调用你的小产品

MCP server 实战:让 AI 代理自动发现并调用你的小产品

1. 从一个“没人发现”的小产品说起 去年年底我把自己做的一个小工具挂到了网上,功能很垂直——帮独立开发者批量检查落地页的 SEO 基础项,比如 title 长度、meta 描述缺失、H1 重复、图片 alt 为空这类琐碎但影响收录的问题。上线三个月,自然…

2026/10/1 13:18:12 阅读更多 →
Redis 8.0 向量数据库实战:从缓存到 AI 检索与 Agent 记忆存储

Redis 8.0 向量数据库实战:从缓存到 AI 检索与 Agent 记忆存储

1. Redis 接入 AI 到底意味着什么Redis 这个名字,做后端开发的基本都绕不开。缓存、分布式锁、消息队列、排行榜,哪儿都有它的身影。但这次它跟 AI 挂上钩,很多人第一反应是:Redis 也要搞大模型了?其实不是。所谓“Red…

2026/10/1 13:18:12 阅读更多 →
Marmoset Viewer 网页嵌入 3D 模型:TaoToken 统一 Key 配置与本地预览验证

Marmoset Viewer 网页嵌入 3D 模型: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/1 13:18:12 阅读更多 →
像素游戏开发必备:双网格瓦片地图工具全解析

像素游戏开发必备:双网格瓦片地图工具全解析

做独立游戏的人,尤其是走像素风这条路的,几乎都绕不开一个环节:画瓦片地图。我见过太多人一开始雄心勃勃,打开画图软件准备大干一场,结果画到第三张瓦片就开始怀疑人生。为什么?因为传统瓦片地图的绘制逻辑…

2026/10/1 13:17:11 阅读更多 →

日新闻

我发现了一个新思路:用 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/1 0:00:30 阅读更多 →
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/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练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/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 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/1 0:00:30 阅读更多 →
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/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练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/1 1:01:17 阅读更多 →