首页/新闻资讯/正文详情

Stencil 组件属性(@Prop)与自动生成 API 文档全解析:以 Vercel 仓库 stencil-v4 构建 Fixture 中的 my-component 为例

发布时间:2026/9/23 11:52:32 来源:云帆数科 栏目:资讯中心
Stencil 组件属性(@Prop)与自动生成 API 文档全解析:以 Vercel 仓库 stencil-v4 构建 Fixture 中的 my-component 为例
CLI后端云原生【免费下载链接】vercelDevelop. Preview. Ship.项目地址https://gitcode.com/gh_mirrors/ve/vercel点击查看免费下载本文以 Vercel 开源仓库中 static-build 集成测试所使用的 Stencil v4 示例项目stencil-v4 fixture为对象围绕其组件my-component的自动生成文档 readme.md完整讲解 Stencil 组件属性的定义方式、属性表每一项的语义、自动文档的生成机制以及该组件在真实构建与部署测试中的调用方式。读完本文你将掌握 Stencil 中Prop的用法、docs-readme输出目标的配置并能读懂 Stencil 为任意组件自动生成的属性文档。一、关联文档是什么一份由编译器自动生成的组件 API 文档Stencil 在构建项目时可以同时为每一个组件生成一份 Markdown 格式的 API 文档。我们这里讨论的 my-component 组件的 readme.md 就是这样一个产物它的完整内容只有三个部分组件名标题# my-component一段Auto Generated Below注释说明其后内容由工具生成、不应手工编辑一张 Properties 属性表列出first、middle、last三个属性。这张属性表就是整份文档的核心它记录了组件对外暴露的每个公开属性的名称、对应的 HTML attribute、用途描述、TypeScript 类型以及默认值。原文表格整理如下PropertyAttributeDescriptionTypeDefaultfirstfirstThe first namestringundefinedlastlastThe last namestringundefinedmiddlemiddleThe middle namestringundefined这份文档虽然简短却是理解 Stencil 组件对外契约component contract的第一手资料。接下来我们逐层深入它描述的三个属性在源码里如何定义、渲染逻辑如何使用它们、文档又是如何被自动生成的。二、源码中的属性定义Prop装饰器与三个姓名属性文档表格中的每一项都直接来自组件类的源码。my-component的 TypeScript 实现位于 my-component.tsx其核心结构如下import { Component, Prop, h } from stencil/core; import { format } from ../../utils/utils; Component({ tag: my-component, styleUrl: my-component.css, shadow: true, }) export class MyComponent { /** The first name */ Prop() first: string; /** The middle name */ Prop() middle: string; /** The last name */ Prop() last: string; private getText(): string { return format(this.first, this.middle, this.last); } render() { return divHello, World! Im {this.getText()}/div; } }几个要点与文档一一对应Prop()定义公开属性类上以Prop()装饰的成员变量就是组件的公开属性。文档表中的Property列first、middle、last即来自这三个字段名Type列string来自字段的 TypeScript 类型标注。属性名遵循 camelCaseStencil 会自动将其映射为 kebab-case 的 HTML attribute由于这三个名字本身就是单单词所以文档表中Property与Attribute完全相同。JSDoc 注释成为 Description字段上方的/** The first name */等注释会被编译器拾取直接落入文档的Description列。这正是为什么文档表中三行的描述分别是 The first name、The middle name、The last name。Default为undefined因为三个字段都没有显式初始化也没有使用Prop({ ... })的默认值配置所以文档中默认值一列显示undefined。shadow: true组件启用了 Shadow DOM样式文件 my-component.css 通过styleUrl引入其中:host { display: block; }用于设置组件宿主元素的默认显示方式。组件的渲染逻辑很直观render()调用私有方法getText()把三个姓名片段交给工具函数format拼接后输出Hello, World! Im ...。format的实现位于 utils/utils.tsexport function format(first: string, middle: string, last: string): string { return (first || ) (middle ? ${middle} : ) (last ? ${last} : ); }该函数对三个参数做空值兜底first为空时退化为空字符串middle、last仅在非空时才以空格分隔拼接。这意味着即使调用方只传入部分属性组件也能正常渲染而不会输出undefined。三、从文档到类型components.d.ts中的组件接口Stencil 编译器在生成文档的同时还会自动生成全局类型声明文件 components.d.ts。这份文件与 readme 文档互为印证把my-component的接口固化成了 TypeScript 类型在Components命名空间中声明MyComponent接口包含first、middle、last三个string字段必填语义JSX 用法中则为可选在全局声明HTMLMyComponentElement元素类型并将其注册进HTMLElementTagNameMap使my-component在任何 HTML/TSX 上下文都能获得类型检查在LocalJSX命名空间中声明 JSX 用法三个属性均为可选first?: string并扩展stencil/core的JSX.IntrinsicElements。从源码结构可以推断readme 属性表与 components.d.ts 是同一套组件元数据的不同产出形态前者面向人类阅读后者面向编译器与 IDE 的类型检查。两者都由构建流程自动生成无需手工维护。四、这份文档是如何生成的docs-readme输出目标组件 readme 的Auto Generated Below标记正是它由编译器产出的证据。在 Stencil 中只要在配置文件里声明docs-readme类型的输出目标output target每次构建就会为每个组件生成/更新对应的 readme.md。本 fixture 的 stencil.config.ts 配置如下import { Config } from stencil/core; export const config: Config { namespace: stencil-v4, outputTargets: [ { type: dist, esmLoaderPath: ../loader }, { type: dist-custom-elements }, { type: docs-readme }, { type: www, serviceWorker: null }, // disable service workers ], };其中{ type: docs-readme }就是文档生成的开关。配合 package.json 中的脚本scripts: { build: stencil build --docs, start: stencil build --dev --watch --serve, generate: stencil generate }运行npm run build或npx stencil build --docs后编译器会扫描src/components下的组件把每个组件的Prop、Event、Method、CSS 变量等元数据整理成属性表并写入各组件目录下的 readme.md。这也是我们看到的文档中 Properties 表格、Auto Generated Below注释以及底部*Built with StencilJS*一行文字的由来——它们都是模板产物的标志性特征。需要说明的是Stencil 对 readme 文档采取头部自定义 尾部自动生成的约定开发者可以在# my-component标题之后、!-- Auto Generated Below --注释之前手工撰写使用说明而注释之后的 API 表格始终由编译器覆盖更新避免手工维护与源码脱节。原文档中表格上方留白正是这种约定允许的可自定义区。五、组件在 Vercel 静态构建测试中的角色从源码到部署探测my-component之所以出现在 Vercel 仓库中是因为整个 stencil-v4 目录是packages/static-build包用于集成测试的构建 fixture它模拟一个真实的前端项目用来验证 Vercel 的 static-build 流程能否正确识别 Stencil 项目、执行npm run build并部署构建产物。这一点可以从以下文件得到印证package.json 声明依赖stencil/core: ^4.19.2main/module/es2015/es2017/types 等字段指向dist/下的产物符合 Stencil 组件库的打包约定src/index.html 是www输出目标的入口页面通过script typemodule src/build/stencil-v4.esm.js与nomodule降级脚本加载组件并在body中实际使用组件my-component firstStencil lastDont call me a framework JS/my-component由于没有传入middle结合format的实现页面最终渲染为Hello, World! Im Stencil Dont call me a framework JSprobes.json 定义部署后的探测断言访问/路径时页面必须包含文本Stencil Component Starter即 index.html 的title从而验证构建与部署链路端到端可用。可见虽然这份 readme 只是自动生成的三行属性表但它所服务的组件是整条构建测试链路的最小可运行单元组件定义.tsx→ 编译与文档生成stencil build --docs→ 静态产物输出www/dist→ 部署探测probes.json。读懂它也就读懂了 Stencil 组件对外 API 的官方表达方式。六、如何在 HTML 与框架中消费这些属性属性文档的最终价值在于指导使用。结合上面的表格与源码my-component的使用方式可以归纳为原生 HTML 用法字符串属性直接以 attribute 形式传入my-component firstStencil middleJS lastWeb Component/my-componentJSX / Stencil 应用内用法借助 components.d.ts 获得类型提示my-component firstVercel lastDeploy/my-component要点回顾三个属性均为string类型缺省为undefined渲染逻辑已做空值兜底可以只传first组件是标准的 Custom ElementCustom Elements v1 规范可在任意框架或无框架环境中使用若属性需要接收非字符串值如对象、数字、布尔需通过 DOM property 赋值或在Prop上配置 attribute 转换规则——本组件未涉及此类配置因此文档表中无Attr与Property差异。七、总结本文从一份三行属性表的自动生成文档出发完整还原了 Stencil 组件 API 从源码定义 → 元数据收集 → 文档/类型产出 → 构建部署的完整链路组件公开 API 由Prop()装饰器与 JSDoc 注释声明二者直接决定 readme.md 中属性表的每一列内容docs-readme输出目标负责在构建时自动生成并更新组件文档components.d.ts同步产出类型声明在 Vercel 仓库语境下该组件是 stencil-v4 fixture 的一部分用于验证 static-build 的构建与部署探测流程。掌握这套机制后你再看到任何 Stencil 组件目录下的 readme.md都能立刻读懂它的属性契约并知道如何通过 JSDoc 与配置让文档与源码保持同步。赞分享CLI后端云原生【免费下载链接】vercelDevelop. Preview. Ship.项目地址https://gitcode.com/gh_mirrors/ve/vercel点击查看免费下载相关推荐Stencil 组件属性与虚拟属性解析以 hydrate-props 自动生成文档为例Stencil 组件属性与虚拟属性解析以 hydrate props 自动生成文档为例 test/end to end/src/hydrate props/r开发工具前端前端构建Stencil 组件文档深度解析读懂 docs-readme 自动生成的 my-component Properties 表格Stencil 组件文档深度解析读懂 docs readme 自动生成的 my component Properties 表格 导读 本篇以仓库 test/b开发工具前端前端构建读懂 Stencil 自动生成的组件文档以 end-to-end 工程 car-list 组件为例读懂 Stencil 自动生成的组件文档以 end to end 工程 car list 组件为例 Stencil 编译器能够为每个组件自动生成一份 Mark开发工具前端前端构建上一篇D2 导出完全上手把 .d2 脚本变成 SVG、PNG、PDF 等 6 种格式下一篇NVIDIA GameWorks DirectX Raytracing (DXR) Tutorials 指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

词根volu/volv深度解析:从滚转到复杂,高效记忆衍生词
词根volu/volv深度解析:从滚转到复杂,高效记忆衍生词

1. 从“volu/volv”这组词根说起:为什么它值得单独拎出来讲如果你背单词背到一定阶段,会发现一个很尴尬的现象:单个词都认识,但一到长词、难词就开始发懵。比如 volume、revolve、involve、evolve、convolution 这一串&#xff0c… · 2026/9/23 11:52:07

HBM3如何成为AI服务器性能守门员:带宽、工艺与调优实战
HBM3如何成为AI服务器性能守门员:带宽、工艺与调优实战

简介:本资源是一份聚焦AI服务器与高带宽存储器(HBM)产业趋势的深度研报,面向半导体、电子工程、数据中心及AI基础设施领域的从业者、研究人员与技术决策者,帮助理解HBM技术演进、供需格局及国产供应链机会。报告系统解… · 2026/9/23 11:52:07

3个步骤搞定重装系统找不到硬盘的最佳实践
3个步骤搞定重装系统找不到硬盘的最佳实践

3个步骤搞定重装系统找不到硬盘的最佳实践 复制来的代码跑不通不知道怎么调,是不是让你抓狂?在底层驱动开发或系统恢复工具开发中,很多开发者直接套用网上流传的 diskpart 脚本或底层 IOCTL… · 2026/9/23 11:52:07

火灾烟雾图像标注数据集实战:从格式清洗到YOLOv8部署调优
火灾烟雾图像标注数据集实战:从格式清洗到YOLOv8部署调优

简介:火灾烟雾图像标注数据集是一份面向目标检测方向的计算机视觉资源,包含2257张火灾与烟雾相关图像,可帮助研究人员和开发者训练、优化火灾和烟雾识别模型,解决安全场景中早期火情定位与预警问题。压缩包体积约266.14MB&#xf… · 2026/9/23 12:39:13

从一天10-20元起步:普通人可落地的网赚副业实操指南
从一天10-20元起步:普通人可落地的网赚副业实操指南

1. 为什么把目标定为一天10-20元:先算清这笔账1.1 一天10-20元的真实含义:单位时间产出率很多人一听到"网赚"两个字,第一反应是月入过万、日入几百的暴富故事。但说实话,那些故事要么是卖课的引流钩子,要么是… · 2026/9/23 12:39:13

JEDEC标准族全解析:从DDR5到UFS,硬件选型与可靠性验证指南
JEDEC标准族全解析:从DDR5到UFS,硬件选型与可靠性验证指南

简介:JEDEC标准族是电子元器件领域的工业标准合集,面向硬件工程师、可靠性测试人员及元器件选型与质量验证岗位,用于解决环境应力与可靠性试验方法查找、标准条款对照等实际问题。资源包共1个doc文档,约60KB,内容以JED… · 2026/9/23 12:39:13

GMM背景建模与目标追踪:从前景提取到轨迹管理的完整链路
GMM背景建模与目标追踪:从前景提取到轨迹管理的完整链路

简介:这份资源面向计算机视觉与视频处理方向的学习者和研究者,聚焦混合高斯模型在视频分析中的典型应用,涵盖GMM背景建模、目标检测与目标追踪三个核心环节,适合具备一定MATLAB基础、希望理解算法实现细节的中级读者参考。压缩包内… · 2026/9/23 12:39:13

Copula与变分贝叶斯在几何误差建模中的MATLAB实践
Copula与变分贝叶斯在几何误差建模中的MATLAB实践

简介:这份Matlab代码包面向机器学习、统计推断方向的研究者与进阶学习者,核心复现论文“Copula Variational Bayes inference via information geometry”中的算法,目标是在数据存在非线性、非对称依赖关系时,用Copula构造灵活的变… · 2026/9/23 12:39:07

MediaPipe手势识别实战:从手部关键点检测到手指计数
MediaPipe手势识别实战:从手部关键点检测到手指计数

简介:基于Python、OpenCV与MediaPipe构建的手势识别与手指计数项目,面向计算机视觉初学者、毕业设计学生及AI爱好者,提供可直接运行的完整工程与测试数据,可快速实现实时摄像头下的手部检测、手势追踪与指尖数量统计,也… · 2026/9/23 12:39:07

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码