使用npm发布自己的组件库

news2024/9/23 0:27:35

在日常开发中,我们习惯性的会封装一些个性化的组件以适配各种业务场景,突发奇想能不能建一个自己的组件库,今后在各种业务里可以自由下载安装自己的组件。

一. 项目搭建

首先直接使用vue-cli创建一个vue2版本的项目,并下载好elementui,这里我们会尝试封装一个适配上万数据的下拉框组件。

二. 组件准备工作

项目搭建完成后我的目录结构大概是这样的
在这里插入图片描述
通常人们喜欢新建一个packages文件夹专门存放组件,例如我们熟悉的element-ui就是如此,但这里我想了想我本身就有一个components文件夹了,干脆就直接使用这个文件夹做我的组件文件夹了,没必要专门单独新建一个。

这里我们需要建一个index.js文件用于组件的注册操作,以下是文件内容

let components = []
const requireAll = require.context("@/components", true, /index\.vue$/)
const modulList = requireAll.keys().map((item) => requireAll(item))
modulList.forEach(({ default: vm }) => {
  components.push(vm)
})

// 全局引入
const install = function (Vue) {
  // 遍历组件列表并注册全局组件
  components.forEach((component) => {
    //component.name 此处使用到组件vue文件中的 name 属性
    Vue.component("Cl" + component.name, component)
  })
}

let exportData = {
  install,
}

// 适配单个引入
components.forEach((component) => {
  component.install = function (Vue) {
    Vue.component("Cl" + component.name, component)
  }
  exportData[component.name] = component
})

export default exportData

简单说下上面的代码

  1. 首先我们创建了一个components数组用来存放我们获取的组件。
  2. 获取组件的方法使用了webpack自带的一写api,可以直接访问到我们指定的文件夹,然后正则匹配出我们需要的组件文件。
  3. 然后写一个install方法用于组件的批量全局注册。
  4. 接着我们map下这个components将所有的组件分别构建一个install方法,这样的话我们就可以拥有全局引用和按需引用两种引用模式了。注意这里按需导入并不能像element-ui那样直接import { Button } from “element-ui”,element-ui可以这样写是因为他使用了babel-plugin-component 插件,可以根据你提供的关键字比如Button去指定文件直接读取,我们要按需导入的话据需要
    import toolsUi from "element-ui"
    Vue.use(toolsUi.组件名称)
    
  5. 最后我们将所有数据直接导出。

三. 构建出发布的包

然后我们需要在package.json里面配置下我们的打包命令,这里我是这样写的

"npmUp": "vue-cli-service build --target lib ./src/components/index.js --name tools_ui --dest tools_ui"
  • vue-cli-service build :对指定文件夹进行打包
  • --target lib:指定构建的目标为库(library)。这将使构建工具以库模式进行构建,生成一个可供他人使用的组件库。
  • ./src/components/index.js:指定入口文件路径。这是你组件库的主要入口文件。
  • --name tools_ui:指定组件库的名称。你的组件库将以 tools_ui 为名称进行构建和导出。
  • --dest tools_ui:指定构建输出的目录。生成的组件库将被输出到名为 tools_ui 的目录中。

然后我们直接执行命令:npm run npmUp

这个时候我们就可以看到我们打包出来的文件夹了
在这里插入图片描述

四. 发布工作

我们在终端cd进入到我们的tools-ui下,然后npm init -y来初始化一个新的 package.json文件,在这个文件里面配置出我们的包信息,例如版本,名称等。然后我们使用npm adduser进行登录操作(一般会校验用户名,密码等),前提是已经在npm上有自己的账号。最后我们使用npm publish进行发布操作。

注意第一次发布而可能会遇到大大小小的问题,例如node版本,npm版本问题,npm登录问题,包名称重复等问题,需要具体问题具体分析,一般他会有对应的提示。

五 使用组件库

我们可以直接npm i 发布库的名称进行下载操作。然后在main.js里面直接引入

import tools_ui from "@code_life/tools_ui"
Vue.use(tools_ui)

当然我们也可以按需加载

import tools_ui from "@code_life/tools_ui"
Vue.use(tools_ui.MuchSelect)

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

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

相关文章

Idear 中签出git项目分支为灰色

--签出git上的项目 git clone git项目地址 --查看目录 $ dir --查看分支 $ git branch -a --签出分支 $ git checkout origin/v1.0 签出后,使用idear打开项目,项目关联git信息

PaaS、 IaaS 和 SaaS 的区别

我感觉我有点捂了 iaas,paas,和saas的区别,以及他们啥意思了 简单说就是,一个公司有很多项目,要管理这些项目,每个项目都有很多组成部分需要管理的地方,例如,存储代码,例…

cmake+OpenCV4.8.0+contrib4.8.0+cuda 12.2编译踩坑

cmakeOpenCV4.8.0contrib4.8.0cuda 12.2编译踩坑 准备工具 cmake (去官网下载)OpenCV 我下载的是官网发布最新的稳定版本对应的源码,官网目前是4.8.0,github下一个(连不上的可以网上找找资源或者科学上网&#xff09…

PHM对复杂控制系统的状态监控及故障诊断

背景 该型号复杂控制系统是由7台各种车辆组成的复杂电子、机械复合系统,这些系统通过数据总线连接在一起,总线数据中既有控制指令数据也有执行响应数据或BIT数据,这些数据可以作为系统健康状态评估或故障诊断的依据,然而在以往类…

【机器学习基础】K-Means聚类算法

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!相对完整的机器学习基础教学! ⭐特别提醒:针对机器学习,特别开始专栏:机器学习python实战…

外汇天眼:每周都能赢奖金?

最近,有不少外汇天眼的用户询问天眼客服,每周举办的外汇天眼模拟比赛是真的能拿到奖金吗?答案是:是的!表现优秀者可瓜分350美金,如果周周参加,周周获得名次,那这个奖金也是能叠加获得…

Re50:读论文 Large Language Models Struggle to Learn Long-Tail Knowledge

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称:Large Language Models Struggle to Learn Long-Tail Knowledge ArXiv网址:https://arxiv.org/abs/2211.08411 官方GitHub项目(代码和实体)&#xf…

GCC 学习

GCC Resource Center for GCC Internalshttps://www.cse.iitb.ac.in/grc/这是个不错资料网站,有兴趣的可以了解下

2023年【A特种设备相关管理(电梯)】考试报名及A特种设备相关管理(电梯)考试试题

题库来源:安全生产模拟考试一点通公众号小程序 A特种设备相关管理(电梯)考试报名参考答案及A特种设备相关管理(电梯)考试试题解析是安全生产模拟考试一点通题库老师及A特种设备相关管理(电梯)操…

软件数字签名是什么?软件数字签名有什么作用?

在当今互联网时代,网络安全威胁日益增加,恶意软件层出不穷,为了防止下载到恶意软件,用户在下载软件时都会确认其是安全可信的。由此,企业需要证明其发布的软件真实可信且未被篡改,如何证明这一点呢&#xf…

数据资产入表规划演示(无形资产路线)

数据“入表”有利于企业盘活数据资产、数据资产的交易定价等,通过数据资产“入表”可以加快数据要素市场化配置,为下一步全国数据市场要素市场建立提供基础支撑。数据资产入表,可以拆解为三步,第一步是入表形成原始资产&#xff0…

修改el-radio-group样式,自定义单选组件

修改el-radio-group样式,自定义单选组件 自定义组件 MyRadioGroup.vue <template><div class"btnsBox"><el-radio-group v-model"activeIndex" change"handleClick"><el-radio-buttonv-for"(item, index) in list&qu…

工作电压范围,转换速率高,相位补偿等特性的双运算放大器芯片D4510的描述

D4510是一块双运算放大器&#xff0c;具有较宽的工作电压范围&#xff0c;转换速率高&#xff0c;相位补偿等特性。电路能在低电源电压下:工作,电源电压范围:双电源为1V-3.5V和单电源电压为2V~7V。 主要特点&#xff1a; ● 低电压工作 ● 转换速率高 ● 动态输…

STM32——STM32Cubemx的学习使用总结

文章目录 一、简介二、STM32Cube IDE与MX区别&#xff1f;三、界面介绍和使用四、使用整体框架 一、简介 STM32CubeMX是一个图形化工具&#xff0c;可以非常容易地配置STM32微控制器和微处理器&#xff0c;以及为ArmCortex-M 内核或部分 Linux 设备树生成相应的初始化C代码&…

网站被攻击怎么办?德迅云安全SCDN为您保驾护航

安全加速&#xff08;Secure Content Delivery Network&#xff0c;SCDN&#xff09;是德迅云安全推出的集分布式DDoS防护、CC防护、WAF防护、BOT行为分析为一体的安全加速解决方案。已使用内容分发网络&#xff08;CDN&#xff09;或全站加速网络&#xff08;ECDN&#xff09;…

服务器数据恢复—OCFS2下raid5磁盘损坏导致阵列崩溃的数据恢复案例

服务器数据恢复环境&#xff1a; IBM某型号存储&#xff0c;6块sas硬盘组建一组raid5&#xff0c;划分一个lun分配给Linux服务器并格式化为OCFS2文件系统&#xff0c;共享给虚拟化使用&#xff0c;存放的数据包括24台liunx和windows虚拟机、压缩包文件和配置文件。 服务器故障…

RedisInsight——redis的桌面UI工具使用实践

下载 官网下载安装。下载地址在这里 填个邮箱地址就可以下载了。 安装使用。 安装成功后开始使用。 1. 你可以add一个地址。或者登录redis cloud 去auto-discover 2 . 新增你的redis库地址。注意index的取值 3。现在可以登录到redis了。看看结果 这是现在 在服务器上执行…

Vue3 源码解读系列(八)——生命周期

生命周期 正常的生命周期 // 注册钩子函数 const onBeforeMount createHook(bm/* BEFORE_MOUNT */) const onMounted createHook(m/* MOUNTED */) const onBeforeUpdate createHook(bu/* BEFORE_UPDATE */) const onUpdated createHook(u/* UPDATED */) const onBeforeUnm…

【ARM Trace32(劳特巴赫) 使用介绍 2.3 -- TRACE32 进阶命令之 参数传递介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 参数传递命令 ENTRY 参数传递命令 ENTRY ENTRY <parlist>The ENTRY command can be used to Pass parameters to a PRACTICE script or to a subroutineTo return a value from a subroutine 使用示例&am…

Android Studio 安装及使用

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…