npm发布插件到私有仓库保姆级教程
在开发项目的过程中,我们经常需要安装插件依赖,那么怎么把自己开发的组件封装成一个插件,并发布到npm 插件市场或者上传到私有仓库里面呢?今天总结下自己发布插件到私有仓库的记录:
一、创建组件
- 执行命令创建一个空项目:
npm create vite
- 在 src 目录下面创建一个文件 package 存放组件和公共的JS方法。
- 重点说明下
packages/index.js
因为插件需要支持按需引入和全局引入,所以这里搞了2种方式:整个案例如下
import { getCurrentInstance } from 'vue'
import EosVtable from './table'const components = [EosVtable]
export { EosVtable, setGlobalConfig }// 用于按需导入
const setGlobalConfig = (option) => {const { appContext } = getCurrentInstance()Set_Provide(option, appContext)
}const Set_Provide = (option, app) => {const context = computed(() => {const cfg = unref(option)return cfg})for (const key in option) {app.config.globalProperties[`$${key}`] = context.value[key]}
}// 定义 install 方法 全局引入
const install = (app, option) => {if (install.installed) return;install.installed = truecomponents.map(component => {app.component(component.name, component)})if (option) Set_Provide(option, app)
}
if (typeof window !== 'undefined' && window.Vue) {install(window.Vue)
}const installer = () => {return {install,setGlobalConfig,}
}export default installer()
补充下组件下的index.js
下的组件暴露方法:
import Vtable from "./index.vue"
Vtable.name = "EosVtable"
Vtable.install = function (Vue) {Vue.component('EosVtable', Vtable)
}
export default Vtable
到这一步组件已经开发完毕,接下里就是上传到私有仓库的操作了。
二、打包组件
- 在
package.json
里面配置包的名称,版本号,导出路径等相关信息。切记每次上传时要记得修改版本号,否则会报错的。照着我的抄,改成自己的名称即可。
{"name": "@eosine/vtable","private": false,"version": "0.0.14","type": "module","main": "dist/@eosine-vtable.umd.cjs","module": "dist/@eosine-vtable.js","files": ["dist/*"],"scripts": {"dev": "vite","build": "vite build","preview": "vite preview","build:watch": "vite build --watch","pushnpm": "npm publish"},"dependencies": {"pinyin-match": "^1.2.6","unplugin-auto-import": "^0.18.3","vue": "^3.5.10","vxe-pc-ui": "^4.2.18","vxe-table": "4.7.85","vxe-table-plugin-element": "^4.0.4"},"devDependencies": {"@vitejs/plugin-vue": "^5.1.4","sass": "^1.79.4","vite": "^5.4.8"}
}
- 设置
vite.config.js
这里主要是设置插件的入口文件地址 lib , 完整案例
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from "path";
import AutoImport from "unplugin-auto-import/vite"
const resolve = (dir) => path.join(__dirname, dir);
export default defineConfig({plugins: [vue(),AutoImport({imports: [// 需要自动导入的API,自动导入vue和vue-router相关函数'vue','vue-router','pinia',],// 指明 .d.ts 文件的位置和文件名,生成 `auto-import.d.ts` 全局声明dts: 'src/types/auto-import.d.ts',}),],resolve: {alias: {"@": path.resolve(__dirname, './src'),},},build: {rollupOptions: {// 请确保外部化那些你的库中不需要的依赖external: ['vue', 'element-plus'],output: {// 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量globals: {vue: 'Vue',},},},lib: {entry: "src/packages/index.js",name: "@eosine/vtable",fileName: "@eosine-vtable"},},server: {host: true,open: true,proxy: {'/api': {target: 'http://XXX.com'},'/M00': {target: 'http://XXX.com'}}},vite: {css: {preprocessorOptions: {scss: {api: 'modern-compiler', // or 'modern'},},},}
})
- 执行打包命令
pnpm run build
进行打包插件 会看到生成的 dist 文件就是整个插件的代码了。
三、npm 上传插件
插件既可以上传到npm 市场,也可上传到公司内部的私有仓库里。2种方案都给大家说下吧
上传到npm 官方
- 登录npm, 执行命令
npm login
, 没有账户的自行注册,上传失败的,检查npm 代理路径是否为官方的,如果是淘宝镜像需要自行切换到官方才可使用,包名是否已经在插件市场存在。
设置 npm 的 registry 为官方源
npm config set registry https://registry.npmjs.org
这里推荐一个工具 nrm
来统一维护自己的镜像,全局安装以下或者自行百度该插件,主要使用命令就是新增和切换镜像:nrm use 和 nrm ls
2. 直接执行命令 npm publish
进行上传即可,到npm 官网查看是否发布成功
四、上传到私有仓库
上面说了那么多,重点核心来了,如何上传到私有仓库呢 ?前提需要咱们的服务器部署私有仓库环境,
目前主流使用的都是
Verdaccio
首次上传时需要把咱们的镜像切换到自己的私有仓库镜像,并进行登录,
切换镜像nrm use eos
登录npm login
输入完账号和密码,
执行最后的上传命令npm publish
,即可大功告成。
能看到这里的兄弟们幸苦了,必须再送各位一波福利,终极大招,项目调试插件。
五、插件联调
这里必须再上一个命令 ,非常少用的:npm link
- 插件热更新,实时监听插件的代码变化,并随时打包
dist
文件。npm run build:watch
注意在package.json 添加该命令
- 在主项目里面进行链接到插件
npm link [插件名称] --global
, 这里特别提示下,如果不起作用,就需要把主项目里面下载的这个依赖包进行remove
掉,重新链接。成功后如下。
这里再送出最后一个福利(被抖音直播洗脑了)哈哈,如果插件有固定的前缀,可以在本机环境下配置下:找到本机的 .npmrc
文件,或者在主项目根目录也行,添加镜像切换:
这样以后只要登录成功一次,后面就不需要再切换镜像和重复登录了。
友情提示:如果上传失败,要检查是否修改版本号了,其次登录npm 成功后,上传完成,要及时把镜像切换回去。
补充创建软链,也可自行百度
over ! 祝好!
相关文章:
npm发布插件到私有仓库保姆级教程
在开发项目的过程中,我们经常需要安装插件依赖,那么怎么把自己开发的组件封装成一个插件,并发布到npm 插件市场或者上传到私有仓库里面呢?今天总结下自己发布插件到私有仓库的记录: 一、创建组件 执行命令创建一个空…...
利用Java easyExcel库实现高效Excel数据处理
在Java应用程序中,处理Excel文件是一项常见任务,尤其是在需要读取、写入或分析大量数据时。easyExcel是一个基于Java的高性能Excel处理库,它提供了简洁的API和优化的性能,以简化Excel文件的处理。本文将指导您如何使用easyExcel库…...
基于Springboot的校园交友网站设计与实现
1.1 管理信息系统概述 管理信息系统是计算机在信息管理领域的一种实用技术。通过运用管理科学、数学和计算机应用的原理及方法,在符合软件工程规范的原则下,形成一套完整的理论和方法体系。是一个以人、计算机和其他外部设备组成的可以进行信息的收集、…...
android studio 读写文件操作(应用场景三)
android studio版本:2023.3.1 patch2 例程:filesaveandread 其实我写这个都是我记录我要做后个数独小游戏,每一个都是为了解决一个问题。即是分享也是备忘,反正我什么都不会,就是一顿瞎改,不行就研究。这…...
小程序 —— Day1
组件 — view和scroll-view view 类似于HTML中的div,是一个块级元素 案例:通过view组件实现页面的基础布局 scroll-view 可滚动的视图区域,用来实现滚动列表效果 案例:实现纵向滚动效果 scroll-x属性:允许横向滚动…...
使用 PyTorch 和 Horovod 来编写一个简单的分布式训练 demo
使用 PyTorch 和 Horovod 来编写一个简单的分布式训练 demo,可以帮助你理解如何在多GPU或多节点环境中高效地训练深度学习模型。Horovod 是 Uber 开发的一个用于分布式训练的框架,它支持 TensorFlow、Keras、PyTorch 等多个机器学习库。下面是一个基于 P…...
【Linux】以 CentOS 为例备份与恢复/home分区,并调整分区容量
在 Linux 系统中,这里举例对 /home 目录进行备份、重建和恢复操作,并调整分区大小、更换文件系统或修复损坏的分区等。 〇、前提条件 确认文件系统类型为 xfs。 确认 /home 目录确实没有重要数据,或者已经做好了数据备份。 确保在执行这些…...
OpenAI 12Days 第二天 强化微调(RFT):推动语言模型在科学研究中的应用
OpenAI 12Days 第二天 强化微调(RFT):推动语言模型在科学研究中的应用 文章目录 OpenAI 12Days 第二天 强化微调(RFT):推动语言模型在科学研究中的应用RFT的工作原理与应用领域案例研究:基因突变…...
神经网络的梯度反向传播计算过程,举例说明
目录 神经网络的梯度反向传播计算过程 网络结构 权重和偏置 激活函数 前向传播 损失函数 反向传播 参数更新 举例 神经网络的梯度反向传播计算过程 为了说明神经网络的梯度反向传播计算过程,我们考虑一个简单的全连接网络,该网络有一个输入层、一个隐藏层和一个输出…...
定点数乘法:补码一位算法(booth算法)
方法 初始化 将被乘数A放在寄存器A中。 将乘数B放在寄存器B中,并在最低位添加一个额外的位Q(-1) 0。 结果寄存器P初始化为0,长度为2n位。 迭代过程(重复n次) 对于i从0到n-1: 检查乘数B的最后两位(B 和…...
robots.txt
robots.txt 文件是网站管理者用来告知搜索引擎爬虫(也称为机器人或蜘蛛)哪些页面可以抓取,哪些页面不应该被抓取的一种文本文件。它位于网站的根目录下,并且文件名必须全部小写。这个文件对于SEO(搜索引擎优化…...
如何用 JavaScript 操作 DOM 元素?
如何用 JavaScript 操作 DOM 元素?——结合实际项目代码示例讲解 在前端开发中,DOM(文档对象模型)操作是与页面交互的核心。通过 DOM 操作,开发者可以动态地修改页面内容、响应用户交互、控制样式等。JavaScript 提供…...
vue3使用后端传递的文件流进行文件预览
文章目录 一、 注意事项1、responseType设置为:arraybuffer2、Blob设置type,来源于后台封装的response.headers[content-type]3、使用encodeURIComponent(),避免符号影响文件名 二、java接口 一、 注意事项 1、responseType设置为࿱…...
ubuntu20.04设置远程桌面
安装xrdp sudo apt install xrdp 2、 检查xrdp状态 sudo systemctl status xrdp3、(若为Ubuntu 20)添加xrdp至ssl-cert sudo adduser xrdp ssl-cert 4、重启服务 sudo systemctl restart xrdp最后可以远程了,注意一个账号只能一个登录...
在vue3里使用scss实现简单的换肤功能
实现的换肤功能:主题色切换、亮色模式和暗黑模式切换、背景图切换 主题色就是网站主色,可以配置到组件库上面;亮色模式又分为两种风格:纯白风格和背景图风格,不需要背景图的话可以删掉这部分逻辑和相关定义;…...
flyway执行sql遇到变量执行报错解决
前两天在公司使用flyway工具执行sql时,开发写的sql里面有变量,于是这个flyway工具不识别这个变量直接报错,不接着往下执行了。报错信息如下: flyway工具执行sql报错 information: No value provided for placeholder: ${ep1} 于是…...
解谜类游戏《迷失岛2》等如何抽象出一套通用高效开发框架?
解谜类游戏以精妙的谜题设计和引人入胜的故事叙述为特点,考验着玩家的智慧与观察力。《迷失岛2》与《南瓜先生2九龙城寨》正是这一领域的佳作。游戏以独特的艺术风格和玩法设计吸引了大量玩家,而它们背后隐藏着一套强大的框架。 上海胖布丁游戏的技术总…...
Ant Design Vue v4版本如何解决1px没有被postcss-px2rem转成rem的问题
背景说明 如果你的 Ant Design Vue 项目有要做适配的需求,那首先要选择一种适配方案。笔者选择的是用 postcss-px2rem 进行适配。笔者在配置了 postcss-px2rem的相关配置后,发现 postcss-px2rem 没有对 Ant Design Vue 进行适配。在网上看了一些文章之后…...
【系统架构设计师论文】云上自动化运维及其应用
随着云计算技术的迅猛发展,企业对云资源的需求日益增长。为了应对这一挑战,云上自动化运维(CloudOps)应运而生,它结合了DevOps理念和技术,通过自动化工具和流程来提高云环境的管理效率和服务质量。本文将探讨云上自动化运维的主要衡量指标,并详细介绍一个实际项目中如何…...
河南地质灾害资质办理的政策
一、资质分类 资质等级: 甲级资质:由自然资源部审批管理,适用于承担大型地质灾害防治项目。 乙级资质:由省、自治区、直辖市自然资源主管部门审批管理,适用于承担中型地质灾害防治项目。 丙级资质:由省…...
单例模式--懒汉 饿汉模式
一.啥是单例模式? 先介绍一下设计模式: 设计模式好⽐象棋中的 "棋谱". 红⽅当头炮, ⿊⽅⻢来跳. 针对红⽅的⼀些⾛法, ⿊⽅应招的时候有⼀些固定的套路. 按照套路来⾛局势就不会吃亏. 软件开发中也有很多常⻅的 "问题场景". 针对这些问题…...
HDD 2025年技术趋势深度分析报告
随着数据量的指数级增长以及人工智能(AI)、物联网(IoT)、云计算和视频监控等领域的需求激增,硬盘驱动器(HDD)行业正面临着前所未有的挑战与机遇。本报告旨在深入剖析2025年HDD技术的发展方向&am…...
关于uni-app的uni.showModal和indexOf的使用
这里使用showModal时,这个里面的content需要使用到字符串的形式,不能用到number类型 uni.showModal({title: 提示,content: "hello",success: function (res) {if (res.confirm) {console.log(用户点击确定);} else if (res.cancel) {console…...
Spring Data Elasticsearch
简介说明 spring-data-elasticsearch是比较好用的一个elasticsearch客户端,本文介绍如何使用它来操作ES。本文使用spring-boot-starter-data-elasticsearch,它内部会引入spring-data-elasticsearch。 Spring Data ElasticSearch有下边这几种方法操作El…...
汇编语言简要记录-1
汇编语言与汇编指令 汇编语言的主题是汇编指令 汇编指令与机器指令的差别在于指令的表示方法上 1、汇编指令是机器机器指令便于记忆的书写格式 2、汇编指令是机器指令的助记符 ag:机器指令 1000100111011000操作:将寄存器BX的值送到AX中汇编指令 MOV …...
Java程序猿搬砖笔记(十七)
文章目录 MySQL触发器ElasticSearch按日期分组查询每天的文档数量MySQL中order by排序将null排在最前或者最后面swagger3.0默认访问路径swagger3.0模块化配置MySQL中要少用UNION,多用UNION ALLElasticSearch Bucket & Metric聚合分析及嵌套聚合Mysql case when做…...
代码设计:设计模式:观察者模式
文章目录 定义类结构应用总结 定义 实现响应式编程的代码设计,即触发事件或数据变化时,将数据从被观察者类通过观察器传递给观察者处理,即被观察者类间接调用观察者类的方法处理事件或数据 类结构 被观察者类、观察器类、观察者类 被观察…...
第32天:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期
时间轴: 32天主要学习内容: 1、JavaEE-HTTP-Servlet技术 2、JavaEE-数据库-JDBC&Mybatis java技术使用历史(2023 ): JavaEE-HTTP-Servlet&路由&周期: java学习范围: 3、Java: 功能:数据…...
如何使用Apache HttpClient来执行GET、POST、PUT和DELETE请求
Apache HttpClient 是一个功能强大且灵活的库,用于在Java中处理HTTP请求。 它支持多种HTTP方法,包括GET、POST、PUT和DELETE等。 本教程将演示如何使用Apache HttpClient来执行GET、POST、PUT和DELETE请求。 Maven依赖 要使用Apache HttpClient&…...
Next.js 系统性教学:加载界面、重定向与路由分组
更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 1. 加载界面与流式渲染 1.1 加载界面 (loading.js) 1.2 流式渲染 2. 路由重定向 2.1 基于服务器的重定向 2.2 动态重定向 2.3 中间件中的重定向 3. 路由分组 3.1…...
哪款云手机适合多开?常用云手机功能对比
在全球化和数字化时代,云手机以其独特的灵活性和高效性,成为多账号运营和数字营销的热门工具。云手机能够解决传统设备管理的诸多痛点,例如账号关联、硬件成本高等问题。本文将为您推荐多款优质云手机品牌,帮助您选择最适合的工具…...
基于openzeppelin插件的智能合约升级
一、作用以及优点 部署可升级合约,插件自动部署proxy和proxyAdmin合约,帮助管理合约升级和交互;升级已部署合约,通过插件快速升级合约,脚本开发方便快捷;管理代理管理员的权限,只有proxyAdmin的…...
WGAN生成对抗网络数据生成
数据生成 | WGAN生成对抗网络数据生成 目录 数据生成 | WGAN生成对抗网络数据生成生成效果基本描述程序设计参考资料 生成效果 基本描述 1.WGAN生成对抗网络,数据生成,样本生成程序,MATLAB程序; 2.适用于MATLAB 2020版及以上版本&…...
SQL面试题——拼多多SQL面试题 求连续段的起始位置和结束位置
拼多多SQL面试题 求连续段的起始位置和结束位置 今天的题目来自拼多多,我们先看一下题目描述 有一张表ids记录了id,id不重复,但是会存在间断,求出连续段的开始位置和结束位置 +---+ | id| +---+ | 1| | 2| | 3| | 5| | 6| | 8| | 10| | 12| | 13| | 14| | 15| +--…...
Contextual Affinity Distillation for Image Anomaly Detection
Contextual Affinity Distillation for Image Anomaly Detection 日本东北大学 摘要 先前对无监督工业异常检测的研究主要通过匹配或学习局部特征表示来关注“结构”类型的异常,例如裂纹和颜色污染。虽然在这种异常上实现了显着的高检测性能,但他们面…...
如何在HTML中修改光标的位置(全面版)
如何在HTML中修改光标的位置(全面版) 在Web开发中,控制光标位置是一个重要的技巧,尤其是在表单处理、富文本编辑器开发或格式化输入的场景中。HTML中的光标位置操作不仅适用于表单元素(如<input>和<textarea…...
Spring Cloud Alibaba(六)
目录: 分布式链路追踪-SkyWalking为什么需要链路追踪什么是SkyWalkingSkyWalking核心概念什么是探针Java AgentJava探针日志监控实现之环境搭建Java探针日志监控实现之探针实现编写探针类TestAgent搭建 ElasticsearchSkyWalking服务环境搭建搭建微服务微服务接入Sky…...
Http请求系列---【http的几个请求时间分别代表什么?以及如何设置?】
在HTTP客户端编程中,通常涉及以下几种关键的超时设置: 连接超时 (connectTimeout): 定义:在与服务器建立连接时等待的最大时间。这包括DNS解析时间、连接建立时间等。作用:如果在指定的时间内无法建立连接,…...
如何将CSDN博客下载为PDF文件
1.打开CSDN文章内容 2.按键盘上的f12键(或者右键—审查元素)进入浏览器调试模式,点击控制台(Console)进入控制台 3.在控制台输入以下代码,回车 4.在弹出的打印页面中将布局设置成横向,纵向会…...
关于IDEA 2024.2.1 Java EE 无框架配置Tomcat环境以及servlet使用教程
前言 这里的IDEA使用的是专业版,大学生认证后即可使用,社区版没有接触过暂不提,如果你是社区版,那么很可惜,本博客并不适用。本博客适用于java web刚入门的朋友学习使用,并不适用于高级部署。注意…...
【23种设计模式】七种设计原则:理论与 Java 实践
文章目录 23 种设计模式之七种设计原则:理论与 Java 实践一、单一职责原则(SRP - Single Responsibility Principle)(一)理论介绍(二)Java 实现示例(三)关键步骤…...
数据库与数据库管理系统概述
title: 数据库与数据库管理系统概述 date: 2024/12/7 updated: 2024/12/7 author: cmdragon excerpt: 在信息化迅速发展的时代,数据已成为企业和组织的重要资产。数据库与数据库管理系统(DBMS)是高效存储、管理和利用数据的核心工具。本文首先定义了数据库的基本概念和特…...
42_GAN网络详解(2)---常见的GAN
DCGAN CGAN 条件生成对抗网络(Conditional Generative Adversarial Networks, CGAN)是生成对抗网络(Generative Adversarial Networks, GAN)的一种变体,由Mehdi Mirza和Simon Osindero在2014年提出。CGAN的主要改进在…...
目前国内【齿轮检测仪】行业整体较为分散,行业竞争日趋激烈
摘要 根据 HengCe (恒策咨询)的统计及预测,2023年全球齿轮检测仪市场销售额达到了6.2亿美元,预计2030年将达到9.4亿美元,年复合增长率(CAGR)为6.0%(2024-2030)。地区层面来看&#…...
【学习路线】Java
Java基础 基础 基础语法 面向对象 集合框架 JCF 进阶 并发编程 JVM 企业级开发 框架 Spring Boot Spring Cloud 分布式 高性能 高可用 安全 基建 Docker 实战 数据库 MySQL Redis 计算机基础 计算机组成原理 操作系统 计算机网络 数据结构与算法 设计模式 参考:…...
一文说清flink从编码到部署上线
引言:目前flink的文章比较多、杂,很少有一个文章,从一个简单的例子入手,说清楚从编码、构建、部署全流程是怎么样的。所以编写本文,自己做个记录备查同时跟大家分享一下。本文以简单的mysql cdc为例展开说明。 环境说明…...
dolphinScheduler 任务调度
#Using docker-compose to Start Server #下载:https://dlcdn.apache.org/dolphinscheduler/3.1.9/apache-dolphinscheduler-3.1.9-src.tar.gz $ DOLPHINSCHEDULER_VERSION3.1.9 $ tar -zxf apache-dolphinscheduler-"${DOLPHINSCHEDULER_VERSION}"-src.t…...
【opencv入门教程】14. 矩阵乘除运算
文章选自: 一、函数multiply、divide //乘法 CV_EXPORTS_W void multiply(InputArray src1, InputArray src2,OutputArray dst, double scale 1, int dtype -1); brief 计算两个数组的每个元素的按比例缩放乘积 note 当输出数组的深度为 CV_32S 时,…...
SpEL
SPEL(Spring Expression Language)是一个强大的 支持查询和操作对象的表达式语言 Spring:https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html#expressions 表达式语言支持以下功能 文本…...
【SpringMVC】参数传递 重定向与转发 REST风格
文章目录 参数传递重定向与转发REST风格 参数传递 ModelAndView:包含视图信息和模型数据信息 public ModelAndView index1(){// 返回页面ModelAndView modelAndView new ModelAndView("视图名");// 或// ModelAndView modelAndView new ModelAndView(…...