Angular Flex Layout 服务端渲染(SSR)完整指南:FlexLayoutServerModule 静态样式生成原理与三种配置方案
前端UI组件【免费下载链接】flex-layoutProvides HTML UI layout for Angular applications; using Flexbox and a Responsive API项目地址https://gitcode.com/gh_mirrors/fl/flex-layout点击查看免费下载导读本文围绕angular/flex-layout在 Angular UniversalSSR场景下的官方解决方案展开核心讲解FlexLayoutServerModule的引入方式、它在服务端将响应式指令产生的行内样式改写为静态mediaCSS 的底层机制以及三种可选配置方案静态 CSS 生成 / 传统行内样式 / 完全禁用服务端样式的适用场景与取舍。读完本文你将能够为 Universal 应用正确配置 Flex Layout 的 SSR 支持消除「服务端首屏视图」与「客户端水合视图」之间的响应式样式不一致并理解ServerMatchMedia、StylesheetMap、SERVER_TOKEN等核心构件在服务端的工作方式。本文以仓库内文档 Using-SSR-with-Flex-Layout.md 与 guides/SSR.md 为主体并结合仓库源码进行原理级佐证。一、为什么 SSR 需要 Flex Layout 的特殊处理浏览器端的工作方式动态 MatchMedia在浏览器中Flex Layout 依赖全局Window对象上的MatchMedia接口工作当某个断点breakpoint被激活或停用时底层服务会通知各个 Flex 指令由指令以「行内样式inline style」的方式向元素注入相应的 CSS。对应源码可见于 core/match-media/match-media.tsMatchMedia.registerQuery()通过buildMQL(query)构造MediaQueryList并在onMQLEvent回调中通过this._zone.run(() this.source.next(new MediaChange(...)))把媒体查询变更发布给订阅者MediaMarshaller再根据激活断点调用updateElement/clearElement更新元素样式见 core/media-marshaller/media-marshaller.ts。服务端的问题没有 MatchMedia问题在于服务端没有MatchMedia接口可用。当视图在服务端渲染时任何响应式断点例如fxFlex.sm、fxHide.gt-md都无法被求值最终导致两个问题服务端生成的首屏视图没有应用响应式样式客户端 bootstrap 后重新生成的视图应用了响应式样式两者不一致造成水合hydration阶段可见的样式跳动。另外angular/platform-server的 DOM 实现并不具备getComputedStyle能力这一点在 core/style-utils/style-utils.ts 的注释中也有明确说明。解决方案的思路Flex Layout 给出的解决方案分两步改静态不再把响应式样式写成行内样式而是在服务端把样式集中收集后注入head中的静态style标签改用 CSS 媒体查询用 CSS 的media断点接口替代动态的 JavaScriptMatchMedia接口把「哪个断点激活」的判断交给浏览器自身的样式引擎。这样服务端输出的 HTML 自带完整的响应式样式客户端水合时无需重新计算即可保持一致。二、核心入口FlexLayoutServerModule 与 server 入口点独立入口点的设计意图angular/flex-layout为 SSR 提供独立入口点angular/flex-layout/server其打包配置见 projects/libs/flex-layout/server/ng-package.json公开导出见 projects/libs/flex-layout/server/public-api.ts。正如 projects/libs/flex-layout/server/README.md 所说明的该入口点集中了在服务端运行 Flex Layout 的全部逻辑由于它依赖 Node.js API必须被分割为 server-only 的 bundle——这样做同时避免了把服务端代码打包进浏览器 bundle减少客户端体积。模块定义与导入方式FlexLayoutServerModule的定义非常精简见 projects/libs/flex-layout/server/module.tsimport {NgModule} from angular/core; import {SERVER_PROVIDERS} from ./server-provider; NgModule({ providers: [SERVER_PROVIDERS] }) export class FlexLayoutServerModule {}也就是说它自身不含任何声明与导入全部能力来自SERVER_PROVIDERS提供的一组服务端 Provider下一节详解。将它导入到服务端模块通常是app.server.module.tsimport {NgModule} from angular/core; import {FlexLayoutServerModule} from angular/flex-layout/server; NgModule(({ imports: [ ... other imports here FlexLayoutServerModule, ] })) export class AppServerModule {}注意该模块除了在 Angular 应用于服务端 bootstrap 之前完成全部样式处理/渲染外还会把MatchMedia替换为服务端兼容实现ServerMatchMedia。仓库中的 Universal 演示应用正是这样做的projects/apps/universal-demo-app/src/app/app.server.module.tsimport {NgModule} from angular/core; import {ServerModule} from angular/platform-server; import {AppModule} from ./app.module; import {AppComponent} from ./app.component; import {FlexLayoutServerModule} from angular/flex-layout/server; NgModule({ imports: [ AppModule, ServerModule, FlexLayoutServerModule, ], bootstrap: [AppComponent], }) export class AppServerModule {}导入顺序约束原文档明确要求FlexLayoutServerModule的导入必须排在FlexLayoutModule或任何间接导入了FlexLayoutModule的模块之后。该约束在未来的版本中可能被放宽但当前版本请务必遵守以确保服务端 Provider 正确覆盖浏览器端行为。三、原理剖析服务端静态样式是怎么生成的SERVER_PROVIDERS三件套SERVER_PROVIDERS在 projects/libs/flex-layout/server/server-provider.ts 中由三个 Provider 组成export const SERVER_PROVIDERS [ { provide: BEFORE_APP_SERIALIZED, useFactory: FLEX_SSR_SERIALIZER_FACTORY, deps: [ StylesheetMap, MatchMedia, DOCUMENT, BREAKPOINTS, MediaMarshaller, ], multi: true, }, { provide: SERVER_TOKEN, useValue: true }, { provide: MatchMedia, useClass: ServerMatchMedia } ];三者各司其职Provider作用BEFORE_APP_SERIALIZEDmulti注册一个 Angular Universal 序列化前的钩子在把应用渲染结果序列化为 HTML 之前执行FLEX_SSR_SERIALIZER_FACTORY生成的回调把静态样式写入文档headSERVER_TOKEN true告诉全库「当前运行在服务端且已加载 Server 模块」相关指令据此走服务端样式收集路径MatchMedia → ServerMatchMedia用服务端专用实现替换标准MatchMedia支持手动激活/停用断点序列化前钩子FLEX_SSR_SERIALIZER_FACTORYFLEX_SSR_SERIALIZER_FACTORYserver-provider.ts返回一个回调函数执行时调用generateStaticFlexLayoutStyles(...)生成完整 CSS 文本创建一个style元素加上flex-layout-ssr类CLASS_NAME定义为flex-layout-见 core/browser-provider.ts把生成的 CSS 文本写入该style元素并追加到document.head。也就是说服务端最终输出的 HTML 中会包含一个携带全部响应式样式的style标签浏览器端无需任何额外计算即可直接匹配media规则。核心算法generateStaticFlexLayoutStylesgenerateStaticFlexLayoutStylesserver-provider.ts的工作流程如下从StylesheetMap虚拟样式表见 core/stylesheet-map/stylesheet-map.ts取出当前所有指令产生的默认样式用generateCss生成一个作用于all媒体查询的样式块即无媒体条件的基准样式通过mediaMarshaller.useFallbacks false关闭回退样式查找逻辑对应 core/media-marshaller/media-marshaller.ts服务端会显式填充 all 段无需再激进地寻找回退值按断点优先级升序sortAscendingPriority依次遍历所有已注册断点先serverSheet.clearStyles()清空虚拟样式表再mediaController.activateBreakpoint(bp)手动激活该断点——此时各指令基于「该断点匹配」重新计算并写入样式将此时的虚拟样式表用generateCss生成包在media bp.mediaQuery中的 CSS 块并追加最后deactivateBreakpoint(bp)停用断点继续下一个。注意其中的细节nextId 0会在每次服务端渲染时重置避免多次渲染导致类名序号持续递增每个元素只会分配一个类名getClassName通过classMap复用既避免类名爆炸也让同一元素在各断点的规则可以彼此独立。generateCssserver-provider.ts为每个带样式的元素生成形如.flex-layout-0 { display:flex; flex-direction:row; }的规则并将其整体包裹进media mediaQuery { ... }。服务端 MatchMediaServerMatchMedia 与 ServerMediaQueryListServerMatchMediaprojects/libs/flex-layout/server/server-match-media.ts继承自MatchMedia是服务端专用实现buildMQL(query)不再调用window.matchMedia()而是构造ServerMediaQueryList一个实现了MediaQueryList接口的类继承EventTarget提供activateBreakpoint(bp)/deactivateBreakpoint(bp)方法在服务端渲染阶段手动把某个断点的matches置为true/false并通知监听者支持通过布局配置项ssrObserveBreakpoints指定一组在服务端默认激活的断点别名如[gt-sm, lt-md]构造时若遇到未知别名会输出console.warn。ServerMediaQueryListserver-match-media.ts维护自己的监听器列表activate()/deactivate()时以{matches, media}形式回调所有监听器addEventListener、dispatchEvent等服务端用不到的方法均为空实现。样式收集路径StyleUtils 的服务端分支在浏览器端指令通过StyleUtils.applyStyleToElement直接写元素行内样式在服务端且SERVER_TOKEN为true时则改走虚拟样式表收集见 core/style-utils/style-utils.tsif (isPlatformBrowser(this._platformId) || !this._serverModuleLoaded) { isPlatformBrowser(this._platformId) ? element.style.setProperty(key, value) : setServerStyle(element, key, value); } else { this._serverStylesheet.addStyleToElement(element, key, value); }即只有「服务端 已加载 Server 模块」时样式才被写入StylesheetMap虚拟样式表最终由序列化钩子统一转成静态 CSS。而StyleUtils.lookupStyle在服务端读取样式时也优先查虚拟样式表getStyleForElement保证服务端渲染期间各指令能互相感知彼此写入的样式。四、三种使用方案详解原文档Using-SSR-with-Flex-Layout.md给出了三种方案按推荐程度依次排列。方案一推荐服务端生成静态 CSS在服务端 bundle一般为app.server.module.ts中导入FlexLayoutServerModule代码见上文。确保其导入顺序在FlexLayoutModule或间接导入它的模块之后。完成。此时应用已切换到服务端实现响应式样式会以静态mediaCSS 形式随服务端 HTML 输出。这是唯一能保证「服务端首屏与客户端水合视图响应式一致」的方案。方案二传统方案仅生成行内样式不导入FlexLayoutServerModule即可。此时服务端仍按浏览器逻辑把样式写成行内样式但无法应用任何断点规则。你会收到一条启动警告但不影响使用且该警告不会在客户端打印。警告的来源在 projects/libs/flex-layout/module.tsconstructor(Inject(SERVER_TOKEN) serverModuleLoaded: boolean, Inject(PLATFORM_ID) platformId: Object) { if (isPlatformServer(platformId) !serverModuleLoaded) { console.warn(Warning: Flex Layout loaded on the server without FlexLayoutServerModule); } }即在服务端平台检测到SERVER_TOKEN为falseServer 模块未加载时打印警告。方案三服务端完全不生成 Flex Layout 样式不导入FlexLayoutServerModule但手动导入SERVER_TOKEN并显式提供trueimport {SERVER_TOKEN} from angular/flex-layout; {provide: SERVER_TOKEN, useValue: true}这样 Flex Layout 会跳过服务端样式的生成指令不会收集任何样式到虚拟样式表。注意如果同时提供了该 token 与FlexLayoutServerModule样式依然会被渲染。因为SERVER_PROVIDERS中的BEFORE_APP_SERIALIZED钩子仍会执行静态 CSS 生成。这一点在 core/tokens/server-token.ts 的注释中也有说明SERVER_TOKEN是「告知是否已包含 Server 模块」的令牌也可手动提供以在 SSR 时禁用样式。该方案适合你打算完全自行处理服务端响应式样式例如借助额外的 CSS 框架的场景但需要自行承担首屏一致性风险。五、相关配置项serverLoaded 与 ssrObserveBreakpointsLayoutConfigOptions见 core/tokens/library-config.ts中有两个与服务端渲染直接相关的配置配置项类型默认值作用serverLoadedbooleanfalse是否模拟「模块处于服务端模式」配合FlexLayoutModule.withConfig({serverLoaded: true})在测试中模拟服务端行为ssrObserveBreakpointsstring[][]服务端默认视为激活的断点别名列表由ServerMatchMedia构造时解析serverLoaded的用法可从测试用例窥见如 flex/flex/flex.spec.ts 的FlexLayoutModule.withConfig({serverLoaded: true})它让withConfig在提供配置的同时也提供{provide: SERVER_TOKEN, useValue: true}见 projects/libs/flex-layout/module.ts从而在浏览器测试环境中模拟服务端分支。ssrObserveBreakpoints的解析逻辑在 server-match-media.ts按别名在注册的断点中查找并加入_activeBreakpoints之后buildMQL会把这些断点对应的查询标记为激活。示例FlexLayoutModule.withConfig({ ssrObserveBreakpoints: [gt-sm, lt-lg], });注意ssrObserveBreakpoints只决定哪些断点在服务端渲染时「初始激活」而静态 CSS 的生成方案一并不依赖它——generateStaticFlexLayoutStyles会遍历全部注册断点逐一激活并收集样式二者的用途不同。六、局限性SSR 下的 DOM 能力不足原文档明确指出 SSR 的一个固有缺陷服务端缺乏能力完整的 DOM 渲染引擎因此 Flex Layout 的部分功能会受损一些 Flex 指令会向上查找「带 flex 样式的父节点」以避免覆盖父级样式但如果这些样式定义在style块、组件外部样式或独立样式表中服务端无法找到它们服务端没有getComputedStyleStyleUtils.lookupStyle只能查行内样式与虚拟样式表见 style-utils.ts。变通方案是把所有与 Flex 相关的样式内联化。例如若外部样式表中有一个设置flex-direction的 class请把该样式直接内联到应用该 class 的元素上。实际影响通常很小因为这些样式的值在 bootstrap 时会被正确加载。但这是 SSR 与其服务端 DOM 实现带来的客观限制需要在项目实践中注意。七、在 Universal 应用中完整落地参考 universal-demo-app仓库自带一个完整的 SSR 演示应用universal-demo-app可作为最佳实践范本项目配置见 angular.json入口文件projects/apps/universal-demo-app/src/main.server.ts导出AppServerModule供 Angular Universal 引导。浏览器端模块projects/apps/universal-demo-app/src/app/app.module.ts导入BrowserModule.withServerTransition({ appId: serverApp })与FlexLayoutModule是常规用法。服务端模块projects/apps/universal-demo-app/src/app/app.server.module.ts在AppModule之后导入ServerModule与FlexLayoutServerModule顺序满足「Server 模块在后」的要求。Express 服务器projects/apps/universal-demo-app/server.ts使用nguniversal/express-engine的ngExpressEngine({ bootstrap: AppServerModule })渲染所有路由并托管dist/universal-demo-app/browser下的静态资源默认监听PORT环境变量或 4000 端口。服务端编译配置projects/apps/universal-demo-app/tsconfig.server.jsonentryModule指向app/app.server.module#AppServerModule编译入口包含main.server.ts与server.ts。构建与运行命令来自 package.json# 先构建浏览器端再构建服务端 bundle yarn build:universal-demo-app # 启动 SSR 开发服务器nguniversal/builders 的 ssr-dev-server yarn serve:universal-demo-app此外仓库还提供了 SSR 环境下的测试通道yarn test:ssr通过 test/webpack-spec-ssr-bundle.js 与 test/jasmine-ssr.json 在服务端平台下运行全部*.spec.ts测试入口见 projects/libs/flex-layout/test.ssr.ts可用于验证指令在ServerTestingModule下的服务端行为。八、小结与决策建议场景推荐做法需要服务端首屏与客户端水合样式一致导入FlexLayoutServerModule方案一旧项目、可接受行内样式与首屏不一致不导入仅依赖行内样式方案二注意启动警告服务端完全不输出 Flex Layout 样式提供{provide: SERVER_TOKEN, useValue: true}方案三切勿与 Server 模块同时使用需要服务端初始激活特定断点配置ssrObserveBreakpoints外部样式表中有 flex 相关样式内联到对应元素规避服务端样式查找限制最后本文所依据的完整指南还可见于仓库中的 guides/SSR.md含更详细的背景与限制说明以及入口点说明 projects/libs/flex-layout/server/README.md建议与实际部署时结合阅读。赞分享前端UI组件【免费下载链接】flex-layoutProvides HTML UI layout for Angular applications; using Flexbox and a Responsive API项目地址https://gitcode.com/gh_mirrors/fl/flex-layout点击查看免费下载相关推荐终极指南3步解决Blender模型在Unity中的旋转错乱问题终极指南3步解决Blender模型在Unity中的旋转错乱问题 还在为Blender制作的精美模型导入Unity后方向错乱而烦恼吗作为3D开发者你一定经历开发工具游戏开发res-downloader 十分钟上手视频号、抖音视频资源采集实操指南res downloader 十分钟上手视频号、抖音视频资源采集实操指南 你有没有这样的经历看中一条视频素材要手动找下载入口、逐个粘贴链接、再等它一个个保桌面应用网络音视频Angular SSR 服务端渲染完全指南从 Angular Universal 原理到实践配置Angular SSR 服务端渲染完全指南从 Angular Universal 原理到实践配置 SSRServer Side Rendering服务端渲文档教程知识库上一篇enzyme .filter(selector) 方法详解在 ShallowWrapper 中按选择器精确筛选节点下一篇Zerox 护照类证件 OCR 实战从英国护照样本页图像到结构化 Markdown 的完整解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

kgateway e2e 测试负载均衡实践:基于 GitHub Actions 矩阵的集群分片调度

kgateway e2e 测试负载均衡实践:基于 GitHub Actions 矩阵的集群分片调度

API网关云原生微服务 【免费下载链接】kgateway The Cloud-Native API Gateway and AI Gateway 项目地址: https://gitcode.com/gh_mirrors/kg/kgateway 点击查看 免费下载 导读 kgateway 的端到端(e2e)测试需要在真实运行的 Kubernetes 集…

2026/10/12 3:47:17 阅读更多 →
Go GMP 调度器:从 G/M/P 三色模型到抢占式调度全景

Go GMP 调度器:从 G/M/P 三色模型到抢占式调度全景

Go GMP 调度器:从 G/M/P 三色模型到抢占式调度全景goroutine 看起来轻量,背后却是一套精密的 GMP 调度系统。理解 M/P/G 三色模型,能让你写出不再"看似并发但串行执行"的 bug。一、GMP 是什么? G(goroutine&…

2026/10/12 3:47:17 阅读更多 →
Gin框架跨域CORS中间件原理与精细粒度控制实战

Gin框架跨域CORS中间件原理与精细粒度控制实战

Gin框架跨域CORS中间件原理与精细粒度控制实战 导语 前后端分离架构下,CORS(跨域资源共享)是每个后端开发者绕不开的话题。很多开发者只是无脑添加Access-Control-Allow-Origin: *,却不知道这背后隐藏的安全风险和精细控制方法。本…

2026/10/12 3:47:17 阅读更多 →

最新新闻

llama.cpp与GGUF:本地大模型部署实战指南

llama.cpp与GGUF:本地大模型部署实战指南

在本地大模型这个圈子里,llama.cpp 和 GGUF 这两个词几乎是一起出现的。前者是那个负责把所有计算跑起来的 C 推理引擎,后者是它最通用的模型载体格式。有人把这种组合叫“裸引擎”——没有花哨界面、没有一键安装、没有一个完整对话产品该有的外壳&…

2026/10/12 4:40:47 阅读更多 →
AI功能验收流程:从92次无效请求到可量化交付

AI功能验收流程:从92次无效请求到可量化交付

1. 项目概述:当验收流程成为AI落地的最大瓶颈“92 次请求烧掉 1340 万 token”——这个标题不是夸张修辞,而是某次真实交付现场的后台日志快照。它背后没有模型崩塌、没有GPU宕机、没有API限流,只有一套看似标准却漏洞百出的验收流程&#xf…

2026/10/12 4:40:47 阅读更多 →
软件测试实验室申请CNAS/CMA资质:20万到50万预算全拆解与省钱指南

软件测试实验室申请CNAS/CMA资质:20万到50万预算全拆解与省钱指南

前几天一位做软件测试团队管理的朋友找我,说领导让他们实验室准备申请CNAS/CMA资质,让他三天内交一份费用预算清单,预算区间、花钱节奏、隐性成本都要讲清楚。这个问题我前前后后帮好几个团队做过测算,几乎每次聊到最后大家都会发…

2026/10/12 4:40:47 阅读更多 →
用披萨尺寸预测价格:Python+sklearn 线性回归完整实战指南

用披萨尺寸预测价格:Python+sklearn 线性回归完整实战指南

1. 为什么拿披萨价格练线性回归:从需求到模型的一整条链路如果你刚开始接触机器学习,第一个算法十有八九会遇到线性回归。市面上的教程喜欢拿房价、股票、销量来举例,动辄几十个特征、上万条样本,结果新手连数据长什么样都没搞明白…

2026/10/12 4:40:47 阅读更多 →
研发人专利署名困境:用中国专利.skill构建贡献证据链

研发人专利署名困境:用中国专利.skill构建贡献证据链

1. 研发人的署名困境:为什么你的代码变成了别人的专利干了七八年研发,代码写了无数行,架构图改了几十版,结果年底一看专利公示,发明人栏里赫然列着产品经理、项目经理甚至行政主管的名字,唯独没有你这个真正…

2026/10/12 4:40:47 阅读更多 →
VSC 好用插件推荐:用 TaoToken 统一 Key 打通 Cline MCP 与 Codex auth.json

VSC 好用插件推荐:用 TaoToken 统一 Key 打通 Cline MCP 与 Codex auth.json

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

2026/10/12 4:39:47 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →