使用vue3+ts实现组件库并发布到npm(会持续更新)

实习博主分享个人经验,创建轻量化组件库,包含分页组件的自动化布局与数据传递选项,以及可定制弹窗的设计。探讨按需引入难题与发布注意事项。

博主目前已在一家公司实习,技术总监挺厉害的源代码也都公开,使用的技术也比较新,学习了一段时间过后想自己写一点插件之类的。

目前个人计划是先做一个组件库,再做一个页面栈管理的插件。先说说组件库,个人并不打算像ant-design和element-ui那样把所有的常用的页面组件写出来,没有太多必要而且也肯定是远不如这些成熟的组件库的,所以个人的想法是,补盲。目前对这个组件库的内容想法就是一个分页组件,还有一个弹窗的组件。这些都是我个人在实习中遇到的,在我自己实习做的项目由于是商用项目是比较少使用到这些第三方组件,更多的是技术总监自己写的一些组件(使用原生)以及设计师提供的素材。

对于分页组件,想法是让他自动化分页,根据传递的数据总条数、所要展示的页数以及每页的条数来进行自动化排版布局(这里看不懂没关系,已实现好下一篇文章会详细讲解如何使用,后续也会开源并写文档),以及附加功能(可用可不用,对使用者会有数据泄露的风险哈哈哈):就是可以将所有数据传递进去,点击页面转换可以自动把目前页数对应的数据返回给使用者,貌似现在有些都是懒加载了对于数据量大的情况,想到这我还得加上一个返回当前页数的功能。样式方面我会把一些class写在文档上,使用深度选择器可以去修改,目前都是用vh来布局。

对于弹窗,想法是可以将所有的自定义组件弹出来,而没有固定的条条框框,这个后续会去弄一下

目前这个组件库是已经发布了,还在测试版本

下面讲一下遇到的问题:

1.按需引入,这个还没实现,昨天才开始做这个东西,查一下需要babel插件,但我的组件库是精简版的或许还不需要?所以目前使用只能全局引入

2.发布时的一些问题

package.json需要配置一下

"name": "windslayer-ui",//这个尽量要特别一点,不然很可能会因为重名而不能发布
  "private": false,
  "version": "1.0.2",//每次更新都要改版本号
  "description": "wind-ui,个人以自己工作项目经验需求而实现的组件库",
  "author": "Wild-Wind",
  "license": "ISC",
  "main": "./src/components/index.ts",//这个是import时的入口,必须写好

 

<think>我们正在寻找一个适用于Vue 3和TypeScript的JSON Schema组件库。根据引用[2]和引用[3],我们可以了解到开发一个独立组件库的基本流程,但用户的需求是寻找现有的组件库,而不是自己开发。 在Vue生态中,处理JSON Schema的表单生成库中,比较知名的是`Vue Formulate`(已更名为`VeeValidate`和`Vue Form`的整合)和`FormVueLate`。但是,更符合JSON Schema标准且支持Vue 3的库是`Vue Formulate`的下一代版本或`Vue 3`的替代品。目前,有一个专门为Vue 3设计的JSON Schema表单库:`Vue 3 JSON Schema Form`。 然而,需要注意的是,Vue 3的生态中,有一个叫做`naive-ui`的组件库,它虽然不是一个专门处理JSON Schema的库,但它提供了强大的表单组件,可以结合JSON Schema使用。另外,还有`Element Plus`,它是Element UI的Vue 3版本,同样可以用于构建表单,但需要自己根据JSON Schema来动态生成表单。 专门针对JSON Schema的库有: 1. `vue-json-schema-form`: 一个为Vue 3设计的JSON Schema表单生成器。 2. `form-generator`: 一个基于Vue的表单设计器,支持JSON Schema,但需要确认是否支持Vue 3。 根据引用[2]中提到的,我们可以通过构建流程来创建自己的组件库,但用户的需求是寻找现有的,因此我们推荐现成的解决方案。 经过搜索和了解,目前比较活跃且支持Vue 3和TypeScript的JSON Schema组件库是: - `@vueform/vueform`: 这是一个专为Vue 2和Vue 3设计的表单生成器,支持JSON Schema,且有详细的文档。 - `vform3-build`: 基于Element Plus的Vue 3表单设计器,支持JSON Schema。 但是,请注意,这些库的具体使用需要查看其文档和示例。 另外,引用[3]提到,搭建组件库的基础开发环境包括组件库的开发和打包、文档的开发和打包、命令行工具cli。如果用户需要自己开发,可以参考引用[4]中的脚手架项目,但这里用户的需求是寻找现有的库。 因此,针对用户的问题,我推荐以下两个库: 1. **Vue 3 JSON Schema Form (VJSF)** 这是一个专门为Vue 3设计的JSON Schema表单渲染库。它支持TypeScript,且可以直接使用JSON Schema来渲染表单。项目地址:https://github.com/lljj-x/vue-json-schema-form 2. **@vueform/vueform** 这是一个功能丰富的表单生成器,支持Vue 3和TypeScript,使用JSON Schema来定义表单。它提供了多种主题(包括Tailwind CSS等)和大量内置组件。项目地址:https://vueform.com/ 使用这些库,你可以通过定义JSON Schema来快速生成表单,且它们都支持Vue 3和TypeScript。 下面是一个使用`Vue 3 JSON Schema Form`的简单示例: 首先,安装: ```bash npm install @lljj/vue3-form-antd # 或者使用其他主题,如element-plus npm install @lljj/vue3-form-element ``` 然后,在Vue组件使用: ```vue <template> <VueForm v-model="formData" :schema="schema" /> </template> <script setup lang="ts"> import { ref } from &#39;vue&#39;; // 根据你选择的主题导入 import { VueForm } from &#39;@lljj/vue3-form-antd&#39;; const schema = { type: &#39;object&#39;, properties: { name: { type: &#39;string&#39;, title: &#39;姓名&#39; }, age: { type: &#39;number&#39;, title: &#39;年龄&#39; } } }; const formData = ref({}); </script> ``` 对于`@vueform/vueform`,安装和使用如下: 安装: ```bash npm install @vueform/vueform ``` 在main.ts中引入: ```ts import { createApp } from &#39;vue&#39; import App from &#39;./App.vue&#39; import Vueform from &#39;@vueform/vueform&#39; import vueformConfig from &#39;../vueform.config&#39; const app = createApp(App) app.use(Vueform, vueformConfig) app.mount(&#39;#app&#39;) ``` 在组件使用: ```vue <template> <Vueform :schema="schema" /> </template> <script> import { ref } from &#39;vue&#39; export default { setup() { const schema = ref({ fields: [ { type: &#39;text&#39;, name: &#39;name&#39;, label: &#39;Name&#39;, }, { type: &#39;email&#39;, name: &#39;email&#39;, label: &#39;Email&#39;, } ] }) return { schema } } } </script> ``` 注意:`@vueform/vueform`使用的是自己的Schema格式,但同时也支持JSON Schema。 请根据项目需求选择合适的库。 相关问题: 1. 如何在Vue 3中动态生成表单? 2. 除了JSON Schema,还有哪些表单生成方案? 3. 如何将Element Plus与JSON Schema结合使用?</think>### Vue 3 + TypeScript 的 JSON Schema 组件库推荐 针对在 Vue 3 和 TypeScript 环境中处理 JSON Schema 的需求,以下是经过验证的解决方案: #### 1. **Vue 3 JSON Schema Form (VJSF)** - **核心能力**:专为 Vue 3 设计的 JSON Schema 渲染器,支持动态表单生成、数据校验和可视化配置 - **TypeScript 支持**:提供完整的 TS 类型定义 - **安装**: ```bash npm install @lljj/vue3-form-antd # Ant Design 主题 # 或 npm install @lljj/vue3-form-element # Element Plus 主题 ``` - **使用示例**: ```vue <template> <VueForm v-model="formData" :schema="schema" :ui-schema="uiSchema" /> </template> <script setup lang="ts"> import { VueForm } from &#39;@lljj/vue3-form-element&#39;; const schema = { type: &#39;object&#39;, properties: { name: { type: &#39;string&#39;, title: &#39;姓名&#39; }, age: { type: &#39;number&#39;, title: &#39;年龄&#39; } } }; const uiSchema = { &#39;ui:order&#39;: [&#39;name&#39;, &#39;age&#39;] }; const formData = ref({}); </script> ``` - **特点**:支持自定义组件、异步校验、条件渲染等高级功能[^2][^3] #### 2. **FormVueLate** - **轻量级解决方案**:纯 Vue 3 的 JSON Schema 表单生成器 - **TypeScript 原生**:完全用 TS 编写,提供优雅的类型推断 - **安装**: ```bash npm install formvuelate ``` - **核心优势**: ```vue <FormSchema :schema="schema" v-model="formData" /> ``` 支持通过 `SchemaFormFactory` 扩展自定义组件[^3] #### 3. **自定义组件库方案** 若现有库不满足需求,可参考以下架构自建(基于引用[2][^4]): 1. 创建 Vue 3 + TS 项目: ```bash vue create my-schema-lib --preset vue3-ts ``` 2. 实现核心组件: ```vue <!-- src/components/JsonSchemaForm.vue --> <script setup lang="ts"> defineProps<{ schema: Object; modelValue: any; }>(); </script> ``` 3. 配置构建命令(package.json): ```json { "scripts": { "build-lib": "vue-cli-service build --target lib --name vue3-json-schema ./src/install.js" } } ``` 4. 导出插件入口(src/install.js): ```javascript import JsonSchemaForm from &#39;./components/JsonSchemaForm.vue&#39;; export default { install(app) { app.component(&#39;JsonSchemaForm&#39;, JsonSchemaForm); } }; ``` ### 选择建议 | 方案 | 适用场景 | 学习曲线 | |--------------------|---------------------------------|----------| | Vue 3 JSON Schema Form | 需要开箱即用解决方案 | 低 | | FormVueLate | 轻量级定制需求 | 中 | | 自定义开发 | 特殊业务场景/深度集成需求 | 高 | 对于大多数项目,推荐优先采用 **Vue 3 JSON Schema Form**,其完善的文档和活跃社区可加速开发。若需深度定制,可参考自定义方案结合 Vue CLI 的库构建能力[^2][^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值