vite构建Vue3项目:封装公共组件,发布npm包,自定义组件库

文章目录

  • 前言
  • 一、创建基础的vite 脚手架
  • 二、文件结构
  • 编写组件代码,本地测试
  • 配置项
  • 打包npm发布
  • npm下载使用
  • 总结


前言

使用vue开发组件封装是一个很普遍的事情了,封装好一个组件可以在项目的任意地方去使用,我们还可以从npm仓库下载别人封装的组件进行使用,比如element-ui,vant,antd,echarts等组件库,但是由于不同的公司,不同的网站风格,是我们在开发中还是得自己封装自己的组件,要想在不同项目上使用自己封装的组件,不可能去旧项目复制组件代码到新的项目里面去。所以我们可以将组件上传到npm仓库,使用的时候直接从npm安装使用。


一、创建基础的vite 脚手架

npm create vite  vite-demo(项目名称) --template vue 
  •   下载依赖:npm i
  •    启动项目:npm run dev

二、文件结构

  • 在根目录下新建一个packages文件夹,文件夹下的分别是zd-vin(自定义名称)和index.js。packages的主要作用就是放我们的公共组件,后续导出的,index.js内将导入zd-vin下的全部组件。

三、编写组件代码,本地测试

  • 在zd-vin文件夹下创建你的第一个组件(zd-Button.vue)
  • <script setup>
    /*** 接收传过来的值** @param size 定义按钮的大小 可选值为 'large' | 'middle' | 'small' | 'mini'* @param type 定义按钮的类型 默认不填*/
    defineProps({size: {type: String,default: "middle",},type: {type: String,default: "default",},
    });
    </script>
    <script>
    export default {name: "zd-Button",
    };
    </script><template><button class="muk-btn" :class="[size, type]"><!-- 定义插槽用于让用户自定义按钮你们的内容 --><slot></slot></button>
    </template><style scoped lang="less">
    .muk-btn {appearance: none;border: none;outline: none;background: #fff;text-align: center;border: 1px solid transparent;border-radius: 4px;cursor: pointer;
    }.large {width: 240px;height: 50px;font-size: 16px;
    }.moddle {width: 180px;height: 50px;font-size: 16px;
    }.small {width: 100px;height: 32px;
    }.mini {width: 60px;height: 32px;
    }.default {border-color: #e4e4e4;color: #666;
    }.primary {border-color: skyblue;background: skyblue;color: #fff;
    }.plain {border-color: skyblue;color: skyblue;background: lighten(skyblue, 50%);
    }.gray {border-color: #ccc;background: #ccc;color: #fff;
    }
    </style>
    

    在package文件下新建index.js用于导出组件

  • import { defineAsyncComponent } from "vue";const components = import.meta.glob("./zd-vin/*.vue");
    const registerGlobalComponent = (app) => {for (const [key, value] of Object.entries(components)) {const name = key.slice(key.lastIndexOf("/") + 1, key.lastIndexOf("."));app.component(name, defineAsyncComponent(value));}
    };export default registerGlobalComponent;
  •  本地测试
    src\main.js注册组件
    import { createApp } from "vue";
    import App from "./App.vue";
    import registerGlobalComponent from "../packages/index";const app = createApp(App);
    registerGlobalComponent(app);
    app.mount("#app");
  • src\App.vue里面去使用按钮
    <template><zd-Button size="small" type="primary">我的按钮</zd-Button>
    </template>
     

四、配置项

  • 在项目的根目录的vite.config.js修改相关配置,修改成组件库打包模式,
    import { defineConfig } from "vite";
    import vue from "@vitejs/plugin-vue";
    import path from "path";// https://vite.dev/config/
    export default defineConfig({plugins: [vue()],build: {outDir: "zd-vin-package", //输出文件名称lib: {entry: "./packages/index.js", //指定组件编译入口文件name: "zd-vin-package",fileName: "zd-vin-package",}, //库编译模式配置rollupOptions: {// 确保外部化处理那些你不想打包进库的依赖external: ["vue"],output: {// 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量globals: {vue: "Vue",},},}, // rollup打包配置},
    });

五、打包npm发布

  • 在终端使用npm run build 如下图所示出现以下文件就打包成功了
  • 发布前还需要做一下准备?

  1. 配置package.json

    首先我们在打包好的zd-vin-package目录下,打开终端,然后执行npm init -y命令初始化package.json

  2. 配置内容

    {"name": "zd-vin-package",   //组件库名称"private": false,       "version": "1.0.0",       //版本号"description": "我创建的第一个组件库", //描述"main": "zd-vin-package.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},//keywords 用来npm 库搜索关键词"keywords": ["zd","zd-vin","ZD","ZD-VIN","zd-vin-package"],"author": "","license": "ISC"
    }
  3. 创建npm 账号
    ​​​​​https://www.npmjs.com/   注册完成记得自己的账号,密码,邮箱,后续发布验证需要邮箱!

  4. 设置npm 源 因为之前大部门朋友设置的是淘宝镜像现在需要恢复成npm源

    npm config set registry=https://registry.npmjs.org
    

     5. 在打包好的文件zd-vin-package下命令行输入

npm adduser

添加自己的账号

打开刚刚邮箱输入验证码

 6. 输入:

npm publish --access=public

发布npm (切记:上面的zd-vin-package一定要自定义名称,文件名称重复会导致发布失败)

如果以上命令无法实现可以尝试使用下面的命令:

npm login
npm publish

发布成功后可以去https://www.npmjs.com/ 查看:


                

六、npm下载使用

可以再次通过vite创建一个项目或者直接在已有项目中安装发布的组件

npm install zd-vin-package


import "zd-vin-package/style.css"; //引入组件样式
import ZD from "zd-vin-package"; //引入下载后的组件const app = createApp(App);
app.use(ZD); //注册

代码中使用

  <zd-Button size="small" type="primary">我的按钮1</zd-Button>

总结

大概就是如此吧!有问题可以评论,私信-----ps写完了,外面雨也下大了;雨一直下,希望大家一切都很融洽~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1013.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

外包功能测试就干了4周,技术退步太明显了。。。。。

先说一下自己的情况&#xff0c;大专生&#xff0c;21年通过校招进入武汉某软件公司&#xff0c;干了差不多3个星期的功能测试&#xff0c;那年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我才在一个外包企业干了4周的功…

基于LORA的一主多从监测系统_实物设计

最近代码写的差不多了&#xff0c;基本一主一从已经定下&#xff0c;并且经过24小时测试还算比较稳定&#xff0c;所以打算把硬件实物定下&#xff0c;之前用的杜邦线&#xff0c;看着也比较杂乱不是很好看&#xff0c;于是打算使用pcb来替代&#xff0c;这样也比较整洁可靠&am…

qt QRadioButton详解

QRadioButton 是一个可以切换选中&#xff08;checked&#xff09;或未选中&#xff08;unchecked&#xff09;状态的选项按钮。单选按钮通常呈现给用户一个“多选一”的选择&#xff0c;即在一组单选按钮中&#xff0c;一次只能选中一个按钮。 重要方法 QRadioButton(QWidget…

三:LoadBalancer负载均衡服务调用

LoadBalancer负载均衡服务调用 1.LB负载均衡(Load Balance)是什么2.loadbalancer本地负载均衡客户端 与 Nginx服务端负载均衡区别3.实现loadbalancer负载均衡实例3-1.首先应模拟启动多个服务提供者应用实例&#xff1a;3-2.在服务消费项目引入LoadBalancer3-3&#xff1a;测试用…

“农田奇迹:如何用遥感技术实现作物分类与产量精准估算“

在科技飞速发展的时代&#xff0c;遥感数据的精准分析已经成为推动各行业智能决策的关键工具。从无人机监测农田到卫星数据支持气候研究&#xff0c;空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。然而&#xff0c;对于许多专业人士而言&#xff0c;如何高效地处…

LeetCode :21. 合并两个有序链表(Java)

目录 题目描述: 代码: 第一种: 第二种: 题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; …

Spring Boot框架在信息学科平台建设中的实战技巧

3系统分析 3.1可行性分析 通过对本基于保密信息学科平台系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本基于保密信息学科平台系统采用Spring Boot框架&a…

「Mac畅玩鸿蒙与硬件26」UI互动应用篇3 - 倒计时和提醒功能实现

本篇将带领你实现一个倒计时和提醒功能的应用&#xff0c;用户可以设置倒计时时间并开始计时。当倒计时结束时&#xff0c;应用会显示提醒。该项目涉及时间控制、状态管理和用户交互&#xff0c;是学习鸿蒙应用开发的绝佳实践项目。 关键词 UI互动应用倒计时器状态管理用户交互…

【升华】自然语言处理架构

自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是指让计算机接受用户自然语言形式的输入&#xff0c;并在内部通过人类所定义的算法进行加工、计算等系列操作&#xff0c;以模拟人类对自然语言的理解&#xff0c;并返回用户所期望的结果。自…

Android OpenGL ES详解——模板Stencil

目录 一、概念 1、模板测试 2、模板缓冲 二、模板测试如何使用 1、开启和关闭模板测试 2、开启/禁止模板缓冲区写入 3、模板测试策略函数 4、更新模板缓冲 5、模板测试应用——物体轮廓 三、模板缓冲如何使用 1、创建模板缓冲 2、使用模板缓冲 3、模板缓冲应用——…

RHCE笔记-DNS服务器

一.DNS简介 DNS&#xff08;域名系统&#xff09;是一种互联网服务&#xff0c;负责将我们熟悉的域名&#xff08;比如 www.example.com&#xff09;转换为计算机能理解的IP地址&#xff08;比如 192.0.2.1&#xff09;。这样&#xff0c;当你在浏览器中输入网址时&#xff0c;…

高效自动化测试,引领汽车座舱新纪元——实车篇

引言 作为智能网联汽车的核心组成部分&#xff0c;智能座舱不仅是驾驶者与车辆互动的桥梁&#xff0c;更是个性化、智能化体验的源泉。实车测试作为验证智能座舱功能实现、用户体验、行车安全及法规符合性的关键环节&#xff0c;能够最直接地模拟真实驾驶场景&#xff0c;确保…

数智税务 | 大企业税务管理,即将面临哪些需求变革?

大企业税务管理&#xff0c;即将面临哪些需求变革&#xff1f; 随着“金税四期”的推进和发票电子化的发展&#xff0c;中国税务机关的税收征管模式逐步从传统的“经验管税”、“以票控税”转向“以数治税”的精准监管模式。这一转变既为大企业供应链加速升级带来了便利&#…

数字IC后端实现之Innovus Place跑完density爆涨案例分析

下图所示为咱们社区a7core后端训练营学员的floorplan。 数字IC后端实现 | Innovus各个阶段常用命令汇总 该学员跑placement前density是59.467%&#xff0c;但跑完place后density飙升到87.68%。 仔细查看place过程中的log就可以发现Density一路飙升&#xff01; 数字IC后端物…

[SAP ABAP] 自定义字段提供F4帮助

在SAP系统中&#xff0c;F4帮助是一个强大的功能&#xff0c;它允许用户在输入字段值时快速搜索和选择数 我们可以通过编写代码来为自定义字段提供F4帮助 程序代码 REPORT z437_test_2024.* 自定义数据类型 TYPES: BEGIN OF ty_mara,matnr TYPE mara-matnr, " 物料编号…

c怎么与python交互

ctypes是Python的一个外部库&#xff0c;可以使用python语言调用已经编译好的C语言函数以及数据类型并进行数据交换等。ctypes的官方文档在https://docs.python.org/3/library/ctypes.html 1、ctypes基本数据类型映射表 2、python调用c语言的函数库 &#xff08;1&#xff09…

ssm042在线云音乐系统的设计与实现+jsp(论文+源码)_kaic

摘 要 随着移动互联网时代的发展&#xff0c;网络的使用越来越普及&#xff0c;用户在获取和存储信息方面也会有激动人心的时刻。音乐也将慢慢融入人们的生活中。影响和改变我们的生活。随着当今各种流行音乐的流行&#xff0c;人们在日常生活中经常会用到的就是在线云音乐系统…

使用TypeORM进行数据库操作

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用TypeORM进行数据库操作 引言 TypeORM 简介 安装 TypeORM 配置 TypeORM 定义实体 连接数据库 运行项目 高级功能 事务管理 关…

【2024】强网杯

web&#xff1a; PyBlockly&#xff1a; ​ 网站是一个通过block的堆积木的形式编程&#xff0c;有两种数据类型以及四种函数&#xff0c;分别是正常运算&#xff0c;print输出&#xff0c;min和max功能&#xff0c;随便写一些代码&#xff0c;发现结果会回显出来。 ​ 再来…

使用 Qt 实现自定义罗盘控件

用 Qt 编写一个简单的罗盘控件&#xff0c;该控件能够动态显示方向。该控件实现了一个带有北&#xff08;N&#xff09;和南&#xff08;S&#xff09;标记的圆形罗盘面盘&#xff0c;具有可以根据输入角度旋转的指针。 代码功能概述 该项目定义了一个 CompassWidget 类&…