- 介绍
- 什么是 dumi
Open-source MIT Licensed | Copyright © 2019-present
Powered by self
Powered by self
dumi 支持 Vue 组件的自动 API 表格生成,用户只需配置entryFile
即可开始 API 表格的使用:
import { defineConfig } from 'dumi';export default defineConfig({resolve: {// 配置入口文件路径,API 解析将从这里开始entryFile: './src/index.ts',},});
Vue 组件的元信息提取主要使用 TypeScript 的 TypeChecker, 所以配置tsconfig.json
时请务必将strictNullChecks
设为false
{"compilerOptions": {"strictNullChecks": false}}
如果项目中一定要使用strictNullChecks
,你也可以为 Vue 解析专门配置一个tsconfig.vue.json
文件
// .dumirc.tsimport * as path from 'path';export default {plugins: ['@dumijs/preset-vue'],vue: {tsconfigPath: path.resolve(__dirname, './tsconfig.vue.json'),},};
若您的项目 Monorepo 项目, 默认的 tsconfigPath 为 <project-root>/<directory>/tsconfig.json
。 <project-root>
为 Monorepo 项目目录; <directory>
则为子包package.json
中的 repository.directory
选项
我们还可以通过 checkerOptions 选项来配置 Type Checker:
其中exclude
选项默认会排除从 node_modules 中引用的所有类型,你还可以配置排除更多的目录:
export default {plugins: ['@dumijs/preset-vue'],vue: {checkerOptions: {exclude: /src\/runtime\//,},},};
这样,src/runtime/
目录下引用的所有接口都不会被检查。
还有一个比较有用的选项则是externalSymbolLinkMappings
,可以帮助我们配置外部接口的外链,例如:
export default {plugins: ['@dumijs/preset-vue'],vue: {checkerOptions: {externalSymbolLinkMappings: {typescript: {Promise:'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise',},},},},};
上述配置可以将 Promise 接口链接到 MDN 的参考文档。
更多关于 checkerOptions 的选项请查看: MetaCheckerOptions
推荐在 props 中定义组件的事件,这样可以获得完整的 JSDoc 支持
插件主要支持以下 JSDoc 标签:
属性描述,可以在props
, slots
, methods
中使用,例如:
export default defineComponent({props: {/*** @description 标题*/title: {type: String,default: '',},},});
当 prop 的default
选项为函数时,default
值不会被解析,这时可以使用@default
来声明它
defineComponent({props: {/*** @default {}*/foo: {default() {return {};},},},});
用以区分普通函数和函数组件的。目前无法自动识别为组件的情况有两种:
/*** @component*/function InternalComponent(props: { a: string }) {return h('div', props.a);}
/*** @component*/export const GenericComponent = defineComponent(<T>(props: { item: T }) => {return () => (<div>{item}</div>);},);
都需要用@component
注解,否则会被识别为函数
这些 release 标签在defineEmits
中是无法生效
对于组件实例本身暴露的方法,可以使用像@public
这样的标签来公开
defineExpose({/*** @public*/focus() {},});
如果将 MetaCheckerOptions 中的filterExposed
设置为 false,这些发布标签将全部无效。
vue 的组件实例不仅会可以通过
expose
暴露属性和方法,还会暴露从外部传入的 props。
标有@ignore
或@internal
的属性不会被检查。
在 Markdown 文件编写时
<API id="Button"></API>
只显示 Vue 组件的props
部分,完整的显示应该这样编写:
## Button API### Props<API id="Button" type="props"></API>### Slots<API id="Button" type="slots"></API>### Events<API id="Button" type="events"></API>### Instance Methods<API id="Button" type="imperative"></API>
imperative 类别是通过 release 标签暴露的组件实例方法