Vue3企业级优雅实战-组件库框架-3搭建组件库开发环境
workspace-root在上一篇已经初始化过了。从本文开始,您需要依次构建组件库、示例、文档和cli。本文的内容是搭建组件库的开发环境。1packages目录packages目录创建在项目根目录下,存放组件库的所有组件和组件库的入口。该目录下创建了两个子目录foo和yyg-demo-ui。这两个目录是做什么用的?1.1foo目录foo目录代表一个example组件,我们后面会在example和组件库文档中用它来测试组件库是否能正常运行。后面要开发的所有组件(比如高级卡片组件、JSONSchema表单组件等)都和foo组件的文件目录结构保持一致。1.2yyg-demo-ui目录该目录与整个组件库工程同名,所以你的本地目录不一定是这个名字。该目录是组件库的入口模块,会把组件库的所有组件(即packages目录下的其他包)作为依赖安装,引入所有组件统一暴露。此外,它还是打包组件库的入口。可以理解为组件库的聚合模块。2实现foo样例组件2.1初始化package.jsonfoo目录存放样例组件,也是一个包,所以需要在命令行进入packages/foo目录,使用pnpm初始化:pnpminit修改生成的package.jsonfoo中name属性的值,在monorepo中,分包的name属性通常命名为@organizationname/foo,由于我们是组件库,可以命名为@componentlibraryname/foo,即@yyg-demo-ui/foo。我修改了package.json的以下属性:{"name":"@yyg-demo-ui/foo","version":"1.0.0","description":"samplecomponent","author":"程序员优雅大哥youyacoder","main":"index.ts",...}2.2初始化foo目录结构命令行进入foo目录:创建index.ts文件,该文件为组件的入口文件:touchindex.ts创建一个src目录,存放组件的实现源码。在foo/src/下创建index.tsx和types.ts,前者是组件的具体实现,后者是组件的props定义和类型:mkdirsrctouchsrc/index.tsxsrc/types.ts中这样,示例组件foo的目录结构就创建好了,目录结构如下:packages/|-foo/|-index.ts|-src/|-index.ts|-types.ts|-yyg-demo-ui/2.3定义foo组件props在foo/src/types.ts中定义foo组件的props并提取其类型:import{ExtractPropTypes}from'vue'exportconstfooProps={msg:{type:String,required:false,default:''}}exporttypeFooProps=ExtractPropTypes上面的代码定义了一个非必填属性msg,使用vue提供的ExtractPropTypes来提取props的类型。2.4实现foo组件在foo/src/index.tsx中实现foo组件::NAME,props:fooProps,setup(props,context){console.log(props,context)constonBtnClick=()=>{console.log('点击按钮进行测试',props.msg)}return()=>(yyg-demo-uiFoo
msgis:{props.msg}
Clickme )}})该组件仅显示文本和用于测试的ElementPlus按钮。2.5定义foo组件入口文件foo/index.ts:import{App}from'vue'importFoofrom'./src'Foo.install=(app:App)=>{app.component(Foo.name,Foo)}exportdefaultFoo这个文件导入和导出组件,并提供组件的安装方法。这样就完成了foo组件的编码。3实现yyg-demo-ui完成foo样例组件后,需要开始开发组件库入口yyg-demo-ui。第一步依旧是初始化package.json3.1初始化package.json命令行进入packages/yyg-demo-ui目录:pnpminit同上修改生成的package.json文件的name属性:{"name":"@yyg-demo-ui/yyg-demo-ui","version":"1.0.0","description":"组件库入口","author":"Youyacoder","main":"index.ts",...}3.2安装依赖foo和yyg-demo-ui是独立的包,yyg-demo-ui在导入foo组件前需要先将foo安装到依赖中。2.1中修改foo的package.jsonname属性为@yyg-demo-ui/foo,即安装时使用的名称。在控制台输入packages/yyg-demo-ui,执行命令:pnpminstall@yyg-demo-ui/foo此时查看packages/yyg-demo-ui/package.json的依赖,就可以了看到工作区协议使用了foo"dependencies":{"@yyg-demo-ui/foo":"workspace:^1.0.0"}同时还可以看到多了一个@yyg-demo-ui/foo:node_modules中的3.3定义入口文件在packages/yyg-demo-ui下创建index.ts,导入组件并导出:import{App}from'vue'importFoofrom'@yyg-demo-ui/foo'//importcomponentendimport'../scss/index.scss'constcomponents=[Foo]//components//全局动态添加组件constinstall=(app:App):void=>{components.forEach(component=>{app.component(component.name,component)})}exportdefault{install}到这里基本完成了组件的开发环境,但是还剩下三个问题:如何查看组件的效果和组件库的样式定义.文中将依次解答。下一篇文章将分享组件库的CSS架构和实例搭建。