vue封装公共组件库并发布到npm库详细教程

news/2024/5/19 13:49:23/文章来源:https://blog.csdn.net/weixin_45304198/article/details/130317464

vue组件封装的原理:利用vue框架提供的api: Vue.use( plugin ),我们需要把封装好组件的项目打包成vue库,并提供install方法,然后发布到npm中。Vue.use( plugin )的时候会自动执行插件中的install方法。
在这里插入图片描述

一、组件库代码目录

目录调整:参考element-ui

  1. 根目录创建 packages文件夹 – 用于存放所有的组件

  2. 把src改成examples – 用于进行代码测试

  3. 把fonts字符图标文件也放到packages中

  4. 新增vue.config.js配置
    在这里插入图片描述
    在这里插入图片描述

二、配置文件

1. vue.config.js配置

// vue.config.js配置
const path = require('path')
module.exports = {pages: {index: {entry: 'examples/main.js', // 因为我们改了src目录,所以对应的入口文件配置也要做修改template: 'public/index.html',filename: 'index.html'}},// 扩展 webpack 配置,使 packages 加入编译chainWebpack: config => {config.module.rule('js').include.add(path.resolve(__dirname, 'packages')).end().use('babel').loader('babel-loader').tap(options => {// 修改它的选项...return options})}
}

2. packages / index.js 配置

// 统一导出 // 导入颜色选择器组件 
import Button from './button' 
import Dialog from './dialog' 
import Input from './input' 
import Checkbox from './checkbox' 
import Radio from './radio' 
import RadioGroup from './radio-group' 
import Switch from './switch' 
import CheckboxGroup from './checkbox-group' 
import Form from './form' 
import FormItem from './form-item' import './fonts/font.scss'// 存储组件列表 
const components = [ Button, Dialog, Input, Checkbox, Radio, RadioGroup, Switch, CheckboxGroup, Form, FormItem ]// 定义 install 方法,接收 Vue 作为参数。如果使用 use 注册插件,则所有的组件都将被注册 
const install = function (Vue) { // 遍历注册全局组件 components.forEach(component => { Vue.component(component.name, component) }) 
}// 判断是否是直接引入文件,如果是,就不用调用 Vue.use() 
if (typeof window !== 'undefined' && window.Vue) { install(window.Vue)
}// 导出的对象必须具有 install,才能被 Vue.use() 方法安装 
export default { install 
}

三、将组件库打包成vue插件

使用vue cli提供的api,将组件库打包成vue库:官网文档
在这里插入图片描述
我们可以在package.json中增加一条打包命令,将代码打包成vue库:“lib”: "vue-cli-service build --target lib packages/index.js’;
执行命令后,dist目录就已经是vue库
在这里插入图片描述

四、发布到npm库

1. 修改package.json 文件

"private": false,  // 私有属性要改成 false
"main": "dist/xinwei-ui.umd.min.js",  // 指定main属性,作为入口文件,dist目录下的 .umd.min.js文件
"author": {"name": "李四"
},

2. 增加 .npmignore文件,指定忽略文件不被npm管理

# 忽略目录
examples/
packages/
public/# 忽略指定文件
vue.config.js
babel.config.js
*.map

3. 发布到npm库

  1. npm config get registry ---- 检查npm源是不是:https://registry.npmjs.org/,大多数人都改成了淘宝镜像,需要改回来
  2. npm login — 登录npm,没有账号需要注册
  3. npm publish — 发布npm库

发布成功后,过一会可以在官网查看发布的库:https://www.npmjs.com/

其他项目就可以用过npm去安装 封装的组件库,使用方法跟element-ui类似,在main.js中引入

import XinweiUI from 'xinwei-ui'
import 'xinwei-ui/dist/xinwei-ui.css'Vue.use(XinweiUI);

组件库源码地址: https://github.com/zanjing007/xinwei-ui

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

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

相关文章

【Python_Opencv图像处理框架】边缘检测、轮廓检测、图像金字塔

写在前面 本篇文章是opencv学习的第四篇文章,主要讲解了边缘及轮廓检测的主要操作,并对两种图像金字塔简单的介绍了一下,作为初学者,我尽己所能,但仍会存在疏漏的地方,希望各位看官不吝指正😍 …

C语言 sizeof, size_t, strlen

C语言 sizeof, size_t, strlen 文章目录 C语言 sizeof, size_t, strlen一. sizeof1.1 返回结构体长度 二. size_t三. sizeof 和 strlen 一. sizeof 返回一个结构体或者类型所占的内存字节数 1.1 返回结构体长度 这里我编写了2个结构体,区别在于数组问题 #include …

基于本地知识构建简易的chatPDF

Langchain chatglm-6b 文章目录 Langchain chatglm-6b前言一、实验记录1.1 环境配置1.2 代码理解1.3 补充内容 二、总结 前言 介绍:一种利用 ChatGLM-6B langchain 实现的基于本地知识的 ChatGLM 应用 Github: https://github.com/imClumsyPanda/langchain-Chat…

《个人博客部署上线教程一》Halo搭建个人博客网站

Halo搭建个人博客网站 一、docker部署Halo 目前测试了两种方法安装Halo,第一种是使用Jar包安装:提供JAR包资源,不过因为使用jar包部署需要Java11才可以,我本机使用的是Java8,所以暂时不做调整。第二种是通过docker安装。 1.1 启…

if条件语句

if条件语句 条件测试 test 测试表达式是否成立,若成立返回0,否则返回其他数值 格式1 :test 条件表达式;格式2 :[ 条件表达式 ] echo $?参数作用-d测试是否为目录 (Directory)-e测试目录或文件是否存在(Exist)-f测…

【java笔记】java多线程

目录 一、概念 1.1 什么是进程? 1.2 什么是线程? 1.3 什么事多线程? 1.4 进程和线程的关系 二、线程对象的生命周期 三、实现线程有两种方式 3.1 继承 java.lang.Thread,重写 run方法 3.2 实现 java.lang.Runnable 接口…

八、vue_options之computed、watch属性选项

一、computed计算属性使用 (1)复杂data的处理方式 (2)computed 计算属性 computed计算属性初体验: 在我们通过Vue调用createApp方法传入一个对象的时候,我们之前写了data属性、methods属性,这…

HTB-Time

HTB-Time 信息收集80端口 立足pericles -> root 信息收集 80端口 有两个功能,一个是美化JSON数据。 一个是验证JSON,并且输入{“abc”:“abc”}之类的会出现报错。 Validation failed: Unhandled Java exception: com.fasterxml.jackson.core.JsonPa…

低代码是开发的未来,还是只能解决边角问题的鸡肋?

随着互联网行业寒冬期的到来,降本增效、开源节流几乎成为了全球互联网厂商共同的应对措施,甚至高薪酬程序员的“35岁危机”一下子似乎变成了现实。程序员的高薪吸引了各行各业的“跨界选手”,是编程门槛降低了吗?不全是&#xff0…

Linux Ansible管理变量、管理事实、管理机密

目录 Ansible变量 变量定义范围 变量类型 定义变量并引用 事实变量与魔法变量 事实变量 魔法变量 Ansible加密 ansible-vault参数 ansible-vault举例 Ansible变量 Ansible支持利用变量来存储值,并且可以在Ansible项目的所有文件中重复使用这些值 变量可能…

Hadoop3.2.4+Hive3.1.2+sqoop1.4.7安装部署

目录 一、软件包 二、JDK部署 1.JDK解压 2.设置环境变量 3.环境验证 4.分发JDK相关文件至Node_02、Node_03 5.环境生效 三、Zookeeper部署 1.Zookeeper解压 2.Zookeeper配置 3.创建myid文件 4.设置环境变量并添加映射 5.分发ZooKeeper 相关文件至Node_02、Node_0…

Qt — Graphics/View框架

文章目录 前言一、Qt图形系统介绍二、Graphics/View框架 前言 Qt的Graphics/View框架被用来存放、显示二维图形元素,处理那些对图形元素进行操作的交互命令。 一、Qt图形系统介绍 Qt 应用程序的图形界面包含各种控件,比如窗口、按钮、滚动条等。所有这…

【单目标优化算法】沙猫群优化算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

4月24日~4月26日学习总结

一,刷题目情况,已经完成了8道题目,对于其中一些题目做一下题解。 这个题目的意思是找到的两个位置l和r,为了做到这个数组的l到r的子数组经过排序后,会变成输入的另外一个数组,这个题目的思路就是首先找到在…

服务(第十篇)Nginx和tomcat反向代理(动静分离)

正向代理: 当用户想访问某一网址时,用户先访问代理服务器,然后由代理服务器向目标网址发送请求最终将数据返回代理服务器,最后代理服务器将数据返回给用户这一过程我们称之为正向代理。 反向代理:基本流程是与正向代理…

(04)基础强化:接口,类型转换cast/convert,异常处理,传参params/ref/out,判断同一对象

一、复习 1、New的截断是指什么? new除了新开空间创建初始化对象外,还有一个隐藏父类同名方法的作用。 当子类想要隐藏父类同名的方法时用new,用了new后父类同名方法将到此为止,后面 继承的…

centos7部署FastDFS服务

一、安装需要的相关依赖 yum -y install make cmake gcc gcc-c 因为我的服务器已经安装了gcc,所以略去 使用gcc -v查看版本 yum -y install zip unzip 安装性能事件通知库 yum -y install libevent 安装nginx依赖 yum -y install libevent yum -y install zli…

最新版TensorFlow的GPU版本不支持原生Windows系统(大坑预警)

一、前言 首先需要说明,按照官方中文文档安装是无法正常检测到GPU的。因为TensorFlow 2.10是支持原生Windows系统GPU环境的最后版本,默认安装的版本都比较高。 中文文档没有说明,英文文档是有提到的: (我在GitHub上找…

操作系统之进程同步和互斥

目录 什么是进程同步和进程互斥 进程互斥的软件实现方法 进程互斥的硬件实现方法 互斥锁 信号量机制 用信号量实现进程互斥和同步 生产者消费者问题 多生产者多消费者问题 吸烟者问题 读者写者问题 哲学家进餐问题 管程 死锁 什么是进程同步和进程互斥 进程同步 进…

Scala之模式匹配与隐式转换

目录 模式匹配: 基础语法如下: 模式守卫: 类型匹配: 对象匹配 样例类: 偏函数: 偏函数的化简写法: 偏函数的使用: 隐式转换: 官方定义: 个人理解&…