如何发布自定义 npm 组件包

news2024/11/17 15:42:48

准备工作

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 47s

found 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"

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

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

相关文章

安装统信UOS服务器操作系统1060

原文链接&#xff1a;安装统信UOS服务器操作系统1060 hello&#xff0c;大家好啊&#xff01;今天我要给大家介绍的是如何安装统信UOS服务器操作系统1060。统信UOS是一款基于Linux内核&#xff0c;专为中国市场定制开发的操作系统。它不仅提供了良好的用户体验&#xff0c;还在…

翻译: 为什么需要微调大模型 Why Fine-tuning LLM

虽然RAG提供了一种方式来给大型语言模型提供额外的信息&#xff0c;但还有另一种叫做微调&#xff08;fine-tuning&#xff09;的技术&#xff0c;也是给它更多信息的一种方式。特别是&#xff0c;如果你有的上下文比大型语言模型的输入长度或上下文窗口长度更大&#xff0c;那…

单片机Freertos入门(二)任务的创建、删除

1、串口配置 首先将串口进行配置&#xff0c;后续经常会应用&#xff0c;具体步骤点击&#xff1a;串口配置。 2、任务 创建一个任务&#xff0c;就是开辟一个空间、每个任务中都会有while&#xff08;1&#xff09;死循环。 2.1相关函数 动态创建&#xff1a;xTaskCreate…

Linux第一个小程序——进度条

Linux第一个小程序——进度条 1. 前言2. 缓冲区概念3. \r && \n4. 进度条实现4.1 初级进度条4.2 升级进度条 1. 前言 在我们写这个小程序之前&#xff0c;我们要用到我们学的三个知识点 gcc的使用vim的使用make/makefile的使用 除此之外还需要一些其他的知识点&…

如何在jenkins容器中安装python+httprunner+pytest+git+allure(一)

背景&#xff1a; API接口自动化使用python语言实现&#xff0c;利用httprunner框架编写自动化用例场景&#xff08;执行的时候还是依赖pytest),使用jenkins自动构建git上的源代码&#xff0c;并产生allure报告可视化展示API执行结果。 步骤 1.进入jenkins容器 注意使用roo…

数据库和数据仓库的区别

数据仓库是在数据库已知大量存在的前提下&#xff0c;为了进一步挖掘数据资源&#xff0c;为了决策需要产生的&#xff1b;数据仓库在设计的时候有意添加反范式设计&#xff0c;目的是提高查询效率 对比内容数据库数据仓库数据内容近期值历史的 归档的数据数据目标面向业务操作…

ArcGIS Pro SDK 右键获取选中的图层

需求&#xff1a; 获取右键选中的图层 解决方法&#xff1a; 地图页面获取选中的图形 // 获取所选要素 var firstFeatureLayer MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault(); 布局页面获取选中的地图框 Layout layout …

Tomcat 十大安全优化方法(详解版)

目录 1 talnet管理端口保护 2 AJP连接端口保护 3 禁用管理器 4 降权启动 5 控制文件列表的访问 6 隐藏版本信息 7 server header重写 8 限制IP访问 9 修改脚本权限 10 访问日志格式规范 1 talnet管理端口保护 配置内容&#xff1a; &#xff08;1&#xff09;修改默…

element-plus 结合Vue Router时出现的问题及解决方法之一

1、单文件应用element-plus中的Menu 侧边栏 <template><el-row class"tac"><el-col :span"12"><!-- <h5 class"mb-2">Custom colors</h5> --><el-menuactive-text-color"#ffd04b"background-…

GRU,LSTM,encoder-decoder架构,seq2seq的相关概念

门控记忆单元&#xff08;GRU&#xff09; GRU模型有专门的机制来确定应该何时更新隐状态&#xff0c;以及应该何时重置隐状态。这些机制是可学习的。门控循环单元具有以下两个显著特征&#xff1a; 重置门有助于捕获序列中的短期依赖关系&#xff1b;更新门有助于捕获序列中…

Axios入门案例——后端学习

目录 后端准备 导入依赖 解决跨域 User实体类 DemoController测试接口 前端准备 项目结构 axios.js axios.html 开始测试 后端结果 前端结果 后端准备 导入依赖 案例会用到以下的三个依赖。 <dependency><groupId>org.springframework.boot</gro…

案例066:基于微信小程序的家政预约设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

探索多功能SQL数据库编辑器 - Richardson Software RazorSQL

在当今数字化时代&#xff0c;SQL数据库的管理和编辑是许多企业和开发人员必不可少的任务。为了提高生产力和简化数据库操作&#xff0c;Richardson Software推出了一款强大而多功能的SQL数据库编辑器 - RazorSQL。 RazorSQL是一款功能全面的数据库管理工具&#xff0c;可适用…

redis五种数据结构特点

redis五种数据结构特点 redis-string介绍SDS内部存储数据结构三种编码方式特点总结 redis-list介绍quicklist特点总结 redis-hash特点总结 redis-set介绍 特点总结redis-zset介绍特点总结 redis使用五种数据结构&#xff0c;分别是string&#xff08;字符串&#xff09;&#x…

如何连接到 Azure SQL 数据库(下)

在《如何连接到 Azure SQL 数据库&#xff08;上&#xff09;》中&#xff0c;我们已经了解到了以下内容↓↓↓ 开始之前&#xff1a;Azure 连接凭据和防火墙 如何检索 Azure 连接凭据如何配置服务器防火墙使用 SQL Server Management Studio 连接到 Azure使用 dbForge Studio…

实战 | OpenCV传统方法实现密集圆形分割与计数(详细步骤 + y源码)

导 读 本文主要介绍基于OpenCV传统方法实现密集圆形分割与计数应用,并给详细步骤和代码。 背景介绍 实例图片来源于网络,目标是分割下图中圆形目标并计数。 本文实现效果如下: 实现步骤 【1】灰度转换 + 均值滤波 + 二值化,得到参考背景 img = cv2.imread(src.jpg)c…

AcWing 1250. 格子游戏(并查集)

题目链接 活动 - AcWing本课程系统讲解常用算法与数据结构的应用方式与技巧。https://www.acwing.com/problem/content/1252/ 题解 当两个点已经是在同一个连通块中&#xff0c;再连一条边&#xff0c;就围成一个封闭的圈。一般用x * n y的形式将&#xff08;x, y&#xff0…

注意力机制,Transformer相关详解

本文遵循《动手学深度学习pytorch版》的内容组织&#xff0c;从注意力机制开始讲到Transfomer&#xff0c;偏重关键知识理解并附带图解和公式&#xff0c;未加说明时&#xff0c;插图均来自于该书&#xff0c;文本内容较长&#xff08;9414字&#xff09;&#xff0c;建议收藏慢…

P33鱼和熊掌可以兼得的机器学习-why deep

Review: Why Hidden Layer? 在这里插入图片描述 ** 一个hidden 可以通过无数个 picewise linear 构成任意形状的曲线** 那么为什么还要 deep 呢 Why deep not Fat 同样参数量下&#xff0c;deep的模型表现优于 fat 的 Why we need deep? 使用deep&#xff0c;效率更高&…

mybatisplus使用雪花id通过swagger返回ID时精度丢失问题

在使用mybatisplus自带雪花的时候会发现返回的ID是19位的长度&#xff0c;因此在通过swagger页面展示的时候会发现后端返回的和页面展示的ID不一致问题。是因为精度丢失的问题。因此需要更改雪花ID的长度跟踪进去&#xff1a;发现是DefaultIdentifierGenerator类实现了Identifi…