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

2023-10-27

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue封装公共组件库并发布到npm库详细教程 的相关文章

  • 如何将typescript添加到Vue 3和Vite项目中

    我的设置 我通过以下方式安装了 Vue 和 Vite创建 vite 应用程序模块 然后将 init vite app 生成的所有包更新为 Vue 和 Vite 的最新 RC 版本 现在我想对我的所有代码使用打字稿 首先我只是玩了一下 然后添
  • Vue / Typescript,获取模块“*.vue”没有导出成员

    我想导出几个接口Component from vue file 基本 vue
  • 如何将子集合添加到 Firestore 中的文档? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 没有关于如何在Firestore中的文档中添加子集合的文档 那么如何使用Web应用程序添加子集合 我尝试了这个但没有成功 如何使用代码
  • 如何在 vue.js 中使用 SVG.js 插件?

    我在用svg js在我的 Laravel 项目中运行vue js 这就是我使用的方式svg js Step 1 安装svg js作为我的 vue 应用程序中的插件 import svgJs from svg js dist svg expo
  • 从可组合项访问引用值

    这是我的 Vue3 应用程序代码
  • 监听 Vue.js 中的自定义事件

    Vue js 非常适合处理浏览器事件 例如click or mousedown 但根本不适用于自定义事件 这是代码 HTML div style display none div div div div div
  • Vue.js - 如何删除 hashbang #!来自网址?

    如何删除哈希爆炸 来自网址 我在 vue 路由器文档中找到了禁用 hashbang 的选项 http vuejs github io vue router en options html http vuejs github io vue r
  • ExpressJS - 提供通用 Nuxt 应用程序和 AngularJS SPA

    我有一个具有以下结构的博客项目 服务器 用 Node Express 编写 管理员 AngularJS SPA public AngularJS SPA 目前 管理部分和公共部分具有相同的域 但管理部分使用不同的子域 这允许我在 Expre
  • Vue 2 转换不起作用

    我不知道我的代码哪里出了问题 这应该是一个简单的过渡 当我单击按钮时 消息显示正确 但只是根本没有发生淡入淡出过渡
  • 关闭 css 、 vue cli 3 webpack 4 的单独块

    我正在使用使用最新版本的 vue cli 3 创建的项目 我使用的是默认配置 我的路由器有很多动态导入的路由 我的 css 和 js 在生产环境中运行时都被分成多个块 虽然 js 的行为是可取的 我的 css 文件非常小 我想关闭 css
  • 部署到 Netlify 时,Nuxt 将 CSS 不透明度编译为 1%,而不是 100%

    我有一个 Nuxt 应用程序 在本地运行得很好 当我将它部署到 Netlify 时 其中yarn generate自动运行 我注意到发生了一些奇怪的 CSS 事情 我有一张具有悬停效果的卡片
  • 页面在 Google Adwords 转化跟踪上重定向

    我有一个表单 人们可以在其中提交数据 然后使用 ajax 将数据发送到服务器 我已将其设置为 Google Adwords 中的转化 下面是我使用过的代码 问题是 当用户提交表单时 在收到响应后 它会重定向回我给出的 URL 我不想重定向
  • Laravel Vue js spa 应用程序

    1 我想知道为什么人们使用两台服务器用 laravel 制作 vuejs SPA 我想我们可以用另一种方式 制定这样的路线 Route get any function return view index gt where any 并让 v
  • 如何设置vite.config.js基本公共路径?

    我正在尝试设置一个base url对于我的开发和生产环境 但是vitejs配置未解决 根据vitejs https vitejs dev config 您可以在配置选项中设置在开发或生产中提供服务时的基本公共路径 当从命令行运行 vite
  • 有没有办法使用 Vue-Router 从动态 URL 中删除目录?

    我为一家保险经纪公司构建了一个 vue js Web 应用程序 其中每个代理人都有自己的网站 该网站是根据他们的个人资料生成的 这就是我的 vue router 索引文件中的链接的样子 path agents id name AgentSi
  • 如何仅显示/隐藏此 bootstrapvue 表的第二列和第三列?

    下面的代码将显示 隐藏 a 中的所有列BootstrapVue桌子 代码的来源就是这里的答案 使用 bootstrap vue 组件和 bootstrap 3 动态显示 隐藏列 https stackoverflow com questio
  • 如果用户在 Laravel 中经过身份验证,如何检查 Vue 组件?

    正如标题所述 我有点困惑如何根据用户是否登录并使用 Laravel 的 Auth 外观进行身份验证 使用 if else 语句处理 Vue 组件中的方法 我正在发出各种 Axios 请求 我需要根据用户是否登录来允许 禁止这些请求 我有 V
  • 如何切换各个
  • 元素的类?
  • 当我切换变量时active在下面的代码中 activeCSS 类应用于列表中的所有元素 从列表中的所有元素中删除 如何单独定位列表元素 Todo List 示例具有类似的功能 待办事项 待办事项已完成 但它有点超出了我的技能范围 ul li
  • 如何在 Vue.js 2 中使用事件总线通过自定义事件传递数据

    我在用着Vue js 2 5 x 在我的玩具项目中 我实现了一个事件总线 类似于所示的here https alligator io vuejs global event bus 事件总线在 Vue 原型中全局注册为 eventBus 然后
  • 删除Vue子组件

    我真的被这个问题困扰了 我创建了一个由子组件组成的 Vue 2 0 组件 它全部都是 Webpacked 等 例如 这是父组件 div h1 This is just a title for lulz h1 div

随机推荐

  • 记录好项目D21

    记录好项目 你好呀 这里是我专门记录一下从某些地方收集起来的项目 对项目修改 进行添砖加瓦 变成自己的闪亮项目 修修补补也可以成为毕设哦 本次的项目是个基于Springboot的教务管理系统 学生管理系统 课表查询系统 一 系统介绍 本项目
  • 使用EventEmitter构建基础的生命周期模型

    使用EventEmitter构建基础的生命周期模型 比如onCreate onUpdate onDestroy 分别在每个阶段console log一条消息 比如说 我们构建一个便签管理的EventEmitter 在onCreate时初始化
  • 献给面试学生 关键字const是什么意思 ESP(译者:Embedded Systems Programming) --Dan Saks概括了const的所有用法

    关键字const是什么含意 答 我只要一听到被面试者说 const意味着常数 我就知道我正在和一个业余者打交道 去年Dan Saks已经在他的文章里完全概括了const的所有用法 因此ESP 译者 Embedded Systems Prog
  • 商品期货的模拟盘能打印交易记录吗(商品期货的模拟盘能打印交易记录吗为什么)

    商品期货模拟盘可以打印交易记录吗 仿真盘没有实际测试过 大家可以自己试试 股指期货模拟交易和股指期货模拟交易有什么区别 您好 开展模拟交易的目的是为了深化对股指期货合约 规则和制度的检验 开展投资者教育活动 在模拟的交易过程中 交易过程 结
  • 【4-3】多彩的声音

    设计和实现一 个Soundable发声接口 该接口具有发声功能 同时还能调节声音大小 Soundable接口的这些功能将由有3种声音设备来实现 他们分别是收音机Radio 随身听Walkman 手机MobilePhone 最后还需设计 个应
  • mac查看电脑ip(在终端输入命令)

    在终端输入命令 ipconfig getifaddr en0
  • 科普:你该认识的四种常见开源许可证

    为什么80 的码农都做不了架构师 gt gt gt 开源早已成为很多科技企业关注的焦点 我们也常会发现部分开源技术后面标注了某种协议 这意味着这些开源代码被框上了某种束缚 或者说这些代码将必须遵循这些规则 否则可能会触及法律 总的来看 如今
  • 【因果推断与机器学习】Causal Inference: Chapter_3

    Identification Introduction 在介绍这节的补充内容呢 我想先引进一个著名的 辛普森悖论 辛普森医生发现了一种新药 这种新药可以降低心脏病发作的风险 于是他开始查找历史的实验数据 他注意到 如果男性患者服用了这种药
  • P1102 A-B 数对

    include
  • 图解python吴灿铭网盘_正版 图解算法 使用Python 吴灿铭 数据结构程序调试方法技巧书数组堆栈链表队列算法书Pytho...

    第1章进入算法的世界1 1 1生活中到处都是算法2 1 1 1算法的定义3 1 1 2算法的条件4 1 1 3时间复杂度O f n 6 1 2常见算法简介7 1 2 1分治法8 1 2 2递归法9 第1章进入算法的世界1 1 1生活中到处都
  • vue后台管理系统(通用模板)

    后台管理通用框架 源码 GitHub 亲测有效 预览地址 目前 包含 动态侧边导航栏渲染 面包屑 通知 主题 富文本等 1 登陆 2 工作台 3 通知 4 主题 5 发邮件 6 通知详情 目前可实现Excel表格下载 请见MarkDown文
  • HoloLens MRTK2.7 Unity2020 URP

    先提供工程下载链接 链接 https pan baidu com s 11LUGRzaTBxWOjUFwjZBKLQ 提取码 8xy6 优点 XR Plugin已经融合了MR AR VR 工程不用修改可以打包不同平台 可以使用ShaderG
  • arm linux ntfs_Linux驱动02

    一 启动过程 上电 gt uboot gt 加载linux内核 gt 挂载根文件系统 gt 执行应用程序 emmm 接下来会对uboot linux内核 跟文件系统分析 二 uboot 1 什么是uboot uboot其实就是一个通用的引导
  • Python打开图像始终提示错误error:(-215) size.width>0 && size.height>0

    用Python打开图像始终提示错误 cv2 error C projects opencv python opencv modules highgui src window cpp 331 error 215 size width gt 0
  • 深度学习之CNN卷积神经网络

    详解卷积神经网络 CNN 卷积神经网络 Convolutional Neural Network CNN 是一种前馈神经网络 它的人工神经元可以响应一部分覆盖范围内的周围单元 对于大型图像处理有出色表现 概揽 卷积神经网络 Convolut
  • DNS over HTTPS来阻止DNS污染

    DNS 域名系统 的主要功能是将域名解析成IP地址 域名的解析工作由DNS服务器完成 从安全角度来看 域名解析的请求传输时通常不进行任何加密 这导致第三方能够很容易拦截用户的DNS 将用户的请求跳转到另一个地址 常见的攻击方法有DNS劫持和
  • 9.多重循环结构和程序调试

    2022 9 3 记录学习java的第九天 今天主要学习了多种循环的嵌套使用和程序调试 1 多重循环 使用方法 1 相同循环可以互相嵌套使用 2 各循环之间可以互相嵌套使用 3 外循环变量改变一次 内循环变量要从头到尾变化一遍 即 内循环是
  • 单链表算法实现, 查找, 删除, 销毁

    从链表的指定位置读取参数 从链表中查找第i个元素 用e来保存查找元素的数据 指定位置读取参数 list 头节点 i 要读取的位置 e 保存读取的元素 bool Link GetElem LinkList list int i int e i
  • 数组的indexOf 方法

    1 数组的indexOf 方法 String 类型的使用 let str orange str indexOf o 0 字符串中出现字母 o 的位置 str indexOf n 3 字符串中出现字母 n 的位置 str indexOf c
  • vue封装公共组件库并发布到npm库详细教程

    vue组件封装的原理 利用vue框架提供的api Vue use plugin 我们需要把封装好组件的项目打包成vue库 并提供install方法 然后发布到npm中 Vue use plugin 的时候会自动执行插件中的install方法