首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Closure Compiler 完全指南:从基础用法到 ADVANCED 深度优化
📅 2026/10/14 8:07:37
✍️ 爱科研究院
👁 阅读 3,247
编译器开发工具前端【免费下载链接】closure-compilerA JavaScript checker and optimizer.项目地址https://gitcode.com/gh_mirrors/clo/closure-compiler点击查看免费下载本文以仓库根目录的 README.md 为核心骨架结合 src/com/google/javascript/jscomp 下的编译器源码、test/com/google/javascript/jscomp/CommandLineRunnerTest.java 测试用例以及 externs 目录系统讲解 Closure Compiler 的定位、核心使用方式、命令行参数、模块约束、构建方法与源码级工作原理。阅读完本文你将能够独立完成从安装、单文件压缩、多脚本合并到 ADVANCED 全量优化的完整实践并理解编译器在背后做了哪些事情、为什么会对输入代码提出严格的约束。一、Closure Compiler 是什么Closure Compiler 是 Google 开源的一款 JavaScript 检查与优化工具。它不是一个传统意义上从源语言编译到机器码的编译器而是从 JavaScript 编译成更好的 JavaScript解析你的 JS 代码、进行分析、移除死代码、重写并压缩剩下的部分同时还会检查语法、变量引用和类型并对常见的 JavaScript 坑发出警告。项目的仓库自述README.md将其定位为A JavaScript checker and optimizer其核心价值在于让 JavaScript下载更快、运行更快。在 Google 内部Closure Compiler 被大规模用于以下场景大幅压缩大型 JavaScript 应用的代码体积尤其是使用ADVANCED优化模式时检查 JS 代码中的错误并校验代码是否符合通用或项目特定的最佳实践conformance定义面向用户的消息使其可以被替换为翻译后的版本从而生成应用的本地化版本将较新的 JS 特性转译transpile为旧浏览器可运行的形式将输出应用拆分为多个 chunk代码块按需单独加载。需要注意的是这些 chunk 是普通 JavaScript 脚本并不使用 ECMAScript 的import/export语法。在源码层面编译器的核心入口位于 src/com/google/javascript/jscomp/Compiler.java命令行入口位于 src/com/google/javascript/jscomp/CommandLineRunner.java其中CommandLineRunner内部定义了Flags类负责解析全部命令行参数。命令行参数的解析依赖 args4j 库见 THIRD_PARTY_NOTICES而底层 JavaScript 解析器则源自 Mozilla Rhino 的改造版本代码位于 src/com/google/javascript/rhinoREADME 的 Dependency Licenses 一节对此有详细说明Rhino 的解析树数据结构被提取并大幅修改同时新增了 JSDoc 解析器和静态类型系统。二、重要的使用前提Important CaveatsREADME 用了大篇幅列出七条重要注意事项这些是理解 Closure Compiler 行为边界的关键任何实际项目接入前都应通读。1. 非 ADVANCED 模式已被弃用除ADVANCED之外的编译模式从一开始就是事后补充afterthoughtGoogle 已将其标记为弃用。对于非ADVANCED场景社区认为其他工具如 terser 等表现相当且与更广泛的 JS 生态集成更好。这意味着如果你只需要简单的压缩可以选择其他工具Closure Compiler 的核心价值集中在ADVANCED全量优化上。2. 不适合任意 JavaScript要让ADVANCED模式产出可正常运行的 JS输入代码必须以 Closure Compiler 的思维方式编写written with closure-compiler in mind。这是使用该工具最大的心智成本。3. 它是全世界优化器Closure Compiler 是一个whole world全量世界优化器它期望直接看到、或至少获得关于每一个全局变量、每一个导出变量、每一个属性名的每一种可能使用方式的信息。它会激进地移除和重命名变量与属性以让输出尽可能小如果全局变量或属性的使用对它隐藏就会产生损坏的输出 JS。虽然可以编写自定义 externs 文件告诉编译器保留某些名称不变以便被编译单元之外的代码安全访问但这种维护往往繁琐详见下文externs 机制。4. 属性重命名要求一致的访问方式属性重命名要求你自始至终用同一种方式访问属性要么统一用obj[p]方括号动态访问要么统一用obj.propName点号访问不能混用。当使用方括号如obj[p]或其他间接方式如let {p} obj;解构赋值访问属性时编译器看不到被引用的属性的字面名称就无法确定obj.propName与obj[p]是否指向同一属性。某些情况下编译器会发现该问题并中止编译报错另一些情况下它会把propName重命名为更短的名字而不自知导致输出 JS 损坏。5. 全局变量的内联与属性链展平编译器会激进地内联全局变量并把全局变量上的属性链展平flatten例如myFoo.some.sub.property会被改写为myFoo$some$sub$property目的是更方便地检测未使用代码。它尽量在会产生损坏输出时退缩或报错终止但在并非为 Closure Compiler 编写的代码中仍有概率识别不出问题、直接生成损坏 JS 而不告警。6. 默认目标环境是浏览器窗口编译器及其默认使用的 externs 假设目标环境是浏览器窗口。虽然也支持 WebWorkers但如果尝试使用 WebWorker 实际不可用的特性编译器很可能不会警告你。另有一些 externs 文件与特性是为 NodeJS 环境添加的见 contrib/nodejs 目录但它们没有得到积极支持且从未工作得很好。7. 模块系统goog.module 优先不使用 lib/base.js 中的goog.module()和goog.require()来声明和使用模块的 JavaScript 得不到良好支持。ECMAScript 的import/export语法直到 2015 年才出现Closure Compiler 与 closure-library 早已发展出自己的模块声明/使用方式这至今仍是唯一被良好支持的模块定义方式。编译器虽然实现了一定程度的 ECMAScript 模块理解但 Google 内部从未从中获益Google 的 TypeScript 代码使用 ES 模块但在交给 closure-compiler 之前会被转换为goog.module()语法。因此 ES 模块支持在 Google 内部实际处于闲置状态其中的 bug 很可能不会被发现或修复。此外曾经加入过的 CommonJS 模块输入支持在 Google 内部也未使用README 明确警告其极有可能在 2024 年某个时间点被完全移除。在源码中src/com/google/javascript/jscomp/Es6RewriteModules.java 专门负责将 ES6 模块重写为goog.module/goog.require体系其中甚至包含对const {assert} goog.require(goog.asserts);这类解构式 require 的重写逻辑。为满足上述目标编译器对输入施加的限制综合以上注意事项README 归纳出使用 Closure Compiler 必须遵守的输入约定使用goog.module()与goog.require()声明和使用模块ES6import/export支持不被积极维护在注释中使用注解annotations声明类型信息并提供编译器避免破坏某些代码模式所需的信息例如nocollapse与noinline对特定对象类型的属性访问要么只用点访问object.property要么只用动态访问object[propertyName]或Object.keys(object)——混用会向编译器隐藏部分属性使用导致属性被重命名时输出代码损坏通常编译器期望将整个应用作为一次编译看待接口必须仔细且显式地构造才能与编译单元之外的代码互操作使用 externs 文件告知编译器哪些变量或属性不得删除或重命名。默认 externs 已声明标准 JS 与 DOM 全局 API若使用不太常见的 API或期望某些外部 JS 代码访问正在编译的代码中的 API则需要补充更多 externs。这些限制在源码中都有对应实现例如 src/com/google/javascript/jscomp/CheckClosureImports.java 负责校验 Closure 模块导入src/com/google/javascript/jscomp/ProcessClosureProvidesAndRequires.java 负责替换goog.provide调用、移除goog.require/goog.requireType/goog.forwardDeclare调用并把a.b {};这类提供provided的命名空间定义注解为IS_NAMESPACE供后续 pass 识别。三、快速开始Getting Started1. 通过 NPM / Yarn 安装注意NPM 包并非由 Google 构建和分发而是社区贡献者 ChadKillingsworth 从独立仓库管理并构建的。安装编译器最简单的方式是使用 NPM 或 Yarnyarn global add google-closure-compiler # 或者 npm i -g google-closure-compiler安装完成后包管理器会自动链接可执行文件直接运行google-closure-compiler这会以交互模式启动编译器。输入以下代码并按Entervar x 17 25;随后按CtrlZWindows或CtrlDMac/Linux再按一次Enter编译器会返回编译结果默认使用SIMPLE模式var x42;这个最小示例背后就是完整编译管线的一次执行解析 → 常量折叠constant folding见 src/com/google/javascript/jscomp/PeepholeFoldConstants.java→ 代码生成src/com/google/javascript/jscomp/CodePrinter.java。17 25在编译期被折叠为常量42。2. 从 Maven 仓库下载预编译的发布版本也可以通过 Maven 获取com.google.javascript:closure-compiler适合在 Java 构建管线中直接引入。3. Web 端工具社区还提供了基于 Web 的 UI 与 REST APIjscompressor可以在浏览器中直接体验编译器的能力。4. 基本用法压缩一个 JS 文件google-closure-compiler --js file.js --js_output_file file.out.js最大化收益的做法是把所有源码一次性交给编译器见下文编译多个脚本这样才能使用ADVANCED优化google-closure-compiler -O ADVANCED rollup.js --js_output_file rollup.min.js查看全部选项google-closure-compiler --help5. 核心命令行参数一览以下参数表来自 README且在 src/com/google/javascript/jscomp/CommandLineRunner.java 的Flags内部类中有逐项对应的Option声明与默认值可作为权威参考--flag说明--compilation_level (-O)指定编译级别。可选值BUNDLE、WHITESPACE_ONLY、SIMPLE默认、ADVANCED--env决定加载哪一组内置 externs。可选值BROWSER、CUSTOM。默认BROWSER--externs包含 JavaScript externs 的文件可多次指定--jsJavaScript 文件名可多次指定。该标志名可选因为参数默认按文件解释。也支持 minimatch 风格 glob 模式例如--js**.js --js!**_test.js递归包含所有不以_test.js结尾的 js 文件--js_output_file主输出文件名。若未指定输出写到 stdout--language_in设置输入源码应遵循的语言规范。可选值ECMASCRIPT3、ECMASCRIPT5、ECMASCRIPT5_STRICT、ECMASCRIPT_2015、ECMASCRIPT_2016、ECMASCRIPT_2017、ECMASCRIPT_2018、ECMASCRIPT_2019、STABLE、ECMASCRIPT_NEXT--language_out设置输出应遵循的语言规范。可选值ECMASCRIPT3、ECMASCRIPT5、ECMASCRIPT5_STRICT、ECMASCRIPT_2015、ECMASCRIPT_2016、ECMASCRIPT_2017、ECMASCRIPT_2018、ECMASCRIPT_2019、STABLE--warning_level (-W)指定警告级别。可选值QUIET、DEFAULT、VERBOSE补充源码细节--language_in的默认值是STABLE见CommandLineRunner.java中private String languageIn STABLE;--warning_level的默认值是DEFAULTprivate WarningLevel warningLevel WarningLevel.DEFAULT;--env默认值为BROWSER。--js标志使用专门的JsOptionHandler处理器支持 glob 展开与多文件收集。6. NodeJS API 编程式调用也可以在 JS 程序中导入google-closure-compiler访问编译器import closureCompiler from google-closure-compiler; const { compiler } closureCompiler; new compiler({ js: file-one.js, compilation_level: ADVANCED });该包在大多数情况下提供对原生 Graal 二进制的编程式访问否则回退到 Java 版本。四、编译多个脚本Compiling Multiple Scripts如果有多个脚本应当用一条编译命令把它们全部编译在一起google-closure-compiler in1.js in2.js in3.js --js_output_file out.js也可以使用 minimatch 风格 glob# 递归包含子目录中的所有 js 文件 google-closure-compiler src/**.js --js_output_file out.js # 递归包含所有 js 文件排除测试文件 # 使用单引号防止 bash 对 ! 做历史展开 google-closure-compiler src/**.js !**_test.js --js_output_file out.js编译器会按命令行传入的顺序拼接这些文件。当你使用 glob 或大量文件时脚本之间的依赖管理可能成为问题。此时应使用随附的 lib/base.js 提供的依赖强制函数即goog.module与goog.requireClosure Compiler 会自动重新排序输入。这一自动排序能力在源码中由模块依赖收集与排序相关 pass 实现例如 src/com/google/javascript/jscomp/FindModuleDependencies.java 与 src/com/google/javascript/jscomp/JSChunkGraph.java。在测试侧test/com/google/javascript/jscomp/CommandLineRunnerTest.java 中有大量针对多输入文件与模块排序的端到端用例。五、Closure JavaScript Librarylib/base.jsClosure Compiler 随发布附带 lib/base.js它提供一组 JavaScript 函数与变量作为启用 Closure Compiler 某些特性的原语。该文件是 Closure Library 中同名base.js的衍生版本后者即将被弃用见 lib/base.js 文件头注释中对 closure-library issue 1214 的引用由 Closure Compiler 继续向前支持可能接收新特性并只保留其公认的核心部分。从源码看lib/base.js 定义了几个关键全局原语COMPILED一个define {boolean}标记默认false由编译器在编译时覆盖为truegoog.global对全局对象的引用兼容this与self两种获取方式goog.exportPath_按命名空间路径构建对象结构a.b.c→a{};a.b{};a.b.c{};供goog.provide与goog.exportSymbol使用goog.global.CLOSURE_DEFINES允许在未编译或编译模式下覆盖 define 值例如var CLOSURE_DEFINES {goog.DEBUG: false};——编译器只识别在变量声明处定义的这个值。值得强调的是README 明确指出不使用goog.module()/goog.require()声明和使用模块的 JS 得不到良好支持这一约定贯穿整个编译器设计从 src/com/google/javascript/jscomp/ProcessClosureProvidesAndRequires.java 对goog.provide/goog.require的替换与移除到 src/com/google/javascript/jscomp/Es6RewriteModules.java 将 ES6 模块语法统一重写为goog.module体系再到 src/com/google/javascript/jscomp/CheckClosureImports.java 的导入合法性校验全部围绕这套模块原语展开。六、编译级别CompilationLevel的源码级解读README 的参数表列出了四种编译级别而 src/com/google/javascript/jscomp/CompilationLevel.java 给出了每种级别精确到每个优化开关的实现理解这张表有助于预判不同级别的行为差异枚举值命令行写法定位BUNDLEBUNDLE仅对文件排序并拼接输出WHITESPACE_ONLYWHITESPACE_ONLY或WHITESPACE仅移除注释与多余空白SIMPLE_OPTIMIZATIONSSIMPLE默认级别执行无需外部代码配合的转换函数参数可重命名函数名本身不重命名ADVANCED_OPTIMIZATIONSADVANCED激进压缩重命名函数名与变量、删除永不调用的代码等TRANSPILE_ONLYTRANSPILE_ONLY只转译到目标--language_out并注入 polyfill不做任何优化从CompilationLevel.fromString()的实现看命令行中的SIMPLE/ADVANCED/WHITESPACE会被分别归一化为SIMPLE_OPTIMIZATIONS/ADVANCED_OPTIMIZATIONS/WHITESPACE_ONLY。WHITESPACE_ONLY对应applyBasicCompilationOptions()直接调用options.skipAllCompilerPasses()跳过全部编译器 pass只保留去除注释与空白的效果。SIMPLE默认对应applySafeCompilationOptions()被设计为安全选项即使没有导出任何符号、没有使用任何编码约定也不会破坏 JS。其关键开关包括重命名策略VariableRenamingPolicy.LOCAL仅局部变量重命名PropertyRenamingPolicy.OFF属性不重命名变量内联Reach.LOCAL_ONLY、函数内联Reach.LOCAL_ONLY仅限局部开启常量折叠、变量声明合并、死赋值消除、对象字面量合并、标签重命名、隐藏副作用保护等关闭ReplaceIdGeneratorsid 生成器替换在 SIMPLE 模式下不运行。ADVANCED对应applyFullCompilationOptions()要求用户正确导出所有符号才有效。它在全部安全优化基础上叠加了大量激进优化开启符号与类型检查setCheckSymbols(true)、setCheckTypes(true)重命名策略升级为VariableRenamingPolicy.ALLPropertyRenamingPolicy.ALL_UNQUOTED——所有变量与不带引号的属性都会重命名这正是 README 反复警告属性访问必须一致、全局变量与属性使用不可隐藏的根本原因移除 Closure 断言setRemoveClosureAsserts(true)、移除抽象方法、移除未使用的原型属性与类属性属性折叠至PropertyCollapseLevel.ALL、匿名函数折叠、智能名称移除、常量变量内联函数与变量内联升至Reach.ALL全局级别开启跨 chunk 代码移动与方法移动、方法去虚拟化devirtualize、调用优化optimize calls。此外setTypeBasedOptimizationOptions()仅在ADVANCED_OPTIMIZATIONS下生效额外启用基于类型信息的属性消歧disambiguate、属性混淆ambiguate、属性内联与类型驱动的局部优化——这些正是类型注解在 ADVANCED 模式下价值巨大的原因。在测试侧test/com/google/javascript/jscomp/CommandLineRunnerTest.java 直观展示了级别差异testAdvancedModeRemovesUnusedParams用--compilation_levelADVANCED_OPTIMIZATIONS编译window.f function(a) {};输出为window.a function() {};未使用参数a被重命名testCheckGlobalThisOnWithAdvancedMode则验证 ADVANCED 模式下function f() { this.a 3; }会触发GLOBAL_THIS检查——因为applyFullCompilationOptions()将GLOBAL_THIS从 SIMPLE 模式的OFF提升为WARNING。七、externs 机制与运行环境README 强调必须使用 externs 文件告知编译器哪些变量或属性不得删除或重命名默认 externs 声明了标准 JS 与 DOM 全局 API。这一机制在源码中的实现要点如下src/com/google/javascript/jscomp/DefaultExterns.java 维护内置 externs 清单核心语言 externses3.js、es5.js、es6.js、es6_typed_array.js、es6_collections.js在任何环境下都会加载当--envBROWSER时再按依赖顺序加载浏览器 externsintl.js、w3c_dom1.js、gecko_dom.js、ie_dom.js、webkit_dom.js、w3c_css.js、webstorage.js、whatwg_console.js等。当--envCUSTOM时只包含上述核心语言 externs不加载任何浏览器 API 声明。实际的 externs 文件位于 externs 目录浏览器相关在 externs/browserNodeJS 相关 externs 在 contrib/nodejs。README 的依赖清单一节说明这些 NodeJS externs 源自 dcodeIO 的 node.js-closure-compiler-externs并做了大量改动以兼容 NpmCommandLineRunner。使用--externs标志可传入自定义 externs 文件可多次指定典型场景是编译 Web 应用时补充项目私有全局对象或让外部代码访问编译产物中的某些 API。从CommandLineRunner.java可以看到--env标志直接映射到CompilerOptions.Environment.BROWSER/CUSTOMgetBuiltinExterns()负责按环境取回对应的内置 externs 集。适用前提提醒默认环境是浏览器窗口WebWorker 仅部分支持NodeJS 相关 externs 不受积极维护见 contrib/nodejs。八、从源码构建编译器Building the CompilerREADME 提供了完整的自构建流程适合需要从源码定制或研究编译器实现的场景。前置条件前置依赖说明Java 21 或更高版本用于编译编译器自身的 Java 源码NodeJS用于生成 Java 编译所需的资源Git供 Bazel 下载依赖Bazelisk用于构建编译器的各个 target安装 BazeliskBazelisk 是 Bazel 的包装器会根据仓库动态加载合适版本的 Bazel从而避免因使用错误 Bazel 版本导致的伪错误也便于在不同项目间切换 Bazel 版本。可通过各主流包管理器安装。从终端构建$ bazelisk build //:compiler_uberjar_deploy.jar # 或构建所有内容 $ bazelisk build //:all从终端测试$ bazelisk test //:all仓库有数百个独立测试 target全量运行需要几分钟开发期间通常只跑感兴趣的精确测试bazelisk test //:$path_to_test_file测试代码位于 test/com/google/javascript/jscomp含 400 个 Java 测试文件与 test/com/google/javascript/rhino另有大量.jsdata转译测试数据。从 IDE 构建参考 Bazel 官方 IDE 集成文档。运行构建产物构建完成后JAR 位于bazel-bin/目录可通过java -jar直接运行或使用仓库 package.json 提供的脚本其compile脚本内容为java -jar bazel-bin/compiler_uberjar_deploy.jar# java -jar bazel-bin/compiler_uberjar_deploy.jar [...args] yarn compile [...args]在 Eclipse 中运行打开 src/com/google/javascript/jscomp/CommandLineRunner.java或创建该类的自定义扩展版本在 Eclipse 中运行该类交互模式用法同前文但需注意 Eclipse 控制台传递CtrlDEnd of Transmission的已知问题。九、获取帮助与参与贡献获取帮助官方建议的求助渠道依次为Closure Compiler Discuss 讨论组、Stack Overflowgoogle-closure-compiler标签、官方 FAQ。报告 bug 前务必先确认这真的是 bug而不是 Closure Compiler 的工作方式——尤其对ADVANCED_OPTIMIZATIONS而言——可依次核对官方文档、FAQ、Stack Overflow、讨论组以及compiler assumptions编译器假设清单再检索是否已有已知 issue提交 issue 时附上足够细节与最小复现代码。贡献规范所有贡献者必须签署贡献者许可协议CLA提交补丁前先在讨论组确认补丁类型会被接受Fork 仓库、按编码约定修改、提交 Pull Request由项目开发者 review 后合入无论以何种方式贡献都请遵守 code_of_conduct.md 中的行为准则。十、许可证与依赖清单Closure Compiler 本身基于 Apache License 2.0 发布见 LICENSEREADME 的 Dependency Licenses 一节列出了全部关键第三方依赖及其本地改动情况对合规审计很有参考价值Rhino1.5R3重度修改JavaScript 解析树数据结构来源位于 src/com/google/javascript/rhino包被重新命名空间删除了与解析树无关的代码并新增 JSDoc 解析器与静态类型系统args4j2.33命令行参数解析Guava31.0.1Google 核心 Java 库JSR 3053.0.1软件缺陷检测注解JUnit4.13Java 单元测试框架Protocol Buffers3.0.2结构化数据编码RE2/J1.3线性时间正则匹配Truth1.1Java 单元测试断言框架Ant1.10.11Java 构建工具GSON2.9.1JSON 与 Java 对象互转Node.js Closure Compiler ExternsNodeJS API 类型契约位于 contrib/nodejs为兼容 NpmCommandLineRunner 做了大量改动。结语综合来看Closure Compiler 的定位非常明确它不是又一款压缩器而是一个要求你把整个应用、全部使用方式都交给它的全量优化编译器。README 中那些看似劝退的Important Caveats恰恰是它在ADVANCED模式下能实现极致压缩的前提——统一属性访问、使用goog.module/goog.require、合理编写 externs、正确导出符号。理解了 CompilationLevel.java 中各模式的开关差异以及 CommandLineRunner.java 中每个参数的默认值与语义你就能在自己的项目中做出正确取舍简单压缩交给其他工具而需要类型检查、死代码消除、属性重命名与代码拆分的大型应用则值得按 Closure Compiler 的约束来编写代码并从ADVANCED模式中拿到最大收益。赞分享编译器开发工具前端【免费下载链接】closure-compilerA JavaScript checker and optimizer.项目地址https://gitcode.com/gh_mirrors/clo/closure-compiler点击查看免费下载相关推荐Agent Governance Toolkit安全博客最新AI代理安全趋势与技巧Agent Governance Toolkit安全博客最新AI代理安全趋势与技巧 Agent Governance Toolkit是一款全面的AI代理治理工人工智能AI AgentAI 安全治理策略引擎认证鉴权Agent 沙箱可观测性从卡顿到丝滑GSE-Advanced-Macro-Compiler About页面性能深度优化指南从卡顿到丝滑GSE Advanced Macro Compiler About页面性能深度优化指南 你是否曾在使用GSE Advanced Macro Com开发工具Element Plus Checkbox 完全指南从基础用法到 API 深度解析Element Plus Checkbox 完全指南从基础用法到 API 深度解析 Element Plus 的 Checkbox复选框组件用于一组多选选前端UI组件上一篇Hydra 0.11 升级到 1.0为配置文件添加 package 指令完整指南下一篇Kedro 项目模板 README 全解从安装依赖、运行 Pipeline 到测试、Notebook 与打包创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/14 8:07:37
context-mode:用SQLite+FTS5+BM25实现AI上下文感知的工程化落地
2026/10/14 8:07:37
AnyPS5方案:从M.2扩容到散热维护的玩机优化指南
2026/10/14 8:02:36
计算机网络慕课第四章网络层测试题答案解析与易错点详解
2026/10/14 9:14:09
基于网络唤醒与状态模型的跨平台PS5远程控制系统搭建实录
2026/10/14 9:14:09
AI Agent技能库设计实战:从技能编排到工程落地
2026/10/14 9:14:09
信创工程师认证备考指南与实战经验分享
2026/10/14 9:14:09
最长对称子串问题解析与中心扩展法实现
2026/10/14 9:14:09
Tesseract 4.1.0 Windows 绿色版 OCR 实战:从解压到 Python 批量识别与避坑
2026/10/14 9:03:40
SwiftUI智能体框架架构:Agent执行引擎与Skill技能插槽设计
2026/10/14 0:02:01
Oracle 19c Windows客户端安装配置与连接排错指南
2026/10/14 0:02:01
React Native截图优化:解决Android兼容性问题
2026/10/14 0:02:01
金属锈蚀速率计算模型与防护方案优化实践
2026/10/13 12:25:09
流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南
2026/10/13 18:15:04
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别
2026/10/13 8:14:22
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容
2026/10/12 19:53:23
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/11 21:41:11
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/11 23:43:10
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)