当前位置: 首页 > news >正文

如何发布自定义 npm 组件包

准备工作

1. 注册 npm 账号

还没有 npm 账号?去官网注册: https://www.npmjs.com
需要记住用户名、密码、邮箱,后面需要用到。

2. 查看本地 npm 镜像,如果不是默认的,需要改回来

npm config get registry

重置镜像路径

npm config set registry https://registry.npmjs.org

之后有需要可以再切换回到国内淘宝加速镜像

npm config set registry https://registry.npm.taobao.org

创建 npm 包

1. 创建一个项目,并安装依赖

npm init vite-app <project-name
cd <project-name>
npm i

2. 安装第三方UI组件

npm install element-plus --save

3. 组件编写

image.png

4. 组件导出

在 src 根目录中创建index.js文件

// 导入第三方依赖
import "element-plus/dist/index.css";
import "@/lib/iconfont/index.js";import CyberLogin from "./package/CyberLogin.vue"; // 引入封装好的组件
export default CyberLogin; //导出

5. 打包

在 src 根目录中创建index.js文件

// 导入第三方依赖
import "element-plus/dist/index.css";
import "@/lib/iconfont/index.js";import CyberLogin from "./package/CyberLogin.vue"; // 引入封装好的组件
export default CyberLogin; //导出

修改打包配置 vite.config 文件

import vue from "@vitejs/plugin-vue";
import path from "path";
import { defineConfig } from "vite";export default defineConfig({plugins: [vue()],resolve: {alias: {"@": path.resolve("./src"), // @代替src},},css: {preprocessorOptions: {scss: {additionalData: `@use "@/styles/index.scss";`,},},},build: {lib: {entry: path.resolve(__dirname, "src/index.ts"),name: "CyberLogin",fileName: (format) => `cyber-login.${format}.js`,},rollupOptions: {external: ["vue"],output: {globals: {vue: "Vue",},},},},
});

打包,生成dist文件

npm run build

在dist目录下初始化创建 package.json 包的配置信息

npm init -y

name:包名。
version:版本号,以后更新也要用到。
description:包的描述性文字。
main:包的入口文件,默认根目录的 index.js。
还有其它配置信息就不一一介绍了。
注意这里 name 要唯一,不能和已发布的包重名,你可以到官网(https://www.npmjs.com/)搜索是否已经有同名的包存在。

{"name": "cyber-login","version": "1.0.7","description": "Cyber series login","main": "cyber-login.es.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC"
}

发布 npm 包

1. 在终端登录 npm 包管理平台

npm adduser

执行命令后依次输入用户名、密码、邮箱,最终输出如下内容表示登录成功。

Logged in as timfan on https://registry.npmjs.org/.

2. 开始发布

npm publish

第一次执行可能会提示:
you must verify your email before publishing a new package: www.npmjs.com/email-edit
这是因为注册账号的时候没有使用邮箱进行激活验证。按照提示我们在浏览器中打开这个网址 www.npmjs.com/email-edit,输入注册用户时的邮箱,然后登录邮箱点击邮件 进行验证即可。

PS D:\study\cyber-login\dist> npm publish
npm notice 
npm notice 📦  cyber-login@1.0.9
npm notice === Tarball Contents ===
npm notice 11.4MB  cyber-login.es.js
npm notice 11.3MB  cyber-login.umd.js
npm notice 234B    package.json
npm notice 329.2kB style.css
npm notice 1.5kB   vite.svg
npm notice === Tarball Details ===
npm notice name:          cyber-login
npm notice version:       1.0.9
npm notice filename:      cyber-login-1.0.9.tgz
npm notice package size:  16.9 MB
npm notice unpacked size: 23.0 MB
npm notice shasum:        6ed9d2e2c849605c261d60fb1359747512c3cd4a
npm notice integrity:     sha512-LnRs1mM0tNFfq[...]TbN+Es7MMkrUA==
npm notice total files:   5
npm notice
npm notice Publishing to https://registry.npmjs.org with tag latest and default access
+ cyber-login@1.0.9

发布成功之后,我们可以登录到官网的后台查看自己账号下是否有成功发布的包image.png
或者还可以通过命令 npm install 来查看

E:\private\test>npm install cyber-login
npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.added 1 package, and audited 2 packages in 47sfound 0 vulnerabilities

更新包

后面如果我们需要对包进行升级,修改了包的代码后,同步发布更新到包管理平台 npm,需要修改 package.json 中 version 字段(版本号),这时还是执行

npm publish

使用组件

当我们要在项目中使用的时候就复制npm i cyber-login
image.png
这个时候只要像element plus 那样引入就可以全局使用了,在main.js中引入

import CyberLogin from "cyber-login"
import "cyber-login/style.css"

相关文章:

如何发布自定义 npm 组件包

准备工作 1. 注册 npm 账号 还没有 npm 账号&#xff1f;去官网注册&#xff1a; https://www.npmjs.com 需要记住用户名、密码、邮箱&#xff0c;后面需要用到。 2. 查看本地 npm 镜像&#xff0c;如果不是默认的&#xff0c;需要改回来 npm config get registry重置镜像路…...

iOS_给View的部分区域截图 snapshot for view

文章目录 1.将整个view截图返回image&#xff1a;2.截取view的部分区域&#xff0c;返回image&#xff1a;3.旧方法&#xff1a;4.Tips参考&#xff1a; 1.将整个view截图返回image&#xff1a; 这些 api 已被废弃&#xff0c;所以需要判断 iOS 版本 写两套代码&#xff1a; R…...

计算机网络——数据链路层-可靠传输的实现机制:回退N帧协议GBN(无差错情况、累积确认、有差错情况、发送窗口尺寸)

目录 回退N帧协议GBN 介绍 无差错情况 累积确认 有差错情况 发送窗口尺寸 小结 练习 解析 示意图 上篇中所介绍的停止-等待协议的信道利用率很低&#xff1b;若出现超时重传&#xff0c;则信道利用率更低。 如果发送方在收到接收方的确认分组之前可以连续发送多个数…...

IDEA debug窗口左边工具栏隐藏与显示

今天在debug排查代码的时候一不小心点到哪里&#xff0c;结果变成这样 我们可以这样恢复&#xff0c;右键Debug 点击show Toolbar...

WPF 基于TableControl的页面切换

文章目录 前言其它项目的UserControl切换TableControl添加按钮&#xff0c;隐去TableItem的Header 结论 前言 我想用WPF简单实现一个按钮视图切换的效果&#xff0c;但是我发现别人的实现效果非常的麻烦。 其它项目的UserControl切换 我网上找了个开源的项目&#xff0c;他是…...

Lua 元表,元方法

元表与元方法的概念 Lua中每个值都可具有元表。元表是普通的Lua表,定义了原始值在某些特定操作下 的行为。 例如,当table作为加法的操作数时,Lua检查其“元表”中的“__add”字段是否有 个函数。如果有,Lua调用它执行加法。我们称“元表”中的“键(如__add)”为事件(event),称…...

C# WPF上位机开发(利用tcp/ip网络访问plc)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 c# wpf如果是用来开发非标上位机的&#xff0c;那么和plc的通信肯定是少不了的。而且&#xff0c;大部分plc都支持modbus协议&#xff0c;所以这个…...

Knife4j 接口文档如何设置 Authorization 鉴权参数?

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…...

CentOS 防火墙管理及使用的redis基本常用命令

文章目录 防火墙管理使用systemctl管理防火墙启动、关闭使用firewalld-cmd配置访问防火墙策略firewalld配置文件修改限制来源IP docker使用 redis 防火墙管理 需要关闭防火墙或者开启对应端口 使用systemctl管理防火墙启动、关闭 启动防火墙&#xff1a; systemctl start fi…...

路由器原理

目录 一.路由器 1.路由器的转发原理 2.路由器的工作原理 二.路由表 1.路由表的形成 2.路由表表头含义 直连&#xff1a; 非直连&#xff1a; 静态 静态路由的配置 负载均衡&#xff08;浮动路由&#xff09; 默认路由 动态 三.交换与路由对比 一.路由器 1.路由器…...

采埃孚4D成像雷达拆解

1 基本信息 品牌&#xff1a;海外Tier1采埃孚 • 应用&#xff1a;上汽飞凡中高端纯电平台 • 数量&#xff1a;单车2个&#xff0c;安装在前后保内部 • 最远探测距离&#xff1a;350米 拆解来看&#xff0c;4D雷达主要可以分为4个部分&#xff0c;分别为数字接口板及结构件…...

若依框架springboot——修改前端图片上传样式

简述 使用过若依框架的&#xff0c;一定知道若依前端框架上传图片的样式&#xff0c;是一个正方形加号图片&#xff0c;但是如果你要使用自定义样式呢。 比如将下面这个图进行修改呢 修改后的样式 你可以直接找到element-ui 修改上传图片的组件&#xff0c;也可以加入新的组…...

mysql 数据库 关于库的基本操作

库的操作 如果想到 mysql 客户端当中数据 系统当中的命令的话&#xff0c;直接输入的话&#xff0c;会被认为是 mysql 当中的命令。 所以&#xff0c;在mysql 当中执行系统当中的命令的话&#xff0c;要在系统命令之前带上 ststem &#xff0c;表示系统命令&#xff1a; 但是…...

【通用】Linux,VSCode,IDEA,Eclipse等资源相对位置

正文 不论是 IDEA、Linux、VSCode、cmd等等吧&#xff0c;都遵循这个规则&#xff1a; 如果以斜杠开头&#xff0c;表示从根开始找&#xff1a; IDEA的根是classpath&#xff08;classpath就是项目被编译后&#xff0c;位于 target下的 classes文件夹&#xff0c;或者位于ta…...

音视频技术开发周刊 | 323

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 Meta牵头组建开源「AI复仇者联盟」&#xff0c;AMD等盟友800亿美元力战OpenAI英伟达 超过50家科技大厂名校和机构&#xff0c;共同成立了全新的人工智能联盟。以开源为旗号…...

STM32在CTF中的应用和快速解题

题目给的是bin文件&#xff0c;基本上就是需要我们手动修复的固件逆向。 如果给的是hex文件&#xff0c;我们可能需要使用MKD进行动态调试 主要还是以做题为目的 详细的可以去看文档&#xff1a;https://pdf1.alldatasheet.com/datasheet-pdf/view/201596/STMICROELECTRONIC…...

SaaS 电商设计 (五) 私有化部署-实现 binlog 中间件适配

一、 背景 具体的中间件私有化背景在上文 SaaS 电商设计 (二) 私有化部署-缓存中间件适配 已有做相关介绍.这里具体讨论的场景是通过解析mysql binlog 来实现mysql到其他数据源的同步.具体比如:在电商的解决方案业务流中经常有 ES 的使用场景,用以解决一些复杂的查询和搜索商品…...

Android APP 常见概念与 adb 命令

adb 的概念 adb 即 Android Debug Bridge 。在窗口输入 adb 即可显示帮助文档。adb 实际上就是在后台开启一个 server&#xff0c;会接收 adb 的命令然后帮助管理&#xff0c;控制&#xff0c;查看设备的状态、信息等&#xff0c;是开发、测试 Android 相关程序的最常用手段。…...

菜鸟学习日记(python)——函数

函数是组织好的&#xff0c;用来实现某些功能的代码块&#xff0c;它可以重复使用。 函数能提高应用的模块性&#xff0c;和代码的重复利用率。Python提供了许多内建函数&#xff0c;比如print()。但我们也可以自己创建函数&#xff0c;这被叫做用户自定义函数。 定义函数 用…...

垃圾回收 (GC) 在 .NET Core 中是如何工作的?

提起GC大家肯定不陌生&#xff0c;但是让大家是说一下GC是怎么运行的&#xff0c;可能大多数人都不太清楚&#xff0c;这也很正常&#xff0c;因为GC这东西在.NET基本不用开发者关注&#xff0c;它是依靠程序自动判断来释放托管堆的&#xff0c;我们基本不需要主动调用Collect(…...

3个步骤打造静音散热系统:FanControl 262版智能风扇调控方案全解析

3个步骤打造静音散热系统&#xff1a;FanControl 262版智能风扇调控方案全解析 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub…...

别再只会用A4988了!用STM32+L298N手撸42步进电机细分驱动(附256细分算法)

从零构建STM32L298N的256细分步进电机驱动系统 在创客和嵌入式开发领域&#xff0c;步进电机控制一直是个既基础又充满挑战的课题。市面上常见的A4988、DRV8825等驱动模块虽然方便&#xff0c;但当项目需要更高精度、更灵活控制时&#xff0c;这些现成方案往往显得力不从心。本…...

别再用ls了!从Linux文件系统卡顿,看透MinIO多级目录的性能陷阱与正确用法

从Linux文件系统卡顿到MinIO性能陷阱&#xff1a;高效查询的工程哲学 当你在Linux终端输入ls命令后&#xff0c;系统突然卡死——这种经历对许多开发者来说并不陌生。但很少有人意识到&#xff0c;同样的性能陷阱正潜伏在MinIO这类对象存储系统的日常使用中。本文将揭示文件系…...

Pycharm Database工具:一站式数据库可视化操作指南

1. 为什么你需要Pycharm Database工具&#xff1f; 如果你正在用Pycharm写Python代码&#xff0c;特别是开发Web应用时&#xff0c;很可能会遇到需要操作数据库的情况。很多开发者习惯在Pycharm和Navicat这样的独立数据库工具之间来回切换&#xff0c;这其实既浪费时间又影响开…...

终极指南:如何从零开始打造你的第一台六足机器人

终极指南&#xff1a;如何从零开始打造你的第一台六足机器人 【免费下载链接】hexapod 项目地址: https://gitcode.com/gh_mirrors/hexapod5/hexapod 你是否梦想过亲手制作一台能够灵活行走、稳定爬行的六足机器人&#xff1f;想要体验机器人制作的乐趣&#xff0c;却担…...

Win10下mitie安装失败:subprocess.CalledProcessError的深度排查与实战修复

1. 问题现象与初步分析 最近在Windows10系统上折腾MITIE这个自然语言处理工具包时&#xff0c;遇到了一个让人头疼的错误。当时按照常规流程&#xff0c;先下载了mitie的源码压缩包&#xff0c;解压后执行python setup.py install&#xff0c;结果命令行突然弹出一堆红色报错&a…...

【SOC】Fastboot /DFU 烧录镜像

uboot下 使用fastboot 进行 UFS/EMMC/nand 设备烧录的大致流程&#xff1a; board 进入 uboot&#xff08;支持 fastboot&#xff09;&#xff1b; 同时host机器安装上 fastboot 客户端 ; 2者&#xff08;board与host&#xff09;之间通过usb线连接,通过fastboot 协议进行交互…...

白城腾讯广告服务商

在白城&#xff0c;有不少企业想借助腾讯广告拓展业务&#xff0c;这就离不开靠谱的腾讯广告服务商。今天就和大家聊聊白城腾讯广告服务商的那些事儿&#xff0c;长春中网互联技术在这一领域表现就相当不错。白城腾讯广告服务商现状行业报告显示&#xff0c;近几年白城地区对腾…...

std::unique_lock vs std::lock_guard:C++线程锁选择指南(附性能测试)

std::unique_lock vs std::lock_guard&#xff1a;C线程锁的深度抉择与实战优化 在C多线程编程中&#xff0c;锁的选择往往决定了程序的性能表现和稳定性。当我们需要在std::unique_lock和std::lock_guard之间做出选择时&#xff0c;不能简单地认为"功能多就是好"。本…...

UE4/UE5碰撞事件全解:从Overlap到Hit的7个必知配置项

UE4/UE5碰撞系统深度解析&#xff1a;从基础配置到实战避坑指南 在虚幻引擎开发中&#xff0c;碰撞系统是构建交互体验的核心支柱之一。无论是角色移动、物体交互还是战斗判定&#xff0c;都离不开精准的碰撞检测机制。本文将深入剖析UE4/UE5中Overlap与Hit事件的本质区别&…...