Vue封装组件并发布到npm仓库

前言

使用Vue框架进行开发,组件封装是一个很常规的操作。一个封装好的组件可以在项目的任意地方使用,甚至我们可以直接从npm仓库下载别人封装好的组件来进行使用,比如iview、element-ui这一类的组件库。但是每个公司的业务场景可能不同,开发人员还是得必须封装自己得组件,如果换了一个项目,那么我们就只能复制组件代码到新的项目里面去了,这样稍显麻烦,其实我们可以将组建上传到npm仓库,要用的时候可以直接从npm安装使用。

总结下来有两点好处:

方面使用,任何项目无缝衔接。可作为开源项目,积累经验。
  1. 环境准备

因为我们此次封装的是Vue组件,所以我们直接在Vue脚手架项目里面进行封装即可。

(1)初始化Vue项目

vue create my-app

(2)运行项目

npm run serve

在这里插入图片描述
在这里插入图片描述

  1. 组件封装
    2.1 新建package文件夹

因为我们可能会封装多个组件,所以在src下面新建一个package文件夹用来存放所有需要上传的组件。
在这里插入图片描述

这里我们打算封装两个组件:pig-button、pig-input,所以在package文件夹下面分别新建了存放两个组件代码的文件夹。
2.2 编写组件代码

这里我们就以pig-button组件为例,任意编写一点代码,代码如下:

//package/pig-button/index.vue
<template><div><button>我是测试按钮</button></div>
</template>
<script>
export default {name: "pig-button", //组件名
};
</script>
<style scoped>
button {width: 100px;height: 50px;display: flex;align-items: center;justify-content: center;border: none;border-radius: 10px;cursor: pointer;
}
</style>

然后我们引用到App.vue组件里面验证一下,看是否组件可用,代码如下:

<template><div id="app"><img alt="Vue logo" src="./assets/logo.png"><pig-button></pig-button></div>
</template><script>
import PigButton from './package/pig-button/index.vue'export default {name: 'App',components: {PigButton}
}
</script><style>
#app {display: flex;justify-content: center;align-items: center;flex-direction: column;
}
</style>

最终效果显示如下:
在这里插入图片描述

2.3 使用Vue插件模式

这一步是封装组件中的重点,用到了Vue提供的一个公开方法:install。这个方法会在你使用Vue.use(plugin)时被调用,这样使得我们的插件注册到了全局,在子组件的任何地方都可以使用。

在package目录下新建index.js文件,代码如下:

//package/index.js
import PigButton from "../package/pig-button/index.vue"; // 引入封装好的组件
const coms = [PigButton]; // 将来如果有其它组件,都可以写到这个数组里// 批量组件注册
const install = function (Vue) {coms.forEach((com) => {Vue.component(com.name, com);});
};export default install; // 这个方法以后再使用的时候可以被use调用

在这里插入图片描述

上传代码主要的的一项工作就是将我们封装好的组件注册为全局组件,用到了Vue.component()方法,当使用Vue.use()时,我们的install方法便会执行。
3. 组件打包

到这里为止,我们的组件封建基本就完成了,当然组件封装成什么样得看自己得业务需求了,接下来我们就需要将组件进行打包了。

修改我们项目得package.json文件,配置打包命令:

"package": "vue-cli-service build --target lib ./src/package/index.js --name pig-ui --dest pig-ui"

在这里插入图片描述

打包命令解释:

--target lib 关键字 指定打包的目录
--name 打包后的文件名字
--dest 打包后的文件夹的名称

然后执行打包命令:

npm run package

打包执行完成后我们项目目录下就会多出一个pig-ui文件夹,存放的是打包后的文件。
在这里插入图片描述

  1. 发布到npm
    4.1 初始化package.json

想要发布到npm仓库,我们还得在pig-ui文件夹下初始化一个package.json文件。进入pig-ui目录,执行命令:

npm init -y

在这里插入图片描述

由于这里我们只是测试,所以我不需要更改package.json文件,如果是生产的话,最好加上版本描述和版本号等等,其中name字段便是我们上传到npm仓库后的名称。
4.2 发布到npm仓库

(1)注册账号

想要发布到npm仓库,就必须要有一个账号,先去npm官网注册一个账号,注意记住用户名、密码和邮箱,发布的时候可能会用到。

(2)设置npm源

有些小伙伴可能本地的npm镜像源采用的是淘宝镜像源或者其它的,如果想要发布npm包,我们得吧我们得npm源切换为官方得源,命令如下:

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

(3)添加npm用户

进入pig-ui目录,添加npm用户,执行命令:

npm adduser

这里会让你填写用户名等等,如果之前设置过即可跳过此步。

(4)发布npm

在pig-ui目录下执行命令:

npm publish

在这里插入图片描述

如果发布失败可能是名字重复了,改了名字即可,发布成功后,我们即可到npm光网上查看自己发布得npm包:
5. 从npm安装使用

直接执行安装命令:

npm install pig-ui-test // 由于名字重复,改了个名字

然后在main.js引用注册,代码如下:

import PigUi from "pig-ui-test";
import "../node_modules/pig-ui-test/pig-ui.css";
Vue.use(PigUi);

这里单独引用了css,就和element-ui一样需要单独引入样式文件。

修改App.vue文件,直接使用组件pig-button,代码如下:

<template><div id="app"><img alt="Vue logo" src="./assets/logo.png"><pig-button></pig-button></div>
</template>
<script>
export default {name: 'App',
}
</script><style>
#app {display: flex;justify-content: center;align-items: center;flex-direction: column;
}
</style>

展示如下:
在这里插入图片描述

到这里我们的组件就封装好了,并且可以直接从npm仓库下载使用。
总结

总体说来Vue组件封装发布到npm仓库整体难度不大,主要是理解Vue的install方法以及打包相关知识,其实最重要的还是如何封装一个适用范围广,扩展性高的公用组件。

转自 会飞的猪

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

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

相关文章

使用css 与 js 两种方式实现导航栏吸顶效果

position的属性我们一般认为有 position:absolute postion: relative position:static position:fixed position:inherit; position:initial; position:unset; 但是我最近发现了一个定位position:sticky 这个可以称为粘性定位。 这个粘性定位的元素会始终在那个位置 <st…

【网络编程】Linux网络编程基础与实战第一弹——网络基础

这里写目录标题 网络基础什么是协议典型协议 分层模型OSI七层模型TCP/IP四层模型 网络应用程序设计模式优缺点具体体现&#xff1a; 网络基础 什么是协议 从应用的角度出发&#xff0c;协议可理解为“一组规则”&#xff0c;是数据传输和数据的解释的规则。 假设&#xff0c;…

nrm,npm源的管理工具

npm手动切换淘宝源 查看当前的仓库 npm config get registry设置成淘宝源 npm config set registry https://registry.npmmirror.com/设置回官方源 npm config set registry https://registry.npmjs.org/手动切换不免不太方便&#xff0c;而且网上很多资料淘宝源还是过期的链接…

Java Spring Boot 自动装配:简化配置和提高开发效率

Spring Boot 自动装配是 Spring Boot 提供的一种特性&#xff0c;它可以根据应用程序的依赖关系和配置信息&#xff0c;自动配置应用程序的各种组件和功能。这样&#xff0c;开发者可以将更多的精力放在业务逻辑的实现上&#xff0c;而不需要手动配置和管理各种组件。 1. 自动…

webpack 3 + Vue2 使用dotenv配置多环境

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、dotenv二、使用步骤1.引入库2.添加.env文件3.修改代理配置4.vue文件中如何使用环境变量 总结 前言 webpack 3 Vue2 使用dotenv方式配置多环境 一、dotenv…

使用dateutil的parser.parse()格式化时间对象

使用dateutil的parser.parse()格式化时间对象 问题背景 由三种字符串格式的时间 datetime 类型&#xff0c;t1 “2023-10-03 17:56:32”date 类型&#xff0c;t2 “2023-10-03”time 类型&#xff0c;t3 “17:56:32” 需求 想要把这三种格式的字符串转换为时间对象&…

P7929 [COCI2021-2022#1] Logičari

P7929 [COCI2021-2022#1] Logičari [P7929 COCI2021-2022#1] Logičari - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 文章目录 P7929 [COCI2021-2022#1] Logičari题目大意思路code 题目大意 给定一棵 n n n 个节点的基环树&#xff0c;现在对树上的节点染色&#xff0c…

为了方便,采用数据库连接池druid

采用数据库连接池听说效率高,想想按原理来说也是。不过对于初学者或兴趣爱好者,它最大的好处在于在各种数据库中间切换方便。开发环境可以用自己熟悉的数据库,生产环境中切换到实际要用的数据库,毕竟我们平时用的很多软件应该有版权问题,当然不用微软软件的人员没有这个困…

UE4和C++ 开发-C++与UMG的交互2(C++获取UMG的属性)

1、...C获取UMG的属性 1.1、第一种方法&#xff1a;通过名称获取控件。 void UMyUserWidget::NativeConstruct() {Super::NativeConstruct();//通过名字&#xff0c;获取蓝图控件中的按钮引用。CtnClic Cast<UButton>(GetWidgetFromName(TEXT("Button_44"))…

Hive实战(03)-深入了解Hive JDBC:在大数据世界中实现数据交互

在大数据领域&#xff0c;Hive作为一种数据仓库解决方案&#xff0c;为用户提供了一种SQL接口来查询和分析存储在Hadoop集群中的数据。为了更灵活地与Hive进行交互&#xff0c;我们可以使用Hive JDBC&#xff08;Java Database Connectivity&#xff09;驱动程序。本文将深入探…

【【萌新的SOC学习之基于BRAM的PS和PL数据交互实验】】

萌新的SOC学习之基于BRAM的PS和PL数据交互实验 基于BRAM的PS和PL的数据交互实验 先介绍 AXI BRAM IP核控制器的简介 AXI BRAM ip核 是xilinx提供的一个软核 这个ip核被设计成 AXI的一个从机接口 用于AXI互联的集成 系统的主设备和本地的RAM进行通信 &#xff08;我们可以通过这…

JS截取url上面的参数

手动截取封装 function getUrlParams(url location.href) {let urlStr url.split(?)[1] || let obj {};let paramsArr urlStr.split(&)for (let i 0, len paramsArr.length; i < len; i) {const num paramsArr[i].indexOf()let arr [paramsArr[i].substring(0,…

Docker快速上手:使用Docker部署Drupal并实现公网访问

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS&#xff0c;适用于各种不同的网站项目&#xff0c;从小型个人博客到大型企业级门户网站。它的学习…

“Python+”集成技术高光谱遥感数据处理与机器学习深度应用

本内容提供一套基于Python编程工具的高光谱数据处理方法和应用案例。涵盖高光谱遥感数据处理的基础、python开发基础、机器学习和应用实践。重点解释高光谱数据处理所涉及的基本概念和理论&#xff0c;在帮助深入理解科学原理。结合Python编程工具&#xff0c;专注于解决高光谱…

数据可视化实战:如何给毛*易的歌曲做词云展示?

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、…

Springcloud笔记(4)-客户端负载均衡Ribbon

Ribbon是一个基于HTTP和TCP的客户端负载均衡工具&#xff0c;不需要独立部署&#xff0c;几乎存在于每一个springcloud构建的微服务和基础设施中。 微服务间调用&#xff0c;API网关的请求转发都通过Ribbon实现。 负载均衡 通常所说的负载均衡都是指的服务端负载均衡&#xf…

离散型制造企业MES管理系统解决方案

随着制造业的快速发展&#xff0c;离散型制造企业面临着越来越多的挑战。多样性、生产批次、工序复杂性以及高度定制化等特点使得企业的生产管理变得越来越复杂。为了提高生产效率和管理效率&#xff0c;许多企业开始寻求合适的解决方案。本文将以离散型制造企业的特点为基础&a…

铁道交通运输运营3D模拟仿真实操提供一个沉浸、高效且环保的情境

VR模拟果蔬运输应急处理场景在农产品物流行业中具有重要的意义。这种模拟技术为农产品运输提供了全新的、更高效和更安全的方式来模拟真实世界的应急情况&#xff0c;帮助操作人员、研究者和管理者更好地理解和应对可能的运输风险措施。 VR模拟果蔬运输应急处理场景可以模拟出各…

Python操作Hive数据仓库

Python连接Hive 1、Python如何连接Hive&#xff1f;2、Python连接Hive数据仓库 1、Python如何连接Hive&#xff1f; Python连接Hive需要使用Impala查询引擎 由于Hadoop集群节点间使用RPC通信&#xff0c;所以需要配置Thrift依赖环境 Thrift是一个轻量级、跨语言的RPC框架&…

嵌入式C语言自我修养《内存堆栈管理》学习笔记

目录 一、Linux环境下的内存管理 二、栈的管理 三、堆内存管理 四、mmap映射区 五、内存泄漏与防范 六、常见的内存错误及检测 C程序中定义的函数、全局变量、静态变量经过编译链接后&#xff0c;分别以section的形式存储在可执行文件的代码段、数据段和BSS段中。当程序运…