目录
- 《构建 Vue3 组件库 - 如何开始》
- 《构建 Vue3 组件库 - 安装依赖》
- 《构建 Vue3 组件库 - 图标》
- 《构建 Vue3 组件库 - 组件》
- 《构建 Vue3 组件库 - 样式》
- 《构建 Vue3 组件库 - 调试》
- 《构建 Vue3 组件库 - 文档》
- 《构建 Vue3 组件库 - 渲染器》
- 《构建 Vue3 组件库 - 打包》
源码
typescript
ts 项目首先需要安装 typescript,提供 tsc 来编译 .ts 文件。
npm i -D typescript@types/node
开发组件库不可避免的会编码一些脚本文件,会用到 nodejs 中的包,如:node:path,
安装 @types/node 来提供这些包的类型声明文件。
npm i -D @types/nodevue
vue ≥ 3.3
每一个 Vue Component 都会有 name 属性,平时封装业务组件的时候,并不是特别在意这个属性,
开发组件库 name 会变的尤其重要。
注意这里 vue 的版本,需要 ≥3.3,因为 3.3 版本之后提供了更多的宏,例如 defineOptions,
这个宏可以很方便的在 <setup> 中定义组件的 name,更多特性可以参考:《Vue 3.3 主要新特性详解》。
3.3 之前的版本,需要使用 unplugin-vue-define-options,才能在 <setup> 中开启 defineOptions,
具体可以参考:defineOptions。
npm i -D vue- vue3 需要 nodejs ≥ 16;
- vue 需要 ≥ 3.3;
因此需要配置 package.json:
{
  "peerDependencies": {
    "vue": "^3.3.x"
  },
  "engines": {
    "node": ">= 16"
  }
}vue-tsc
vue-tsc 是对 typeScript 自身命令行界面 tsc 的一个封装,除了 .ts 文件,它还能支持 Vue 的 SFC 文件。
npm i -D vue-tscvite
《上一篇》 介绍过会使用 vite 来打包及调试组件库。
npm i -D vite@vitejs/plugin-vue
在 vite 中提供单文件组件支持。
npm i -D @vitejs/plugin-vuevite-plugin-dts
从 .ts(x) 或 .vue 源文件生成类型文件(*.d.ts)的 Vite 插件。
npm i -D vite-plugin-dtsvitepress
《上一篇》 介绍过会使用 vitepress 来构建文档站点。
vitepress 的文档,一定要参考它的 英文文档,中文文档 的版本比较旧了。
npm i -D vitepresssass
在 vite 中支持 sass 预处理,
如果使用其他预处理器,可以参考 CSS 预处理器。
npm i -D sassprettier
结合 .prettierrc 统一所有目录的缩进、换行等。
npm i -D prettiereslint
结合 .eslintrc 统一所有目录语法等。
npm i -D .eslintrc@typescript-eslint
接下来需要安装,@typescript-eslint/parser 和 @typescript-eslint/eslint-plugin,这篇文章 讲述的非常清楚,可以参考了解一下 eslint 与 typescript 之间的关系。
@typescript-eslint/parser
为了让 eslint 也能识别出 typescript 所转换出的 ast,需要将 eslint.parserOptions.parser 设置为 @typescript-eslint/parser。
npm i -D @typescript-eslint/parser@typescript-eslint/eslint-plugin
提供 typescript 语法的检查规则。
npm i -D @typescript-eslint/eslint-plugineslint-plugin-vue
eslint 默认的 parser 只会转换 js 文件, 为了支持 Vue SFC 的语法检查,需要安装 eslint-plugin-vue,详细可参考 官方文档
npm i -D eslint-plugin-vue最基础的用法,如:
module.exports = {
  extends: [
+    'plugin:vue/vue3-recommended',
  ],
  rules: {
    // override/add rules settings here, such as:
    // 'vue/no-unused-vars': 'error'
  }
}.eslinrc
{
  "extends": [
    "plugin:vue/vue3-recommended",
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended"
  ],
  "rules": {
    // override rules...
  },
  "parser": "vue-eslint-parser",
  "plugins": ["@typescript-eslint"],
  "root": true,
  "parserOptions": {
    "parser": "@typescript-eslint/parser"
  },
  "overrides": [
    {
      "files": "*"
    }
  ]
}