创建项目

然后就是脚手架的选择,既然是 Vue3 组件库,那 Vite 必然是不二之选了。首先它几乎可以说是 Vue3 的官配,其次在做库项目方面,Vite 在打包时没 Webpack 这么麻烦,在开发时也比 Rollup 更容易搭建开发服务。

npm create vite yli-ui --template vue-ts

之后我们把 Git 初始化一下:git init

第一个组件

有了项目之后,我们不管其他乱七八糟的,先来个最简单的组件。

我们先对目录结构做简单的改造,使其适应 Lib 型项目。

这是我们原始创建后的结构:

我们把 publicsrc/assetssrc/components/HelloWorld.vue 删掉,添加src/components/button.vue

其中的 src/App.vue 和 src/main.ts 保留用于开发组件的时候随时看效果。

接着我们快快地写一个按钮组件,不管其他的,页面上能看到就行。

创建组件

在组件文件夹下创建button.vue文件用于组件代码构建 src/components/button.vue

<template><button class="yli-button"><slot></slot></button>
</template><script lang="ts">
import { defineComponent } from 'vue'export default defineComponent({name: 'YliButton'
})
</script>

展示组件

直接在 src/App.vue 中引入组件代码

<template><yli-button>一个按钮</yli-button>
</template>
<script setup lang="ts"> import YliButton from './components/button.vue' </script>

直接启动服务

npm run dev

打开浏览器:

如何用 app.use() 载入组件资源

不过通常的组件库应该是以 app.use(YliUI) 的形式来安装的,我们再来改装一下,导出一个具有 install 方法的对象。

加入入口装载文件用于载入所有组件资源src/index.ts

import YliButton from './components/button.vue'import type { App } from 'vue'const components = [YliButton
]export function install(app: App) {components.forEach(component => {app.component(component.name, component)})
}export default {install
}export {YliButton
}

src/main.ts

import { createApp } from 'vue'
import App from './App.vue'
import YliUI from './index'
createApp(App).use(YliUI).mount('#app')

打包组件

下一步我们就来完成我们的组件打包。借助 vite 的 build.lib 配置快速完成库打包,注意打包的时候要排除 Vue 本身

vite.config.ts

下面的build.lib选项可以阅读构建选项

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'export default defineConfig({build: {lib: {entry: 'src/index.ts',formats: ['cjs', 'es']},rollupOptions: { // 确保外部化处理那些你不想打包进库的依赖external: ['vue']}},plugins: [vue()]
})

npm run build

最后我们为 package.json 添加上 main 和 module 字段,那么一个可发布的组件库雏形就出来了,注意把 private 去掉或者改为 false

{"name": "demo-ui","version": "0.0.0","scripts": {"dev": "vite","build": "vite build","preview": "vite preview"},"main": "dist/demo-ui.cjs.js","module": "dist/demo-ui.es.js","dependencies": {"vue": "^3.2.25"},"devDependencies": {"@vitejs/plugin-vue": "^2.3.3","typescript": "^4.5.4","vite": "^2.9.9"}
}

类型声明

作为一个 Vue3 + TypeScript 的项目,自然不能少了自动生成类型声明文件。

这里我们借助 vite-plugin-dts 插件来实现打包时自动生成类型声明文件; 如果引入你的组件项目是由TS构建的,但你却没有对项目打包自动生成文件声明,那么会出现组件引入的类型报错。

npm i -D vite-plugin-dts

然后在 Vite 配置文件中添加插件:vite.config.ts

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import dts from 'vite-plugin-dts'export default defineConfig({build: {lib: {entry: 'src/index.ts',formats: ['cjs', 'es']},rollupOptions: {external: ['vue']}},plugins: [vue(),dts({ insertTypesEntry: true, copyDtsFiles: false })]
})

我们再一次执行 npm run build 进行打包,可以看到打包后的文件也包含类型声明文件了

最后在 package.json 中添加 types 字段

{// ..."main": "dist/demo-ui.cjs.js","module": "dist/demo-ui.es.js","types": "dist/index.d.ts",// ...
}

告一段落

本篇介绍了从零开始搭建一个 Vue3 组件库的第一步,完成了一个最简单的组件库项目,并且能够打包。

发布到 npm ,需要注册npm 账号,然后只需要执行 npm publish 即可;

注意:

  • 切记科学上网* 如果npm设置了taobao镜像的话先设置回来,不然无法上传npm config set registry=https://registry.npmjs.org* 登入npm 然后上传

最后执行npm publish上传组件

{"dependencies": {"yli-ui": "0.0.0"// or"yli-ui": "link:到 yuli-ui 的根目录的物理路径"}
}

执行 npm i 后就可以像使用其他库一样。

最后

最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

vue的组件库如何从0开始相关推荐

  1. 从零实现Vue的组件库(十)- Select 实现

    当选项过多时,使用下拉菜单展示并选择内容. Select 组件主要特点在于: 数据双向绑定,下拉列表变动时,选中项如何回显: 单选.多选的区分,以及对应处理. 1. 实例 代码 <fat-sel ...

  2. 16款优秀的Vue UI组件库推荐

    16款优秀的Vue UI组件库推荐 Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可. 在公司的Web前端项目开发中,多个项目采用 ...

  3. vant引入组件报错_强烈推荐优秀的Vue UI组件库

    在我们实际开发中常常因为项目周期短不得不引入一些UI框架来辅助开发 那常见的比较好的UI框架有那些呢(基于VUE) Element UI组件库 (pc端) Element,一套为开发者.设计师和产品经 ...

  4. 17款优秀的Vue UI组件库汇总

    17款优秀的Vue UI组件库推荐 Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可. 在公司的Web前端项目开发中,多个项目采用 ...

  5. 从零实现Vue的组件库(零)- 基本结构以及构建工具

    今年三月份入职以来,一直在做后台运营系统,其中重复性工作有很多,其中组件库就是一项.尽管现阶段有很多优秀的开源组件库,但是为了适应产品奇奇怪怪的需求,还是要手动实现一些组件.将其沉淀下来,积累一些自己 ...

  6. 从零实现Vue的组件库(十二)- Table 实现

    基于Table标签的展示数据组件. Table 组件主要特点在于: 组件 data 的解耦,减少重复代码: 良好的扩展性,可以通过自定义列模板来适应不同的业务场景. 1. 实例 代码 <fat- ...

  7. Vue UI组件库总结推荐

    基于Vue的Quasar Framework 介绍 这个框架UI组件很全面,准备下次使用这个框架了 基于Vue的Quasar Framework 中文网 http://www.quasarchs.co ...

  8. 优秀的Vue UI组件库

    Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入正 ...

  9. 你知道这些吗?8款优秀的Vue UI组件库推荐,都能打开呦

    Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可. 在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入 ...

最新文章

  1. c语言设置程序自动执行,c语言如何设置程序进程执行优先权
  2. mysql insert慢_MySQL insert语句慢查询的优化
  3. Filter和Listener-学习笔记02【Filter细节】
  4. springboot2.5.5配置druid数据源1.2.8与jdbc
  5. 表单php跳转页面跳转,form表单页面跳转方式提交练习
  6. php跳过代码,PHP利用continue实现跳过本次循环中剩余代码的注意点
  7. linux 查找html文件,linux查找文件内容包含
  8. 数据结构图之二(最小生成树--普里姆算法)
  9. Java原生http请求调用企业微信api,获取打卡记录
  10. 深度学习之稀疏编码小知识
  11. SolidWorks齿轮设计软件工具 GearTrax介绍
  12. Android新浪微博分页加载,使用LoadMoreWrapper为RecyclerView实现分页加载
  13. 终端测试是硬件测试还是软件测试,移动终端软件测试基础知识
  14. 华为u8500在usb模式下logcat无法打印信息
  15. from scipy.misc import comb ImportError: cannot import name comb
  16. 浏览器内部工作原理[译]How browsers work (转)
  17. php lumen timestamp,一次 lumen 调优的记录
  18. 建设网站:购买域名和主机的原则你知道吗?
  19. MATLAB 郭彦甫 第十四课练习答案
  20. 分享一个蓝月传奇手游辅助脚本,想回味传奇游戏又不想费太多时间练级的可以试试

热门文章

  1. 如何利用SEO百度霸屏技术引爆自然流量
  2. 关于dw站点更改html,实验二 使用DW创建站点、设置页面头部信息及页面属性
  3. easyui java代码生成器,easyui+jdbc+xml模板开发自动化生成报表的java工具 - 贪吃蛇学院-专业IT技术平台...
  4. android腾讯一面,腾讯音乐Android工程师一面面试题记录
  5. Linux中每次都懵圈的错误重定向
  6. /*编程实现邮局寄包裹的邮费计算:用户输入包裹的重量,按如下规定计算邮费。 * 邮局对包裹邮费规定如下:重量(千克)不超过10,收费标准为0.80元/千克; * 不超过20,收费标准为0.75元/
  7. 模型评估与选择(中篇)-ROC曲线与AUC曲线
  8. 轻量级实时语义分割:ICNet
  9. 2021-04-27 MIME
  10. Linux的启动和关闭