Wing 仓库文档与示例贡献指南:从本地文档站点到 Examples 示例库的完整工作流
编程语言编译器云原生语言运行时【免费下载链接】wingA programming language for the cloud ☁️ A unified programming model, combining infrastructure and runtime code into one language ⚡项目地址https://gitcode.com/gh_mirrors/wi/wing点击查看免费下载本篇指南面向 Wing 项目的贡献者与文档作者系统讲解如何为 Wing 开源仓库的官方文档docs 目录提交更新、在本地启动 Docusaurus 文档网站进行预览以及如何为 Examples 示例库 新增一个由 Markdown frontmatter 驱动的社区示例。读完本文你将掌握pnpm docs本地预览命令的底层原理、示例文件 frontmatter 全字段的含义与取值、如何在代码块中嵌入在线 Playground以及示例代码如何被自动抽取为测试用例的完整链路。一、文档仓库结构概览Wing 的全部官方文档都存放在仓库根目录下的docs目录中其内部又细分为若干子目录分别承载不同类型的内容docs/by-example/按主题组织的短小语言示例如 Hello world、HTTP Server、Json、Structs 等每个文件就是一个可独立阅读的示例页面docs/api/标准库 API 参考cloud、std、fs、http、math、util 等模块的 Markdown 与.yml定义文件docs/docs/概念性文档预飞行与飞行阶段 preflight/inflight、平台、模拟器、工具等docs/examples/社区模式与教程合集即本文重点讲解的 Examples 示例库docs/contributing/面向贡献者的文档本文即位于docs/contributing/01-start-here/08-docs.md。从仓库根目录的 package.json 可以看到docs脚本被直接挂载为根级 npm/pnpm 命令docs: ./scripts/docsite.sh也就是说文档网站的一切操作都可以从仓库根目录发起。二、如何更新文档直接提交 Pull Request官方文档的主体是纯 Markdown 文件。要提出文档更新不需要任何额外的构建流程直接对相应的 Markdown 文件发起 Pull Request 即可定位到目标文档对应的.md文件例如想修改示例库说明就编辑docs/examples/下的文件在分支上完成修改并提交向 Wing 仓库提交 Pull Request由维护者评审合并。文档页面顶部的 frontmatter如title、id、keywords、custom_edit_url等字段同时承担了 Docusaurus 侧边栏、SEO 关键词与在 GitHub 编辑此页链接的职责。以 docs/by-example/02-hello-world.md 为例其 frontmatter 就声明了slug: /hello-world、sidebar_label: Hello world与custom_edit_url这些字段共同决定了页面在文档站点中的路由与导航位置。三、在本地预览文档网站pnpm docs的原理与完整流程在提交 PR 之前贡献者通常希望先在本地看到文档的真实渲染效果。仓库提供了开箱即用的一行命令pnpm docs该命令的实际行为由 scripts/docsite.sh 实现其核心逻辑如下克隆/更新 docsite 框架将 Docusaurus 站点框架仓库winglang/docsite克隆到~/.winglang-docsite目录若目录已存在则执行git restore与git pull保持同步符号链接本地文档将仓库内的docs目录通过软链接ln -s挂载到 docsite 中的./docs位置保证文档站点展示的是你本地工作区的最新内容生成版本配置向 docsite 写入[current]版本的versions.json使站点以当前版本模式运行安装依赖并启动执行npm i安装 Docusaurus 依赖最后npm run start启动开发服务器并自动打开浏览器。从脚本实现scripts/docsite.sh可以看出几个实用细节克隆时使用了--depth1浅克隆以加快速度如果克隆失败脚本会自动清理~/.winglang-docsite并给出明确的错误提示每次运行时都会先重置 docsite 目录再重新建立软链接因此不会残留旧的本地内容。依赖项方面docs/目录自身是一个独立的winglang/docs包其 package.json 中定义了compile脚本tsx src/generate_examples_files.ts用于从文档示例代码块生成测试文件——这一点将在后文详细展开。四、Examples 示例库是什么docs/examples/是 Wing 的社区模式与教程集合旨在通过真实可运行的用例帮助开发者理解 Wing。当前仓库中已有以下示例文件basic-auth-api.md基于基本认证的 API 示例deploy-a-static-website.md静态网站部署示例introduction-to-wing.md与introduction-to-preflight-and-inflight.md交互式入门教程type为interactive tutorialprocessing-messages-in-a-queue.md队列消息处理模式quick-share.md综合演示应用 QuickShareredis.md结合 Redis winglib 的缓存写入模式。这些示例完全由Markdown 文件 frontmatter 元数据驱动——不需要编写任何站点代码新增一个示例本质上就是新增一个带有规范 frontmatter 的.md文件。五、新增一个示例的三步流程在docs/examples/目录下新增示例非常简单只需三步在 docs/examples 目录 下新建一个 Markdown 文件可以参考已有的processing-messages-in-a-queue.md在文件的 frontmatter 中填写示例的元信息在正文中用 Markdown 配以代码片段说明示例的用法与模式。5.1 frontmatter 字段详解以仓库中真实的 docs/examples/redis.md 为例其 frontmatter 完整呈现了示例文件支持的字段--- title: Using Redis with Wing subtitle: Example application that uses Redis to set values in a Redis cache type: - pattern platform: - awscdk - sim language: - wing githubURL: https://github.com/winglang/examples.git repoDirectory: examples/redis coverImage: /img/examples/redis.png coverImageInPage: true resources: - label: Redis winglib href: https://github.com/winglang/winglibs/tree/main/redis - label: Explore Wing functions href: /docs/api/standard-library/cloud/function authors: - name: David Boyne role: Developer Advocate, Wing twitter: https://twitter.com/boyney123 github: https://github.com/boyney123 cloudResources: - function ---各字段的含义与取值约定如下字段含义典型取值title示例页面上展示的标题任意字符串subtitle示例页面上展示的副标题/一句话摘要任意字符串type示例类型用于站点分类与筛选pattern模式或interactive tutorial交互式教程platform该示例支持编译运行的 Wing 平台awscdk、tf-aws、sim的组合language示例使用的语言wing或typescriptgithubURL示例完整源码所在的仓库地址如https://github.com/winglang/examples.gitrepoDirectory源码在仓库中的目录位置如examples/rediscoverImage示例卡片上渲染的封面图路径站点内图片路径如/img/examples/redis.pngcoverImageInPage是否在示例页面正文中展示封面图true/falseresources附加的学习资源链接列表每一项包含label与href指向 winglib、API 文档等authors作者信息可包含name、role、twitter、github对象数组cloudResources示例用到的云资源列表可选用于站点按资源过滤如function、queue、bucket、api不同字段的组合还能实现更精细的站点行为例如 docs/examples/deploy-a-static-website.md 额外使用了coverImageOptions按平台awscdk/tf-aws指定不同的封面图交互式教程类示例如 docs/examples/introduction-to-wing.md则通过url字段指向站外的在线课程地址。5.2 编写示例正文frontmatter 之后就是示例的正文内容。以 redis 示例为例正文先用文字描述模式再给出可直接运行的 Wing 代码bring redis; bring cloud; // Create a redis resource let redisInstance new redis.Redis(); new cloud.Function(inflight () { // Set value in the redis cache redisInstance.set(mykey, myvalue); });这段代码演示了一个典型的 preflight/inflight 组合redis.Redis()与cloud.Function在 preflight 阶段创建资源而函数内部的inflight闭包则在运行时通过 Redis 的 inflight API 写入缓存值。正文末尾通常还会附上本示例用到的资源清单方便读者跳转查阅对应 API例如 cloud function 标准库文档。封面图方面redis 示例引用了仓库内实际存在的配图 docs/examples/img/examples/redis.png它直观展示了 Function 模块调用 Redisset操作的架构关系5.3 在示例中嵌入在线 PlaygroundWing 提供了无需本地安装即可试玩的在线 Playground开发者可以直接在示例页面中嵌入它。做法非常简单在代码块的 fence 语言标识中追加playground关键字。例如 docs/examples/processing-messages-in-a-queue.md 中的代码块声明为js example playgroundbring cloud; bring util; bring expect; let bucket new cloud.Bucket(); let queue new cloud.Queue(); queue.setConsumer(inflight (message) { bucket.put(wing.txt, Hello, {message}); }, timeout: 30s); test Hello, world! { queue.push(world!); let found util.waitUntil(() { log(Checking if wing.txt exists); return bucket.exists(wing.txt); }); expect.equal(bucket.get(wing.txt), Hello, world!); }同样地docs/examples/basic-auth-api.md 中的js example playground代码块展示了完整的自定义BasicAuth类与 API 路由认证逻辑。playground关键字只影响页面渲染显示为可运行的 Playground 组件example关键字则与示例的自动化测试机制相关详见下一节。六、示例代码如何被自动抽取为测试Examples 示例并不只是展示用其中的代码会被自动抽取成可执行的测试用例。这一机制由 docs/src/generate_examples_files.ts 实现findExamples递归扫描文档目录下的所有.md文件extractExamples通过正则/.*? example.*?\n([\s\S]*?)/g提取所有带example关键字标记的代码块并解析代码块行内可选的 JSON 元数据如{ valid: false }generateTestsFromDocExamples将每个代码块写入tests/doc_examples/{valid|invalid}/目录下、以文件名_example_序号/main.w命名的测试工程中。在仓库中可以直接看到生成产物例如 tests/doc_examples/valid/processing-messages-in-a-queue.md_example_1/main.w其内容正是上一节队列示例代码块文件头部的注释标注了它的来源示例与元数据。也就是说只要示例代码块带example关键字它就会自动进入 Wing 的回归测试集这既保证了示例代码长期可运行也要求贡献者在写示例时必须保证代码真实可编译、可执行。该抽取逻辑由docs包的compile脚本见 docs/package.json触发与根目录的文档预览、CI 测试流程联动。七、小结贡献文档的完整工作流将以上内容串联起来一位文档贡献者的标准工作流是在 docs 下定位或新建目标.md文件若是 Examples 示例填写规范的 frontmatter参考 docs/examples/redis.md在正文中给出带playground/example关键字的代码块运行pnpm docs由 scripts/docsite.sh 拉起本地 Docusaurus 站点在浏览器中核验页面渲染、frontmatter 展示与 Playground 效果通过compile脚本docs/src/generate_examples_files.ts验证示例代码能被正确抽取为测试用例提交 Pull Request由维护者评审合并。通过这套流程文档既能在本地被真实预览示例代码又能持续经受自动化测试的检验从而保证 Wing 官方文档始终与仓库代码保持同步、可读且可信。赞分享编程语言编译器云原生语言运行时【免费下载链接】wingA programming language for the cloud ☁️ A unified programming model, combining infrastructure and runtime code into one language ⚡项目地址https://gitcode.com/gh_mirrors/wi/wing点击查看免费下载相关推荐Kubernetes Examples 仓库示例贡献指南从规范制定到高质量示例落地的完整实践Kubernetes Examples 仓库示例贡献指南从规范制定到高质量示例落地的完整实践 本文基于本仓库根目录下的 guidelines.md https示例工程symfony/process文档贡献指南完善API文档与示例symfony/process文档贡献指南完善API文档与示例 symfony/process是一个用于在PHP中执行命令行进程的库提供简单易用的API可后端Quartz.NET 仓库贡献指南从构建、测试到文档编写的完整工作流Quartz.NET 仓库贡献指南从构建、测试到文档编写的完整工作流 本指南围绕 Quartz.NET 开源仓库的 CONTRIBUTING.md https任务调度后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

佳博热敏标签打印机C# Demo实战:从连不上到打得出

佳博热敏标签打印机C# Demo实战:从连不上到打得出

简介:佳博热敏标签打印机C# Demo是一套面向C#开发者的热敏打印集成参考资源,适合需要在WinForm或桌面项目中接入佳博标签机、票据机的技术人员,技能层级覆盖入门到进阶。资源包共60个文件,约1.54MB,以cs源码、exe可执行…

2026/10/13 13:18:51 阅读更多 →
uniapp 对接融云 IM 与 RTC:单聊群聊音视频全链路落地实践

uniapp 对接融云 IM 与 RTC:单聊群聊音视频全链路落地实践

简介:这份资源面向使用 uniapp 开发即时通讯功能的移动端开发者,重点解决融云 IM 在聊天、群聊及单多人音视频通话场景下的对接难题。内容涵盖消息监听、消息撤回回执、分页获取聊天记录、会话未读数统计、免打扰时间设置、输入状态消息以及单人/多人语音…

2026/10/13 13:17:48 阅读更多 →
Java Math类深度解析:核心方法、性能优化与避坑指南

Java Math类深度解析:核心方法、性能优化与避坑指南

1. 为什么一个Math类值得单独拿出来聊刚入行那会儿,我对java.lang.Math的态度就是“知道有这么个东西,用的时候现查”。直到有一次做地图坐标纠偏,需要批量算几千个点之间的距离,我随手写了Math.sqrt(Math.pow(dx,2)Math.pow(dy,2…

2026/10/13 13:17:48 阅读更多 →

最新新闻

统一多模型API网关litellm实战:从配置到生产部署

统一多模型API网关litellm实战:从配置到生产部署

这段时间我一直在做一个内部的多模型调度平台,见得最多的一个词就是 litellm。它不是一个具体的大模型,也不是某个框架的插件,而是一个把各种模型 API 统一成一套格式的网关层工具。说白了,你只需要学会接一个服务,剩下…

2026/10/13 13:58:46 阅读更多 →
高中化学实验题满分攻略:从操作原理到误差分析的系统梳理

高中化学实验题满分攻略:从操作原理到误差分析的系统梳理

1. 为什么高中化学实验题总是“看着全会、做题全废”先抛个问题:你有没有过这种经历——课本上的实验都读了一遍,氯气的实验室制法、氨气的喷泉实验、酯化反应的装置图,看着都觉得挺简单,可一到考试,装置图给你一个洗气…

2026/10/13 13:58:46 阅读更多 →
AI写代码的质量保卫战:规范、评审与风险测试三重防线

AI写代码的质量保卫战:规范、评审与风险测试三重防线

1. 这不是又一个“AI写代码”的热闹话题,而是工程团队正在真实发生的质量保卫战最近在几个技术社区和内部分享会上,我反复听到同一个问题:“我们上了Copilot、接入了CodeWhisperer、也试了各种本地大模型,但代码质量没变好&#x…

2026/10/13 13:58:46 阅读更多 →
PyCharm安装配置避坑指南:跨平台解释器绑定与IDE工程化预检

PyCharm安装配置避坑指南:跨平台解释器绑定与IDE工程化预检

简介:本资源是一份面向Python初学者与转行开发者的PyCharm零基础安装与入门配置指南,聚焦解决“不会装、不敢用、配不熟”三大实操痛点。PDF文档结构清晰,完整覆盖Windows、macOS、Linux三大主流系统下的下载选择、分步安装、首次配置&#x…

2026/10/13 13:58:46 阅读更多 →
SpringBoot+Vue+SpringCloud微服务实战:社区帮扶平台从单体重构到分布式

SpringBoot+Vue+SpringCloud微服务实战:社区帮扶平台从单体重构到分布式

前阵子帮老家社区做了一个邻里互帮互助的小平台,一开始就打算用单体应用糊弄过去,结果需求一多彻底压不住——又要搞门户展示、又要做帮扶工单流转、还要上可视化大屏给街道看数据,再加上志愿者积分、公告通知、用户认证这些模块,…

2026/10/13 13:58:46 阅读更多 →
PCL 1.13.0 与 Qt 6 集成实战:从 CMake 到点云可视化

PCL 1.13.0 与 Qt 6 集成实战:从 CMake 到点云可视化

简介:面向需要在Qt6框架中集成PCL 1.13.0进行点云处理开发的工程师与研究者,这份资源提供了完整的PCL编译产物与配套依赖。包内含约2.4万个文件,以hpp/h头文件、lib静态库、dll动态库及cmake配置文件为主,另含3rdParty第三方依赖、…

2026/10/13 13:57:45 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →