从零开始发布你的第一个npm插件包并在多项目中使用

引言

        在开源的世界里,每个人都有机会成为贡献者,甚至是创新的引领者。您是否有过这样的想法:开发一个解决特定问题的小工具,让她成为其他开发者手中的利器?今天,我们就来一场实战训练,学习如何将你的代码打包成npm插件包,发布到全球最大的JS包管理平台–npm上。让全世界的其他开发者受益于你的智慧吧。
         我将自己编写的常用组件,工具模块,指令,常用的api库,框架等代码为了更好的复用,灵活的管理,上传到了npm库中进行了管理,更新,迭代。

准备工作

  1. 准备好node.js环境>>>>
  2. 创建一个干净的项目环境>>>>防止打包组件过程中受到其package.json的干扰 vue create 项目名称

步骤一、目录文件创建、组件写入、本地运行自测

一、 根据个人习惯,创建一个package文件,用于存放你的组件及其API方法。从零开始发布你的第一个npm插件包
目录介绍
从零开始发布你的第一个npm插件包并使用
二、封装一个简单组件demo,下面为基于elementUI封装的一个开关组件。

<template><div class="custom-switch" @click="switchClick"><div :class="isCenter?'switch-box':''" v-loading="loading">开关 <el-switch class="switch-item" v-bind="$attrs"></el-switch></div></div>
</template><script>
export default {name: "hsk-switch",props: {loading: {default: false,type: Boolean,},isCenter: {default: false,type: Boolean,},},data() {return {};},created() {},mounted() {},methods: {switchClick() {// 如果禁用和loading状态,不emit给父组件if (this.$attrs.disabled || this.loading) {return;}this.$emit("switchClick", this.$attrs.value);},},
};
</script>
<style scoped>
.custom-switch{width: 40px;
}
.switch-box {display: flex;display: -webkit-flex;justify-content: center;align-items: center;
}
</style>
<!-- <template><div @click="switchClick"><el-switchv-model="localValue":active-value="activeValue":inactive-value="inactiveValue":active-color="activeColor":inactive-color="inactiveColor":disabled="disabled"@change="handleChange"></el-switch></div>
</template><script>
export default {name: "hsk-switch",props: {value: {type: [String, Number, Boolean],default: false,},activeValue: {type: [String, Number, Boolean],default: true,},inactiveValue: {type: [String, Number, Boolean],default: false,},activeColor: {type: String,default: "#13ce66",},inactiveColor: {type: String,default: "#ff4949",},disabled: {type: Boolean,default: false,},},data() {return {localValue: this.value,};},watch: {value: {handler(newVal) {this.localValue = newVal;},immediate: true,},},methods: {switchClick(){this.$emit('switchlick', this.$attrs.value)},handleChange(newStatus) {// 当开关发生变化时,更新本地状态this.localValue = newStatus;this.$emit("change", this.localValue);},},
};
</script><style scoped>
/* 可以添加样式进行定制 */
</style> -->

三、封装好组件后,进行本地项目调用查看是否可以使用。

<template><div><HSKSwitch v-model="flg" :isCenter="false" @switchClick="handleStatusChange" :active-value="1":inactive-value="0"></HSKSwitch></div>
</template><script>
import HSKSwitch from "../package/hsk-switch/index.vue"
export default {name:"hskSwitch",components:{HSKSwitch},data(){return {flg:1,}},methods:{//开关handleStatusChange(){console.log("被执行了")// this.switchLoading = true// 这里就可以调用接口,接口成功后修改值和loading状态setTimeout(() => {this.flg = !this.flg ? 1 : 0// this.switchLoading = false}, 100)}}
}
</script><style></style>

本地项目调用预览效果:
从零开始发布你的第一个npm插件包并在多项目中使用

步骤二、组件封装好自测通过进行组件的批量导出

四、在package目录下创建一个index.js文件,用于注册或批量注册已封装好的组件和方法。
从零开始发布你的第一个npm插件包并在多项目中使用
代码

//package/index.js
import HskTable from "./hsk-table/index.vue"; // table组件
import HSKPagination from "./hsk-pagination/index.vue"; // table下的分页组件
import HSKSwitch from "./hsk-switch/index.vue"  //开关组件
import HSKDialog from "./hsk-dialog/index.vue"
import HSKSelect from './hsk-select/index.vue'
import HSKTreeSel from './hsk-treeSelect/index.vue'
import HSKTime from './hsk-time/index.vue'
import HSKAddressSel from './hsk-addressSel/index.vue'
// import * as hskMsgbox from "./pop-up.js"
const coms = [HskTable,HSKPagination,HSKSwitch,HSKDialog,HSKSelect,HSKTreeSel,HSKTime,HSKAddressSel]; // 将来如果有其它组件,都可以写到这个数组里// 批量组件注册
const install = function (Vue) {coms.forEach((com) => {Vue.component(com.name, com);});
};
// 判断是否是直接引入文件
if (typeof window !== "undefined" && window.Vue) {install(window.Vue);
}
export default {// 导出的对象必须具有 install,才能被 Vue.use() 方法安装install,// 以下是具体的组件列表HskTable,HSKPagination,HSKSwitch,HSKDialog,// hskMsgbox,HSKSelect,HSKTreeSel,HSKTime,HSKAddressSel
};

步骤三、改造组件所在项目中的package.json文件,并执行打包

一、创建hskui打包存放文件夹,用于存放打包组件库存放的位置
从零开始发布你的第一个npm插件包并在多项目中使用

二、package.json配置打包命令

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

参数说明:

target lib : 关键字 指定打包的目录
name : 打包后的文件名字
dest : 打包后的文件夹的名称
从零开始发布你的第一个npm插件包并在多项目中使用

三、执行打包命令

  npm run hsk-ui

打包成功:
从零开始发布你的第一个npm插件包并在多项目中使用
从零开始发布你的第一个npm插件包并在多项目中使用

步骤四、新建需要上传文件夹并初始化package.json文件

一、新建一个自己需要上传组件包的文件夹(hskcomTest),可在打包后存放一些其他打包不进去的文件。将执行打包命令生成的文件夹内容复制到hskcomTest文件夹中。进入hskcomTest 目录执行npm init -y,初始化一个package.json文件。

	npm init -y

初始化过后的文件:
在这里插入图片描述
参数说明

description : 组件包描述信息。
keywords : 字符串数组,便于用户在npm上搜索到我们的项目。
version : 项目版本号。
name : package.json文件中最重要的就是nameversion字段,这两项是必填的。名称和版本一起构成一个标识符,该标识符被认为是完全唯一的。对包的更改应该与对版本的更改一起进行。name必须是字符串,不能以.或_开头,不能有大写字母,因为名称最终成为URL的一部分因此不能包含任何非URL安全字符。 npm官方建议我们不要使用与核心节点模块相同的名称。不要在名称中加js或node。如果需要可以使用engines来指定运行环境。
main : 项目文件入口文件,自动生成,不需要改动。

二、修改打打包上传地址devtestpreprod环境上传地址,及其打包命令。在这里插入图片描述
三、配置好上传包的package.json后,进行将原打包的文件及打包不进来的文件复制放入到hskcomTest文件夹中
在这里插入图片描述

步骤五、添加登录后端人员给的npm私服账号和镜像地址

一、

npm login

从零开始发布你的第一个npm插件包并在多项目中使用

步骤六、发布

在组件打包后的文件夹中执行,进行上传组件或者你的插件包

npm publish --registry ”Nexus的镜像地址“

但是我当前已经在需上传的组件包中使用了如下配置
从零开始发布你的第一个npm插件包并在多项目中使用
所以我只需要执行npm run hsk-ui:dev命令即可

npm run hsk-ui:dev`

打包上传成功提示如下
从零开始发布你的第一个npm插件包并在多项目中使用
npm 私服上即可看到
从零开始发布你的第一个npm插件包并在多项目中使用

步骤七、安装并使用已发布包

一、安装
因为我是用的是私服的npm组件库,所以需要输入用户名和密码并指定url的地址,如果是公共服,那则不需要私服地址。

npm install -u 用户名 -p 密码 --registry=http://xxx.xxx.xx.xx:xxx/repository/npm-group-dev/ hsk-ui@1.0.1-SNAPSHOT

从零开始发布你的第一个npm插件包并在多项目中使用
二、安装完成后,main.js中全局引入。

//引入hsk组件
import hskui from "hsk-ui"
import "hsk-ui/styles/hskui.css"
//引入hsk方法
import { hskMsgbox } from 'hsk-ui/commonUtils'

三、页面中使用自己刚刚定义的组件

<hsk-switch></hsk-switch>

从零开始发布你的第一个npm插件包并在多项目中使用
效果:
从零开始发布你的第一个npm插件包并在多项目中使用

结语

        希望这篇指南能激发你发布自己npm插件包的热情,让编程之旅更加精彩!如果你有任何疑问或需要进一步的帮助,请随时留言,我们共同探讨。加油,未来的npm之星!🌟

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

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

相关文章

漏洞挖掘 | 验证码绕过

还是老规矩&#xff0c;开局一个登录框&#xff0c;中途漏洞全靠舔&#xff0c;先来研究一下这个登录窗口 很好&#xff0c;发现有验证码登录&#xff0c;先测试测试能不能并发 看来没有&#xff0c;只成功发送了两条&#xff0c;再看看验证码是不是4位 很好&#xff0c;是4位。…

UE5-AI

AI角色 角色控制器 AI角色必须要一个角色控制器 角色控制器最基本只需要执行行为树&#xff0c;在EventOnPossess后runBehaviorTree 如果要的是一个角色&#xff0c;可以创建一个Character&#xff0c;在类默认设置中可以找到 Pawn->AIControllerClass&#xff0c;在这里…

DSP问题:CCS更改工程名导入报错

1、问题现象 复制一个工程出来后&#xff0c;修改版本号&#xff0c;重新导入工程后报错。 显示项目描述无效。 2、问题原因 由于CCS无法通过工程描述中找到指定名字文件夹。使用记事本打开.project文件&#xff0c;里面的描述还是以前的文件夹名&#xff0c;所以导入时报…

Innodb Buffer Pool缓存机制(三)Innodb Buffer Pool内部组成

一、控制块缓存页 Buffer Pool中默认的缓存页大小和在磁盘上默认的页大小是一样的&#xff0c;都是16KB。为了更好的管理这些在Buffer Pool中的缓存页&#xff0c;InnoDB为每一个缓存页都创建了一些所谓的控制信息&#xff0c;这些控制信息包括该页所属的表空间编号、页号、缓存…

[Vulfocus解题系列]spring 命令执行(CVE-2022-22947)

环境部署 使用docker部署环境 漏洞等级&#xff1a;高危 3 月 1 日&#xff0c;VMware 官方发布安全公告&#xff0c;声明对 Spring Cloud Gateway 中的一处命令注入漏洞进行了修复&#xff0c;漏洞编号为CVE-2022-22947 Spring官方发布 漏洞描述 使用 Spring Cloud Gate…

javaweb—Vue

重点为&#xff1a;双向数据绑定。 框架&#xff1a;是一个半成品软件&#xff0c;是一套可重用的、通用的、软件基础代码模型&#xff0c;基于框架进行开发&#xff0c;更加快捷&#xff0c;更加高效。 Vue快速入门 基础框架&#xff1a; <!DOCTYPE html> <html lan…

【Python Cookbook】S01E20 fnmatch 模块做字符串匹配

目录 问题解决方案讨论 问题 在不同的操作系统下&#xff0c;怎样做字符串匹配&#xff1f; 解决方案 fnmatch() 模块提供两个函数&#xff0c;fnmatch() 以及 fnmatchcase() 可以用来执行做这样的匹配。 from fnmatch import fnmatch, fnmatchcasematch_res fnmatch(foo.…

Technart电动螺丝刀TN101控制器维修

Technart电动螺丝刀以其高效、稳定和精确的扭矩控制而闻名。然而&#xff0c;即使优质的产品&#xff0c;在长时间的使用下&#xff0c;也可能会出现TECHNART电动螺母扳手控制器故障。 常见故障及维修方法 1. 控制器不工作 症状&#xff1a;电动螺丝刀无法启动&#xff0c;或启…

【WEEK15】 【DAY2】【DAY3】Email Tasks【English Version】

Continuation from【WEEK15】 【DAY1】Asynchronous Tasks【English Version】 Contents 17. Asynchronous, Timed, and Email Tasks17.2. Email Tasks17.2.1. Email sending is also very common in our daily development, and Springboot provides support for this as well…

JeecgBoot/SpringBoot升级Nacos(2.0.4到2.2.3)启动报错

错误如下&#xff1a; 报这种错误基本就很头大了&#xff0c;是框架不兼容的问题&#xff0c;自己找很难找到解决方法。 解决方案是把SpringBoot框架版本调高。 修改前&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId&g…

Dell戴尔XPS 16 9640 Intel酷睿Ultra9处理器笔记本电脑原装出厂Windows11系统包,恢复原厂开箱状态oem预装系统

下载链接&#xff1a;https://pan.baidu.com/s/1j_sc8FW5x-ZreNrqvRhjmg?pwd5gk6 提取码&#xff1a;5gk6 戴尔原装系统自带网卡、显卡、声卡、蓝牙等所有硬件驱动、出厂主题壁纸、系统属性专属联机支持标志、系统属性专属LOGO标志、Office办公软件、MyDell、迈克菲等预装软…

Linux基础 (十四):socket网络编程

我们用户是处在应用层的&#xff0c;根据不同的场景和业务需求&#xff0c;传输层就要为我们应用层提供不同的传输协议&#xff0c;常见的就是TCP协议和UDP协议&#xff0c;二者各自有不同的特点&#xff0c;网络中的数据的传输其实就是两个进程间的通信&#xff0c;两个进程在…

32C3-2模组与乐鑫ESP32­-C3­-WROOM­-02模组原理图、升级口说明

模组原理图&#xff1a; 底板原理图&#xff1a; u1 是AT通信口&#xff0c;wiif-tx wifi-rx 是升级口&#xff0c;chip-pu是reset复位口&#xff0c;GPIO9拉低复位进入下载模式 ESP32-WROOM-32 系列硬件连接管脚分配 功能 ESP32 开发板/模组管脚 其它设备管脚 下载固件…

【Python报错】AttributeError: ‘NoneType‘ object has no attribute ‘xxx‘

成功解决“AttributeError: ‘NoneType’ object has no attribute ‘xxx’”错误的全面指南 一、引言 在Python编程中&#xff0c;AttributeError是一种常见的异常类型&#xff0c;它通常表示尝试访问对象没有的属性或方法。而当我们看到错误消息“AttributeError: ‘NoneTyp…

激发AI创新潜能,OPENAIGC开发者大赛赛题解析

人工智能&#xff08;AI&#xff09;的飞速发展&#xff0c;特别是AIGC、大模型、数字人技术的成熟&#xff0c;不仅改变了数据处理和信息消费的方式&#xff0c;也为企业和个人提供了前所未有的机遇。在这种技术进步的背景下&#xff0c;由联想拯救者、AIGC开放社区、英特尔共…

基于SSM+Jsp的高校二手交易平台

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

【远程连接服务器】—— Workbench和Xshell远程连接阿里云服务器失败和运行Xshell报错找不到 MSVCP110.d的问题分析及解决

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、远程连接不上服务器1. Workbench远程连接失败2.Xshell也连接不上3.解决方法(1)问题描述&#xff1a;(2)解决&#xff1a; 4.再次连接服务器 二、运行Xshell…

【前端面试3+1】18 vue2和vue3父传子通信的差别、props传递的数据在子组件是否可以修改、如何往window上添加自定义属性、【多数元素】

一、vue2和vue3父传子通信的差别 1、Vue2 父组件向子组件传递数据通常通过props属性来实现。父组件可以在子组件的标签中使用v-bind指令将数据传递给子组件的props属性。在子组件中&#xff0c;可以通过props属性来接收这些数据。这种方式是一种单向数据流的方式&#xff0c;父…

python-opencv图像分割

文章目录 二值化图像骨骼连通域分割 二值化 所谓图像分割&#xff0c;就是将图像的目标和背景分离开来&#xff0c;更直观一点&#xff0c;就是把目标涂成白色&#xff0c;背景涂成黑色&#xff0c;言尽于此&#xff0c;是不是恍然大悟&#xff1a;这不就是二值化么&#xff1…

香橙派 AIpro 的系统评测

0. 前言 你好&#xff0c;我是悦创。 今天受邀测评 Orange Pi AIpro开发板&#xff0c;我将准备用这个测试简单的代码来看看这块开发版的性能体验。 分别从&#xff1a;Sysbench、Stress-ng、PyPerformance、RPi.GPIO Benchmark、Geekbench 等方面来测试和分析结果。 下面就…