
开发工具构建工具【免费下载链接】buckA fast build system that encourages the creation of small, reusable modules over a variety of platforms and languages.项目地址https://gitcode.com/gh_mirrors/bu/buck点击查看免费下载本篇技术指南围绕 Buck 项目docs/目录下的官方文档工程完整讲解其编辑 → 本地预览 → 测试校验 → 发布 → Javadoc 集成的全链路工作流。读者将掌握基于 Closure Templates 编写文档源文件、用 plovr soyweb 实现实时刷新预览、按固定模板新建一篇文档文章、通过publish.sh将文档发布到 GitHub Pagesgh-pages分支以及将 Javadoc 一并纳入发布产物的具体操作方法。Buck 文档工程概览Closure Templates plovr 的技术底座docs/目录是 Buck 官方 HTML 文档的源文件仓库同时包含发布这些文档所需的全部脚本。文档内容不是直接以 HTML 书写而是采用Google Closure Templates.soy文件编写再经工具链渲染为 HTML。目录按文档主题分子目录组织每个.soy文件最终渲染为同名.htmldocs/about/、docs/concept/概念类文章如overview.soy、build_file.soydocs/command/buck各子命令文档build、test、query等docs/rule/各类构建规则参考android_binary.soy、java_library.soy等docs/function/、docs/setup/、docs/skylark/、docs/static/等分别承载函数参考、安装指南、Skylark API 与静态资源。支撑这套工作流的关键组件如下组件文件仓库相对路径作用页面骨架模板docs/__common.soy定义buck.page等复用模板输出完整 HTML 骨架全局变量docs/globals.json注入ROOT、FB_APP_ID等 soyweb 全局参数渲染引擎docs/plovr-81ed862.jar本地打包的 plovrClosure Templates 构建工具提供soyweb本地服务器本地预览脚本docs/soyweb-local.sh及 Windows 版 docs/soyweb-local.ps1启动端口 9811 的文档开发服务器生产预览脚本docs/soyweb-prod.sh以端口 9814 启动服务器供发布时渲染页面HTML 静态化脚本docs/soy2html.sh 与 docs/soy2html.py从 soyweb 抓取每个.soy的渲染结果产出静态 HTML发布脚本docs/publish.sh构建文档并推送到gh-pages分支构建与校验定义docs/BUCK声明别名生成、语法检查等自动化任务buck.page所有文档页共用的页面模板在 docs/__common.soy 中{template .page}定义了每个文档页的渲染入口。它接收以下参数title必填页面标题会被包装为 Buck: {title} 并写入titlecontent必填页面正文 HTMLnavid当前页面在导航中的标识首页传home其余页面传对应的文章 idsubtitle可选标题下的副标题prettify可选是否启用 google-code-prettify 代码高亮description写入og:descriptionmeta 标签的描述文本。该模板在header部分生成完整的 HTML 骨架favicon、static/buck.css与static/search.css样式、Open Graph meta、Algolia 文档搜索框与 Google Analytics 埋点在footer部分调用table_of_contents.main渲染侧边导航。这意味着你编写文章时只需关注正文内容页面框架由模板统一承担。globals.json则为模板提供全局变量其中最关键的是ROOT。它作为每个内部链接的前缀注释要求值必须以/结尾默认/若要将文档托管到个人公共目录如/~username/buck/可修改该值。其余变量包括FB_APP_ID、GITHUB_URL、GUAVA_BASE_URL、JDK_BASE_URL与GEN_DIR。本地编辑文档一条命令启动实时预览服务器编写文档采用典型的编辑 / 刷新工作流修改.soy源文件然后在浏览器中刷新对应页面即可看到效果。在 Buck 仓库根目录执行./docs/soyweb-local.sh然后在浏览器中访问http://localhost:9811/。该编辑/刷新循环由plovr支撑——它是 Closure Templates 的构建工具其soyweb子命令会在本地目录上提供文档渲染服务。脚本内部发生了什么查看 docs/soyweb-local.sh 可以发现它并非单纯启动一个静态服务器cd $(git rev-parse --show-toplevel)/docs || exit buck run //docs:generate_buckconfig_aliases exec java -jar plovr-81ed862.jar soyweb --dir . --globals globals.json $先通过buck run //docs:generate_buckconfig_aliases运行别名生成任务对应 docs/generate_buckconfig_aliases.py用于同步.buckconfig相关的文档别名再以docs/为服务目录、globals.json为全局变量文件启动 plovr 的 soyweb。注意cd命令会自动切换到仓库顶层再进入docs/因此该脚本必须在 Buck 仓库根目录下运行。脚本末尾的$支持透传额外参数给 soyweb。Windows 用户可运行对应的 docs/soyweb-local.ps1其等效命令为buck run //docs:generate_buckconfig_aliases java -jar docs\plovr-81ed862.jar soyweb --dir docs --globals docs\globals.json生产预览与发布用服务器端口 9814发布流程还需要一个后台运行的 soyweb 实例由 docs/soyweb-prod.sh 提供。与开发版相比它额外执行了ant clean清理可能干扰构建的残留文件然后以--port 9814启动服务器ant clean buck run //docs:generate_buckconfig_aliases exec java -jar plovr-81ed862.jar soyweb --port 9814 --dir . --globals globals.json端口约定9811 用于本地开发预览9814 用于发布时渲染。soy2html.py正是从http://localhost:9814/抓取渲染结果的。新建一篇文档文章的完整步骤新建文章非常简单在docs/对应主题子目录下创建.soy文件并用以下模板播种内容{namespace buck.ADD_YOUR_PAGE_NAME} /***/ {template .soyweb} {call buck.page} {param title: ADD_YOUR_TITLE /} {param content} ADD_YOUR_CONTENT_HERE {/param} {/call} {/template}只需替换三个全大写占位符即可ADD_YOUR_PAGE_NAME该页的命名空间后缀需保持全局唯一ADD_YOUR_TITLE页面标题ADD_YOUR_CONTENT_HERE正文 HTML 内容。参考一个真实文章实例仓库中的 docs/about/overview.soy 展示了更完整的写法。除了必填的title和content还推荐提供navid与description{namespace buck.overview} /***/ {template .soyweb} {call buck.page} {param title: Key concepts /} {param navid: about_overview /} {param description} An overview of some fundamental concepts in Buck. {/param} {param content} pBuck has a number of fundamental concepts:/p ... {/param} {/call} {/template}navid用于让页面在侧边导航由table_of_contents.main渲染中高亮当前所在章节description会进入og:descriptionmeta 标签影响页面被分享时的摘要展示。首页 docs/index.soy 则使用{param navid: home /}页面模板会据此走专门的 landing-page 渲染分支。文章中的内部链接写法由于页面由模板渲染正文内部不应写死绝对路径而应复用__common.soy中提供的链接辅助模板例如{call buck.ruleLink}{param name: java_library /}{/call}渲染规则链接、{call buck.concept_link}...{/call}渲染概念链接、{call buck.cmd_link}{param name: build /}{/call}渲染命令链接。这些辅助模板统一使用ROOT前缀拼接rule/{name}.html、concept/{page}.html、command/{name}.html等地址保证部署在任意 ROOT 下链接都有效。语法校验别忘跑测试新建或修改.soy后仓库提供了自动化的语法检查。在 docs/BUCK 中定义了soy_docs_syntax这个python_test它会用 docs/soy_syntax_check.py 校验docs/下所有*.soy文件资源集合通过glob([**/*.soy, *.jar])收集。因此可以通过 Buck 测试命令验证文档源文件的正确性。发布文档到 GitHub Pages文档的公开托管走GitHub Pages发布目标是仓库的gh-pages分支。整个过程由 docs/publish.sh 驱动。发布命令# 同时在后台构建文档以 TCP 9814 端口提供渲染服务并推送到 GitHub Pages cd docs ./publish.sh --start-soyweb该脚本依赖 GitHub 交互因此运行前需要配置好 GitHub 凭据例如按照官方指南生成 SSH key 并添加到 ssh-agent。publish.sh 支持的参数参数作用--start-soyweb发布开始时后台启动soyweb-prod.sh脚本结束后自动关闭--keep-files发布失败排查时保留临时文件默认在退出时清理临时目录--help显示用法说明脚本执行流程详解结合 docs/publish.sh 源码一次发布实际经历以下步骤预检查先运行buck run //docs:generate_buckconfig_aliases生成最新别名随后执行git diff --quiet若仓库存在未提交改动则拒绝发布Git repository is not clean; refusing to publish保证发布内容与提交状态一致准备临时目录通过mktemp -d创建STATIC_FILES_DIR用于存放 gh-pages 的干净检出可选启动渲染服务器--start-soyweb时后台启动docs/soyweb-prod.sh并轮询确认进程存活2 秒超时判定获取 gh-pages 基址脚本通过 HTTPS 凭据克隆仓库到临时目录执行git checkout --orphan gh-pages创建孤儿分支再用git rm -rf .清空内容首次创建 gh-pages 分支时同样适用生成静态文档调用./docs/soy2html.sh $STATIC_FILES_DIR渲染全部 HTML详见下一节写入 CNAME 并提交将buck.build写入CNAME文件设置提交者为buck-botGIT_USER以Updated HTML documentation.为提交信息提交强制推送执行git push origin gh-pages --force覆盖线上文档失败兜底脚本自嘲并非无懈可击若推送失败会打印警告并建议前往仓库分支管理页面重试。整个流程通过trap保证退出时清理临时文件并关闭 soyweb 后台进程。团队协作约定原文档特别强调一条理想实践对 Buck 代码的改动应在同一提交中同步更新相关文档。这样代码与文档的变更关系清晰可追溯也避免文档滞后于实现。Javadoc本地生成与随文档发布Buck 网站上的 Javadoc 会在每次发布文档时同步更新由soy2html.sh自动完成。本地生成 Javadoc 的方式如下在 Buck 仓库根目录执行ant javadoc-with-android产物位于ant-out/javadoc-with-android/index.html查看方式有两种直接用浏览器打开ant-out/javadoc-with-android/index.html复制到docs目录以复用本地文档服务器cp -r ant-out/javadoc-with-android/ docs/javadoc/随后访问http://localhost:9811/javadoc即可在文档站点内浏览 Javadoc。发布时 Javadoc 如何被纳入在 docs/soy2html.sh 中Javadoc 集成是发布流程的一环# 生成 javadoc 并纳入输出目录 ant javadoc-with-android mkdir -p ${OUTPUT_DIR}/javadoc/ cp -r ant-out/javadoc-with-android/* ${OUTPUT_DIR}/javadoc/因此每次publish.sh发布时Javadoc 都会被重新构建并一同推送到线上站点。soy2html 静态化.soy 如何变成 .html发布流程的核心渲染步骤由 docs/soy2html.py 完成。它的工作逻辑值得理解等待服务器就绪pollForServerReady()最多等待 5 秒每秒探测一次直到http://localhost:9814/可访问遍历渲染.soy递归遍历docs/下所有不以__开头的.soy文件__前缀表示共享模板而非独立页面构造对应的.html路径然后用curl --fail从 soyweb 服务器抓取渲染结果写入输出目录复制静态资源.css、.jpg、.js、.png、.gif、.html、.md、.svg、.ttf、.txt以及CNAME、.nojekyll等文件原样复制到输出目录。注意soy2html.sh在调用 Python 脚本前会清空代理环境变量HTTP_PROXY、HTTPS_PROXY等因为脚本内部依赖curl直连本地服务器。构建与校验支撑docs/BUCK 中的自动化任务docs/作为 Buck 仓库的一部分其辅助工具以 Buck 规则声明在 docs/BUCK 中实现了文档工程的自举目标类型用途generate_buckconfig_aliasespython_binary从 docs/generate_buckconfig_aliases.py 构建别名生成工具被三个 shell 脚本通过buck run调用buckconfig_aliases_cleanpython_test用 docs/buckconfig_aliases_clean.py 校验__buckconfig_common.soy与files-and-dirs/buckconfig.soy中的别名与生成结果一致alphabetize_buckconfigpython_binary基于 docs/alphabetize_buckconfig.py按字母序整理 buckconfig 文档soy_docs_syntaxpython_test校验全部.soy文件语法这些任务说明文档维护本身也遵循 Buck 的小模块、可复用、可测试理念生成、格式化、校验都被建模为可复用的构建目标。适用前提与注意事项必须在 Buck 仓库根目录运行soyweb-local.sh、publish.sh、soy2html.sh均依赖git rev-parse --show-toplevel定位仓库根再切换到docs/执行依赖本地 Buck 与 Java 环境启动预览前会先执行buck run //docs:generate_buckconfig_aliases随后用java -jar启动 plovr因此需要已安装并配置好 Buck 和可用的 JDK端口占用开发预览固定使用 9811发布渲染固定使用 9814若端口被占用需先释放或调整脚本参数发布有洁癖检查publish.sh会拒绝在存在未提交改动时发布请先提交代码与文档的变更发布涉及 GitHub 凭据脚本通过 HTTPS 凭据克隆仓库并强制推送gh-pages请确保凭据已配置且具备仓库写入权限。至此从一次简单的./docs/soyweb-local.sh本地预览到新建文章、通过buck run/ant校验构建再到./publish.sh --start-soyweb一键上线Buck 文档工程的完整闭环已经打通。无论是为某个新构建规则补文档还是修正既有命令参考这套工作流都能保证文档与代码始终在同一节奏下演进。赞分享开发工具构建工具【免费下载链接】buckA fast build system that encourages the creation of small, reusable modules over a variety of platforms and languages.项目地址https://gitcode.com/gh_mirrors/bu/buck点击查看免费下载相关推荐CMake文档本地化预览部署GitHub Pages多语言文档实时预览CMake文档本地化预览部署GitHub Pages多语言文档实时预览 概述 你是否在为CMake文档的本地化项目寻找高效的预览部署方案传统的本地化流程往往文档使用 TanStack Start 在本地搭建文档站TanStack Form 文档的本地编辑与实时预览工作流使用 TanStack Start 在本地搭建文档站TanStack Form 文档的本地编辑与实时预览工作流 TanStack Form 的全部官方文档都托前端UI组件OpenMed 贡献指南与发布工作流从本地开发到 PyPI 与 GitHub Pages 的完整实战OpenMed 贡献指南与发布工作流从本地开发到 PyPI 与 GitHub Pages 的完整实战 OpenMed 是一个本地优先local first人工智能NLP医疗健康数据脱敏本地部署大模型AI 应用MCP 服务联邦学习上一篇clarity-upscaler的备份策略模型与配置数据的安全保障下一篇RustOwl技术债务管理平衡功能与质量创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考