基于vue-cli快速发布vue npm 包

一、编写组件

1. 初始化项目并运行
vue create vue-digital-countnpm run serve
2. 组件封装
  • 新建package文件夹

​ 因为我们可能会封装多个组件,所以在src下面新建一个package文件夹用来存放所有需要上传的组件。
​ 当然,如果只有一个组件,直接放到src下面也无可厚非。
在这里插入图片描述

  • 编写组件代码 digitalCount
    可通过正常组件使用流程引入进行开发、调试
<template><div class="module-count-box"> <div v-for="(site, index) in list" :key="index"><div v-if="site.num !== ','" class="site-item"><!-- :style 动态移动距离 --><div class="num-list-box" :style="{ top:'-'+site.top+'px' }"><p v-for="num in numList" :key="num + '-' + Math.random()" class="num-item">{{ num }}</p></div></div><div v-else class="comma-item">,</div></div></div>
</template><script>export default {// 必须要有name属性哦,便于后期组件引入并作为组件名name: 'VueDigitalCount',props: { number: { // 显示的数字type: [Number, String],default: 0},showLength: { // 最长显示多少位数字type: Number,default: 9},autoFillLength: { // 是否自动用0补齐显示的长度type: Boolean,default: true}}, data() { return { list: [], numList: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],} }, watch: {number: {handler(newValue, oldValue) {this.initNumber()},}},mounted() { this.initNumber(true)}, methods: { // 在指定位置添加逗号; 参数是字符串addCommaToStr(str) {let tempArr = str.split('').reverse(); // 实际显示多少位for (let i = tempArr.length - 1; i >= 0; i--) {  if ((i + 1) % 3 === 0) {  tempArr.splice(i + 1, 0, ',');  }  }// 如果最后一个元素为,则删除if (tempArr.at(-1) === ',') {tempArr.pop();}// 反过来展示,变成从后面往前,每隔3位加逗号return tempArr.reverse();},// 给数组计算要偏移的高度calcMoveHeight(dealArr, isReset) {let result = dealArr.map(value => {return { num: value }}); if (isReset) { // 只有第一次需要重置数据result = result.map(item => {return {...item,top: 0}})}let itemHeight = 80; // 每一个元素的高度result.forEach((value, index) => {setTimeout(() => { // value.top = parseFloat((value.num * itemHeight)) || 0; // 使用$set保证数据更新时能触发页面更新this.$set(value, 'top', parseFloat((value.num * itemHeight)) || 0)}, (index === null ? 0 : index) * 150); // 每个元素间隔150ms去计算偏移的距离}); return result;},initNumber(isReset = false) {let fillContent = ''; // 前面填充的字符串(全是0)const numStr = this.number.toString(); // 将props转成字符串let showNumber = numStr; // 最终展示的字符串,默认就是传过来的数据if (this.autoFillLength) { // 需要自动填充if (numStr.length < this.showLength) { // 小于指定显示的位数fillContent = new Array(this.showLength - numStr.length).fill(0).join(''); // 生成指定位数的0的数组并转化为字符串}showNumber = fillContent + showNumber; // 在前面填充0,达到指定位数}// 通过方法,往字符串里添加逗号const resultArr = this.addCommaToStr(showNumber);// 计算每个数字需要滚动的距离this.list = this.calcMoveHeight(resultArr, isReset);},} }
</script><style scoped>
.module-count-box {display: flex;
}
.module-count-box .site-item { width: 66px; height: 80px; overflow: hidden;text-align: center; display: flex;margin: 0 4px; background: url("@/assets/count_num_bg.png") no-repeat;background-size: 100% 100%; position: relative; 
}
.module-count-box .site-item .num-list-box {position: absolute; top: 0; left: 0; transition: all 1.5s ease-in-out 0s;/* top: -80px; */
} 
.module-count-box .site-item .num-list-box > .num-item {width: 66px; height: 80px; font-size: 56px;font-weight: 600;display: flex;justify-content: center;align-items: center;margin: 0px;color: #fff
}.module-count-box .comma-item {font-size: 100px;color: #BBD7FF;margin-top: -26px;
}
</style>
3. 使用vue插件模式

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

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

// 1. 引入组件
import VueDigitalCount from './digitalCount';// 2. 用数组保存组件,便于遍历
const components = { VueDigitalCount };// 3. 定义 install 方法,接收 Vue 作为参数。如果使用 use 注册插件,则所有的组件都将被注册
const install = function (Vue) {// 判断是否安装if (install.installed) return;install.installed = true; //标识已经安装// 遍历并注册全局组件Object.keys(components).forEach(key => {Vue.component(key, components[key]);});
}// 对于那些没有在应用中使用模块化系统的用户(如在html中直接使用vue),他们往往将通过 <script> 标签引用你的插件,并期待插件无需调用 Vue.use() 便会自动安装 
// 添加如下几行代码来实现自动安装:
if (typeof window !== 'undefined' && window.Vue) {install(window.Vue)
};// 4. 导出组件
// 将每个组件导出,便于不全局注册时,单个使用component注册为页面级组件
export {VueDigitalCount
};// 导出install方法,用于vue.use 注册全局插件
export default install;

二、使用 vue-cli 打包库

首页,来看看官网的描述:构建模板 - 应用
在这里插入图片描述

注意: css: { extract: false } 这个配置;

因为vue-cli默认打包后是将css抽离出来成为一个单独的文件;所以在使用的时候就需要单独将css引入,相对麻烦。类似element-ui有这么一步:

import 'element-ui/lib/theme-chalk/index.css';
1. 修改 package.json 文件,在scripts配置打包命令
"package": "vue-cli-service build --target lib ./src/package/index.js --name vue-digital-count --dest dist"

打包命令解释:

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

打包后的文件如下:
因为我在 vue.config.js 配置了 css: { extract: false };所以没有单独的css文件

在这里插入图片描述

修改package.json 其他配置,适用于npm发包
  • 重要:新增配置入口文件 mian ,使用umd.min.js(适用于所有平台)
  • 去除 "private": true, private字段可以防止我们意外地将私有库发布到npm服务器。只需要将该字段设置为true
  • 新增 authorlicensekeywordsdescriptionrepositoryhomepage 等字段,没有的可以不用配置
    在这里插入图片描述

配置详情:

{// 发布的包名,默认是上级文件夹名。不得与现在npm中的包名重复。包名不能有大写字母/空格/下滑线!"name": "#####",// 版本号,每次要更新"version": "1.0.0",// 包的描述"description": "仅供测试,别下载",// 文件入口,默认是 index.js,可修改"main": "index.js","scripts": {// 测试命令,可以不填直接回车"test": "echo \"Error: no test specified\" && exit 1"},// 作者名称"author": "###",// 包遵循的开源协议,默认是ISC"license": "ISC",// 因为组件包是公用的,所以 private 为 false"private": false,// 当前包需要依赖的第三方组件,如何安装使用依赖包,可以看看文章顶部的NPM命令介绍文章"dependencies": {},// "devDependencies": {}// 指定代码所在的仓库地址"repository": {"type": "git","url": "https://github.com/dengzemiao/DZMFullPage.git"},// bug在哪里提"bugs": {"url": "https://github.com/dengzemiao/DZMFullPage/issues"},// 项目官网的地址"homepage": "https://github.com/dengzemiao/DZMFullPage",// 指定打包后,包中存在的文件夹"files": ["dist","src"],// 指定了项目的目标浏览器的范围"browserslist": ["> 1%","last 2 versions","not ie <= 8"],// 项目关键词,供搜索"keywords": ["测试"]
}

三、上传至 npm

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

1. 设置npm源

如果本地npm采用的是淘宝镜像源或者其它,需要改成 npm 官方源

npm config set registry=https://registry.npmjs.orgnpm 查看使用的包源是哪一个:`npm config get registry`
2. 添加npm用户

进入 vue-digital-count 目录,执行命令:

npm adduser

需要输入账号、密码、邮箱和邮箱验证码;第一次才需要
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e5318c9d1e5e4fd5a6

3. 发布
npm publish

发布包前最后提前在npm官网查询报名是否重名,避免发布失败。发布成功后即可到npm官网上查看自己发布的npm包。

4. 更新包

修改package.json文件里面的version字段,然后重新 npm publish 即可

文章仅为本人学习过程的一个记录,仅供参考,如有问题,欢迎指出!

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

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

相关文章

【科普知识】什么是步进驱动器、驱动模式及驱动的方法?

我们已经知道步进电机就是一种将电脉冲信号转化为角位移的执行机构。那么如何精准地控制电机的速度和位置呢&#xff1f;这就需要一种驱动器的装置。 1.什么是步进驱动器&#xff1f; 电机控制原理图 步进驱动器是一种能使步进电机运转的功率放大器&#xff0c;能把控制器发来…

Linux(二)常用命令

文章目录 一、文件管理命令1.1 chmod1.2 chown1.3 cat1.4 cp1.5 find1.6 head1.7 tail1.8 less1.9 more1.10 mv1.11 rm1.12 touch1.13 vim1.14 >和>>1.15 scp1.16 ln1.17 怎么用命令查看日志 二、文档管理命令2.1 grep2.2 wc2.3 echo 三、磁盘管理命令3.1 cd3.2 df3.3…

Observability:捕获 Elastic Agent 和 Elasticsearch 之间的延迟

在现代 IT 基础设施的动态环境中&#xff0c;高效的数据收集和分析至关重要。 Elastic Agent 是 Elastic Stack 的关键组件&#xff0c;通过促进将数据无缝摄取到 Elasticsearch 中&#xff0c;在此过程中发挥着至关重要的作用。 然而&#xff0c;显着影响此过程整体有效性的关…

[CVPR 2023:3D Gaussian Splatting:实时的神经场渲染]

文章目录 前言小结 原文地址&#xff1a;https://blog.csdn.net/qq_45752541/article/details/132854115 前言 mesh 和点是最常见的3D场景表示&#xff0c;因为它们是显式的&#xff0c;非常适合于快速的基于GPU/CUDA的栅格化。相比之下&#xff0c;最近的神经辐射场&#xf…

基于Java+Swing实现大鱼吃小鱼小游戏(含用户登陆、注册功能)

基于JavaSwing实现大鱼吃小鱼小游戏 一、系统实现二、功能展示1.效果演示2.游戏界面3.游戏运行界面4.用户登陆 三、其他系统四源码下载 一、系统实现 1、创建窗口对象Ui 2、背景的绘制 3、键盘的监听事件 4、将己方鱼放上去 5、让小鱼移动 6、其他的鱼并引导&#xff08;先创建…

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表) -- 自动生成

一、插件 Settings... 1.1 File -- Settings 1.2 Settings -- Plugins 1.2.1 搜索框&#xff0c;也可以直接搜索 1.3 Plugins -- 【输入 & 搜索】mybatis 1.3.1 插件不同功能介绍 1.3.2 翻译如下 1.4 选中 Update&#xff0c;更新下 1.4.1 更新中 1.4.2 Restart IDE 1…

前端vue keyframes动画

8.1.2 keyframes动画 transition动画适合用来创建简单的过渡效果。CSS3中支持使用animation属性来配置更加复杂的动画效果。animation属性根据keyframes配置来执行基于关键帧的动画效果。新建一个名为keyframes.vue的测试文件。编写如下代码&#xff1a; <template><…

连获4大奖项,欧科云链成Web3行业领跑者

2023年底&#xff0c;作为深耕区块链大数据且持续关注监管与合规科技的Web3企业&#xff0c;欧科云链连续斩获4大奖项&#xff0c;包括第十三届中国证券金紫荆奖、财联社“最具创新价值奖” 、界面新闻“优致雇主奖”与“好公司50”&#xff0c;成为中国Web3领域中最受关注的企…

利用Matplotlib画简单的线形图

实验题目&#xff1a;简单的线形图 实验目的&#xff1a;利用Matplotlib画简单的线形图 实验环境&#xff1a;海豚大数据和人工智能实验室&#xff0c;使用的Python库 名称 版本 简介 numpy 1.16.0 线性代数 Pandas 0.25.0 数据分析 Matplotlib 3.1.0 数据可视化 …

「工业遥测」图表控件LightningChart在水工业中的应用

LightningChart.NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学…

实在智能成功完成近2亿元C轮融资,全面迎接2024年Agent智能体应用元年

在这个最冷的季节&#xff0c;杭州实在智能科技有限公司&#xff08;以下简称“实在智能”&#xff09;依然表现火爆&#xff0c;近日&#xff0c;实在智能成功完成C轮融资近2亿元人民币&#xff0c;由金泰富资本和安吉智慧谷共同领投、安吉两山国创跟投。 在此轮融资以前&…

Kubernetes pod ip 暴露

1. k8s pod 和 service 网络暴露 借助 iptables 的路由转发功能&#xff0c;打通k8s集群内的pod和service网络&#xff0c;与外部网络联通 # 查看集群的 pod 网段和 service 网段 kubectl -n kube-system describe cm kubeadm-config networking:dnsDomain: cluster.localpod…

Gazebo GUI模型编辑器

模型编辑器 现在我们将构建我们的简单机器人。我们将制作一个轮式车辆&#xff0c;并添加一个传感器&#xff0c;使我们能够让机器人跟随一个斑点&#xff08;人&#xff09;。 模型编辑器允许我们直接在图形用户界面 &#xff08;GUI&#xff09; 中构建简单的模型。对于更复…

NCV8460ADR2G在汽车和工业应用中高压侧驱动如何破?

NCV8460ADR2G是一款完全保护的高压侧驱动器&#xff0c;可用于开关各种负载&#xff0c;如灯泡、电磁阀和其他致动器。该器件可以通过有源电流限制和高温关断针对过载情况进行内部保护。 诊断状态输出引脚提供了高温以及开关状态开路负载情况的数字故障指示。 特性&#xff1a;…

Leetcod面试经典150题刷题记录 —— 矩阵篇

矩阵篇 1. 有效的数独2. 螺旋矩阵Python 3. 旋转图像Python额外开辟数组空间原地置换法 4. 矩阵置零5. 生命游戏Python 1. 有效的数独 题目链接&#xff1a;有效的数独 - leetcode 题目描述&#xff1a; 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验…

Android的组件、布局学习

介绍 公司组织架构调整&#xff0c;项目组需要承接其他项目组的android项目&#xff0c;负责维护和开发新需求&#xff0c;故学习下基础语法和项目开发。 组件学习 Toolbarheader布局部分 就是app最顶部的部分 他的显示与否&#xff0c;是与F:\androidProject\android_lear…

FPGA模块——以太网(1)MDIO读写

FPGA模块——以太网MDIO读写 MDIO接口介绍MDIO接口代码&#xff08;1&#xff09;MDIO接口驱动代码&#xff08;2&#xff09;使用MDIO驱动的代码 MDIO接口介绍 MDIO是串行管理接口。MAC 和 PHY 芯片有一个配置接口&#xff0c;即 MDIO 接口&#xff0c;可以配置 PHY 芯片的工…

在Portainer创建Nginx容器并部署Web静态站点实现公网访问

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;…

Android: Ubuntu下交叉环境编译常用调试工具demo for lspci命令(ARM设备)

lspci命令交叉环境编译(ARM设备) 交叉编译工具下载&#xff1a; https://releases.linaro.org/components/toolchain/binaries https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/ lspci命令交叉环境编译(ARM设备)&#xff1a; 1&a…

算法训练营Day22

#Java #回溯 开源学习资料 Feeling and experiences&#xff1a; 进入到回溯算法的章节&#xff0c;在代码随想录中有详细的回溯算法理论基础 在此总结归纳&#xff1a; 刚开始接触到回溯时&#xff0c;看到了终止条件&#xff0c;递归调用.....等&#xff0c;发现了其与递…