对封装好的Vue组件库进行打包,并发布到npm上

news2024/11/18 10:22:55

1. 新建vue 项目

在这里插入图片描述
并且在根目录创建两个文件夹 packagesexamples

packages:用于存放所有的组件
examples:用于进行测试组件,把src改为examples
在这里插入图片描述
在这里插入图片描述

2.配置vue.config.js 并设置入口文件

如果没有vue.config.js文件 就需要在项目根目录下创建vue.config.js文件,并进行如下配置。

  1. 设置entry属性将入口文件设置为examps下的main.js文件
  2. 通过chainWebpack对于项目进行配置,使用babel处理将高版本语法转成低版本语法,在我们封装组件库时,这部分配置可以直接复制使用。
const { defineConfig } = require('@vue/cli-service')
// module.exports = defineConfig({
//   transpileDependencies: true
// })

const path = require('path')
module.exports = defineConfig({
  transpileDependencies: true,
  pages:{
    index:{
      // 修改项目入口文件
      entry:'examples/main.js',
      template:'public/index.html',
      filename:'index.html'
    }
  },
  // 扩展webpack配置,使webpages加入编译
  chainWebpack: config => {
    config.module
    .rule('js')
    .include.add(path.resolve(__dirname,'packages')).end()
    .use('babel')
    .loader('babel-loader')
    .tap(options => {
      return options
    })
  }
})

在这里插入图片描述

3.在packages 目录下新建 index.js,默认导出一个install方法

  1. 我们将所有的组件和字体图标引入到index.js文件中
  2. 声明conpoments数组,将组件全部放到这个数组中
  3. 定义install方法,在Vue中注册所有的组件
  4. 判断是否直接引入了文件,如果引入了,则不需要调用Vue.use()方法(这一步可以让那些通过script导入的,无需Vue.use())
  5. 最后导出install对象
    在这里插入图片描述
// 整个包的入口
// 统一导出
// 导出颜色选择器组件
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/iconfont.css'
 
const components = [
  Button,
  Dialog,
  Input,
  Checkbox,
  Radio,
  RadioGroup,
  Switch,
  CheckboxGroup,
  Form,
  FormItem
]
// 定义install方法
const install = function (Vue) {
  // 遍历注册所有的组件
  components.forEach(component => {
    Vue.component(component.name, component)
  })
}
// 判断是否直接引入文件,如果是,就不用调用Vue.use()
if (typeof window !== 'undefined' && window.Vue) {
  install(window.Vue)
}
// 导出install方法
export default {
  install
}

4.打包组件库

vue-cli给开发者提供了很多构建目标的命令,我们可以将我们的vue项目构建成应用、库或者Web Components组件。

构建成库在vue-cli官方文档中找到如下命令:

vue-cli-service build --target lib

package.json文件中的script下加入该条指令,并且指定打包路径为 packages/index.js
在这里插入图片描述

"lib":"vue-cli-service build --target lib packages/index.js"

打包 命令如下:

npm run lib

打包成功后,得到如下文件,其中有不同规范下的js文件
在这里插入图片描述

5.上传到github

在github新建一个仓库
在这里插入图片描述

第一步、使用git status命令查看git状态

git status

第二步、使用git add命令提交路径下文件

git add .

第三步、 使用git commit -m ‘上传组件’ 命令填写 上传描述

git commit -m '封装组件并上传到github'

第四步、使用 关联远程仓库并上传代码到远程仓库中
在这里插入图片描述

git remote add origin https://github.com/RanGuMo/moran-ui.git
git branch -M main
git push -u origin main

github项目地址:https://github.com/RanGuMo/moran-ui

6.将组件库上传到npm

第一步、设置package.json中的配置项

如果想把包发布到npm上,package.json中的private必须为fasle,并且name必须为npm上没有的包,否则不能上传,同时我们可以指定入口文件 "main": "dist/moran-ui.umd.min.js"
也可以添加个人信息
在这里插入图片描述
第二步、在项目的根目录下增加一个.npmignore文件

这个文件的作用是将一些不需要上传到npm的路径、文件进行忽略,我们在上传到npm时就不会把这部分上传了。只上传dist路径下的打包文件,不需要上传源码。
在这里插入图片描述

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

第三步、上传到npm

  1. 如果安装了nrm,需要保证当前的源时是npm
    在这里插入图片描述

  2. 使用npm login 登录,注意,需要注册npm 账号

  3. 使用npm publish命令直接发布到npm

  4. 进入npm官网直接搜索package.json 中指定的name属性值,我这里是moran-ui,所以就搜索moran-ui

  5. 进入npm官网直接搜索name属性指定的包名就可以找到了
    在这里插入图片描述

  6. 注意,如果需要再次上传到npm ,需要修改 package.json 中的版本号version
    在这里插入图片描述

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

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

相关文章

数说故事@FBIC丨首发食饮SMI社媒心智品牌榜,为品牌支招紧跟健康新风尚

第八届Foodaily创博会(FBIC全球食品饮料创新大会)于5月14-16日在上海跨国采购会展中心圆满落幕,呈现了一场食品饮料行业盛会。数说故事与众多食饮健康品牌一起,走过了一段大数据AI加持的创新之旅。 数说故事VP孙淑娟Jessie受邀分享…

Android APP 集成系统签名

由于android 系统权限限制,很多时候普通APP权限无法完成,需要系统APP才有足够的权限, 比如:安装、卸载应用,重启设备,恢复出厂设置,以及设置里面的一些功能,都是需要系统权限才能调…

【WLAN网络故障,带你搞定它!】

01 无线网卡搜索不到 AP的无线信号 01 问题现象 无线网卡搜索不到 AP 的无线信号 02 问题分析 无线网卡搜索不到 AP 的信号 ,原因可以从两方面着手: 1.无线网卡 AP本身 在遇到该问题的时候,我们可以从以上两个方面进行处理。 03 处理过程 1.无线…

Python GUI编程:使用wxPython处理长文本

这段代码的应用场景有: 在文本编辑器和IDE等应用程序中,可以使用这个示例代码来处理长文本,以便用户更好地查看和编辑文本。在数据分析和科学计算等领域中,可以使用这个示例代码来显示和处理大量的数据和结果。在日志分析和系统监…

解决方案 TestCenter自动测试软件平台

方案概述 TestCenter是一个专为加速您的测试系统软件开发而设计的自动测试系统软件平台,主要应用于测试程序的开发、运行和管理。TestCenter实现了对测试资源管理、测试程序开发与调试、测试数据管理以及测试程序发布等功能的无缝集成和统一部署,这将帮…

Google I/O 2023 推出Flutter 3.10 快来看看都有哪些变化

本文首发自[慕课网] ,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"及“慕课网公众号”! 作者: CrazyCodeBoy |慕课网名师 今年的Google I/O满满的 AI与狠活,而且还推出 Flutter 3…

Flutter一天一控件之ListTile(列表的实现)

ListTile简介 Flutter中的ListTile控件是一种常用的列表项控件,它可以用于显示列表中的每一个项,通常包含标题、副标题、图标等内容。ListTile控件的外观和行为类似于Android中的ListView中的列表项。 一个简单的ListTile示例: ListTile(l…

大流量卡介绍:网上的大流量卡都是怎么来的?

大流量卡介绍,你知道网上的大流量卡都是怎么来的? 其实,网上29元155G、39元180G的优惠套餐,本身都是我们常见的流量卡如电信星卡、联通王卡、移动花卡等等,之所以这么便宜,只不过运营商在这些套餐上面增加…

【新星计划】数据库 排名函数 初识

数据库 排名函数 初识 查询排序初识排名函数row_number()rank()dense_rank()ntile()percent_rank() 开窗函数为聚合函数使用开窗函数 小结 查询排序 在日常工作中,我们对所有需要的数据都会进行一个排序操作,以获得我们最需要的数据。 排序指令 order …

Unreal Niagara粒子入门1

记录下学习Niagara粒子的过程,这次调的是比较简单的一个效果: 使用了随粒子生命的缩放、打开速率解算、基本的发射器和Niagara容器。 1.创建Niagara Niagara中,发射器和NiagaraSystem文件是可以分开创建的: 通常直接点Niagara…

GPT-2(Transformer Decoder)的TensorFlow实现(附源码)

文章目录 一、GPT2实现步骤二、源码 一、GPT2实现步骤 机器学习模型的开发实现步骤一般都包含以下几个部分:   1. 遵照模型的网络架构,实现每一层(Layer/Block)的函数;   2. 将第1步中的函数组合在一起&#xff0c…

微信小程序nodejs+vue校园快递代拿系统uniapp校园互助系统

语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 平台旨在解决目前大学生找人帮忙,难,慢,不可靠以及想兼职同学找不到好的平台的问题。对于招人帮忙的…

应急演练脚本编写的几个步骤

应急演练是一项非常重要的活动,对于保障企业的安全和稳定运行至关重要。而一个完整的应急演练需要编写一个详细的脚本来指导演练过程。以下是应急演练脚本编写的几个步骤。 定义演练场景 首先,需要定义演练场景,这将决定演练的目标和方向。在…

美国原装二手 SR560 低噪声电压前置放大器

Stanford Research SR560低噪声电压前置放大器 ​Stanford Research SR560 是一款高性能、低噪声前置放大器,适用于各种应用,包括低温测量、光学检测和音频工程。 SR560 具有一个具有 4 nV/√Hz 输入噪声和 100 MΩ 输入阻抗的差分前端。完整的噪声系数…

三招教你图片文字转语音怎么转

随着数字化时代的到来,人们对于数字信息的获取和处理需求越来越大,而图片文字转语音技术正是为了满足这一需求而诞生的。这项技术不仅可以辅助视力障碍者,让他们能更轻松地获取信息和理解内容,而且也可以帮助正在学习外语的人们练…

Menards EDI对接流程

Menards是一家美国的家居建材零售商,成立于1962年,总部位于美国威斯康星州的伊甸谷市。该公司经营各种家居建材产品,包括木材、地板、墙纸、厨房卫浴用品等,并拥有超过300家门店,分布在美国中西部和北部地区。Menards的…

2023智能座舱新趋势洞察

两年一度的上海车展于4月底正式落幕,怿星科技市场总监老崔率团队奔赴考察,经过多日分析整理,围绕车展发布车型为核心,制作了怿星科技2023智能座舱趋势洞察报告,现将报告分享如下。 01 车展简述 汽车行业进入新时代 本…

DVB-S中卫星通信系统的基带仿真(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 ​数字视频广播(DVB)在卫星通信数字多媒体业务领域应用广泛,其一般采用MPEG-2编码、数字传输和纠错处理等通用技术,然而,当第三方…

LeetCode 117. 填充每个节点的下一个右侧节点指针 II

117. 填充每个节点的下一个右侧节点指针 II 描述 给定一个二叉树: struct Node {int val;Node *left;Node *right;Node *next; }填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 …

csgo搬砖人必知:未来csgo饰品会一路走低吗?市场回暖到底还要多久?

csgo搬砖人必知:未来csgo饰品会一路走低吗?市场回暖到底还要多久? 最后一届巴黎major终于落下帷幕,Vitality小蜜蜂2-0战胜GL成功赢下本次Major冠军,也是首次夺得Major冠军!有人欢喜有人忧啊,cs…