经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Vue.js » 查看文章
Vue3 企业级优雅实战 - 组件库框架 - 11 组件库的打包构建和发布
来源:cnblogs  作者:程序员优雅哥(公\/同)  时间:2023/2/10 14:21:40  对本文有异议

回顾第一篇文章中谈到的组件库的几个方面,只剩下最后的、也是最重要的组件库的打包构建、本地发布、远程发布了。

1 组件库构建

组件库的入口是 packages/yyg-demo-ui,构建组件库有两个步骤:

  1. 添加 TypeScript 的配置文件: tsconfig.json
  2. 添加 vite.config.ts 配置文件,配置打包方式。

1.1 tsconfig.json

packages/yyg-demo-ui 中添加 tsconfig.json 文件:

  1. {
  2. "compilerOptions": {
  3. "target": "ESNext",
  4. "useDefineForClassFields": true,
  5. "module": "ESNext",
  6. "moduleResolution": "Node",
  7. "strict": true,
  8. "jsx": "preserve",
  9. "sourceMap": true,
  10. "resolveJsonModule": true,
  11. "isolatedModules": true,
  12. "esModuleInterop": true,
  13. "lib": ["ESNext", "DOM"],
  14. "skipLibCheck": true,
  15. "declaration": true,
  16. "baseUrl": "."
  17. },
  18. "include": ["../**/*.ts", "../**/*.d.ts", "../**/*.tsx", "../**/*.vue"],
  19. "exclude": ["../**/node_modules/"]
  20. }

1.2 vite.config.ts

打包构建时需要提取类型定义,可以使用 vite 插件 vite-plugin-dts。首先在 packages/yyg-demo-ui 中添加该插件为开发依赖:

  1. pnpm install vite-plugin-dts -D

然后创建 vite.config.ts 文件:

  1. import { defineConfig } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import * as path from 'path'
  4. import VueJsx from '@vitejs/plugin-vue-jsx'
  5. import viteDts from 'vite-plugin-dts'
  6. export default defineConfig({
  7. plugins: [
  8. vue(),
  9. VueJsx(),
  10. viteDts({
  11. insertTypesEntry: true,
  12. staticImport: true,
  13. skipDiagnostics: true
  14. })
  15. ],
  16. build: {
  17. lib: {
  18. entry: path.resolve(__dirname, './index.ts'),
  19. name: 'yyg-demo-ui',
  20. fileName: format => `yyg-demo-ui.${format}.js`
  21. },
  22. outDir: path.resolve(__dirname, '../../lib'),
  23. rollupOptions: {
  24. external: ['vue'],
  25. output: {
  26. globals: {
  27. vue: 'Vue'
  28. }
  29. }
  30. }
  31. }
  32. })

1.3 package.json

packages/yyg-demo-ui/package.json 中添加打包 scripts,上面的配置指定了打包输出目录为项目根目录下的 lib,每次打包前希望先删除该目录,可以使用 rimraf。在该模块中先安装 rimraf

  1. pnpm install rimraf -D

package.json 中添加 script:

  1. "scripts": {
  2. "build": "rimraf ../../lib && vue-tsc --noEmit && vite build"
  3. },

执行 pnpm run build 开始打包。

image

打包成功后,项目根目录下生成 lib 目录,包括 ES 规范和 UMD 规范和类型定义文件。

2 组件库的本地发布

2.1 根目录 package.json scripts

到目前为止,整个组件库有很多个包,每个包都有一些 scripts:

  1. cli:
  2. - gen: 创建新组件
  3. docs
  4. - dev:本地开发组件库文档
  5. - build:打包构建组件库文档
  6. - serve:预览组件库文档打包
  7. example
  8. - dev:devdev:uatdev:prod:本地开发 example
  9. - build:devbuild:uatbuild:prod:打包构建 example
  10. - preview:预览 example 打包构建后的结果
  11. packages/yyg-demo-ui:
  12. - build:打包构建组件库

上面这些 scripts 都需要进入到对应的目录执行,这样比较麻烦,所以可以将这些命令汇总到根目录的 package.json 中,这样无论是哪个模块的 scripts,都从根目录执行即可。

  1. "scripts": {
  2. "dev:dev": "pnpm run -C example dev:dev",
  3. "dev:uat": "pnpm run -C example dev:uat",
  4. "dev:prod": "pnpm run -C example dev:prod",
  5. "build:dev": "pnpm run -C example build:dev",
  6. "build:uat": "pnpm run -C example build:uat",
  7. "build:prod": "pnpm run -C example build:prod",
  8. "preview:example": "pnpm run -C example preview",
  9. "build:lib": "pnpm run -C packages/yyg-admin-ui build",
  10. "docs:dev": "pnpm run -C docs dev",
  11. "docs:build": "pnpm run -C docs build",
  12. "docs:preview": "pnpm run -C docs serve",
  13. "gen:component": "pnpm run -C cli gen",
  14. "lint": "eslint \"{cli,packages,docs,example}/**/*.{js,ts,vue,jsx,tsx}\" --fix"
  15. },

通过 -C 指定 scripts 的位置。

2.2 安装本地私服 verdaccio

几个月前程序员优雅哥分享过使用 Docker 搭建 Nexus3 私服,Nexus3 相对重量级,如果在本地测试,使用 verdaccio 即可,verdaccio 算得上本地的一款轻量级私服了。

  1. 安装 verdaccio

verdaccio 通常是全局安装(-g),在咱们组件库中为了大家 clone 代码操作方便,便将其安装到根目录的开发依赖中:

  1. pnpm install verdaccio -D -w
  1. 启动 verdaccio

在根目录 package.jsonscripts 中添加启动 verdaccio 的命令

  1. "start:verdaccio": "pnpm verdaccio",

这一步可省略,只因为我用 WebStorm,添加到 scripts中不用每次输入命令,能偷懒的必须偷懒。

执行 start:verdaccio 后,控制台会提示访问地址 http://localhost:4873/ 。在浏览器中访问该路径。

image

  1. 创建用户、登录

在浏览器中按照界面提示创建用户、登录。在命令行中执行下列命令创建用户:

  1. npm adduser --registry http://localhost:4873/

依次输入用户名、密码、邮箱,回车便成功创建账号并自动登录上。

使用刚才输入的用户名和密码,在浏览器中登录,登录前刷新浏览器。

2.3 本地发布

在发布前,需要修改项目根目录 package.json 的几个地方:

  1. 添加如下配置,指定 private 为 false、设置 main、module、types、files等属性:
  1. {
  2. ...
  3. "private": false,
  4. "type": "module",
  5. "main": "./lib/yyg-demo-ui.umd.js",
  6. "module": "./lib/yyg-demo-ui.es.js",
  7. "types": "./lib/yyg-demo-ui/index.d.ts",
  8. "files": [
  9. "./lib",
  10. "package.json",
  11. "README.md"
  12. ],
  13. "exports": {
  14. ".": {
  15. "require": "./lib/yyg-demo-ui.umd.js",
  16. "import": "./lib/yyg-demo-ui.es.js"
  17. }
  18. },
  19. ...
  20. }
  1. 自己修改 author
  2. 在 scripts 中添加发布组件库的命令:
  1. "pub:local": "pnpm publish --registry http://localhost:4873/",
  1. 在项目根目录下添加一份 README.md 文件。

在发布前,如果代码纳入 git 管理,需要提交代码,再执行 pnpm run pub:local。显示如下信息则发布成功:

image

刷新浏览器,可以看到刚才发布的组件库。

3 测试使用组件库

3.1 创建新项目

使用 vite 或 yyg-cli 创建新的 vue 项目:

  1. pnpm create vite

进入新创建的 vue 项目,pnpm install 安装依赖,依赖安装成功后先执行 pnpm run dev 测试项目是否正常运行。

3.2 安装依赖

由于咱们的组件库依赖于 element-plus,故首先安装element-plus:

  1. pnpm install element-plus

由于安装咱自己的组件库需要指定 registry,registry 变了,pnpm 需要重新执行 install:

  1. pnpm install --registry http://localhost:4873/

最后指定 registry 安装咱们的组件库:

  1. pnpm install yyg-demo-ui --registry http://localhost:4873/

3.3 引入组件库

在 main.ts 中引入 element-plus 和 yyg-demo-ui:

  1. ...
  2. import ElementPlus from 'element-plus'
  3. import 'element-plus/dist/index.css'
  4. import YygDemoUi from 'yyg-demo-ui'
  5. createApp(App)
  6. .use(ElementPlus)
  7. .use(YygDemoUi)
  8. .mount('#app')

在 App.vue 中使用组件库中的 foo 组件:

  1. <yyg-foo msg="测试组件库"></yyg-foo>

启动项目,测试运行效果。从浏览器和浏览器 console 中可以看出一切正常。这样组件库便成功发布了。

4 其他说明

  1. 发布到 npmjs 与本地发布的操作一样,registry 需要指定为 https://registry.npmjs.org/
  2. 无论是发布到本地还是 npmjs,如果提示无权限,都可以使用 npm login 先登录:
  1. npm login --registry http://xxxxxx
  1. 再次发布前需要修改版本号。可以使用如下 npm 命令修改版本号:
  1. // 最后一位(patch)版本号加1
  2. npm version patch
  3. // 中间一位(minor)版本号加1
  4. npm version minor
  5. // 第一位(major)版本号加1
  6. npm version major

组件库的打包构建和发布,咱就聊到这里。

感谢阅读本文,如果本文给了你一点点帮助或者启发,还请三连支持一下,了解更多内容工薇号“程序员优雅哥”。

原文链接:https://www.cnblogs.com/youyacoder/p/17108743.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号