npm上传自己的包以及发布过程遇到的问题

大家好,我是前端追寻路上的【酱酱仔】

作为在前端领域不断探索的一员,在此记录开发中遇到的问题,如果你也遇到了相同的问题,希望本文对你有帮助。


前提:本文涉及的命令都是在要发布的包的根目录下执行的,在编辑器的集成终端或者cmd终端执行效果都是一样的【cmd运行要以管理员模式运行哈】。

以下是我npm发布自己的包过程中所遇到的问题汇总如下:

问题一:如何上传自己的包到npm

问题二:npm login和npm publish过程中经常报错 

问题三:npm包更新过程后,不同镜像下npm xx包版本不同 (大坑

针对以上问题作出以下操作解释说明哈:

问题一:如何上传自己的包到npm

1.1、首先需要去npm官网注册个人npm账号(这里注意邮箱号一定要是可用的)
1.2、其次需要创建npm包 (如果是发布组件可以创建vue-cli包,如果是发布js库之类的可以直接npm init包)
1.3、然后配置npm内配置文件等等
1.4、最终经过测试没问题后可以发布到npm官网

这里我拿封装npm组件为例,演示下操作流程

1.1、npm | Home (npmjs.com) 官网注册账号,有账号的话可以直接登录

1.2、我这里创建vue-cli脚手架,在里面创建npm配置文件(注意也要使用管理员命令运行

主要是基于使用cli3初始化一个项目工程:
全局安装vue-cli:

npm install -g @vue/cli

创建一个vue项目:

vue create llgtfoo-components-boxs

 

按照以上操作即可,这里基础的我这里不过多解释说明了哈

Vue创建脚手架的步骤(简单详细)-CSDN博客

 如果发现安装脚手架太慢,可切换成淘宝镜像

                命令说明                        命令操作
查看npm当前镜像npm config get registry
切换最新淘宝镜像npm config set registry https://registry.npmmirror.com
切换境外镜像npm config set registry https://registry.npmmirror.com
1.3、npm内配置文件信息

a.在项目中添加组件库文件夹:
在根目录下新建一个plugins文件夹,用来放组件,项目文件结构为:

b.添加配置文件
项目根目录下面添加vue.config.js文件,写入以下内容:
(主要是配置webpack的打包)

/** @Author: your name* @Date: 2024-07-22 20:11:02* @LastEditTime: 2024-07-22 20:20:19* @LastEditors: your name* @Description: In User Settings Edit* @FilePath: \health\vue.config.js*/
const path = require('path')
module.exports = {// 修改 pages 入口pages: {index: {entry: 'src/main.js', // 入口template: 'public/index.html', // 模板filename: 'index.html' // 输出文件}},// 扩展 webpack 配置chainWebpack: config => {// @ 默认指向 src 目录// 新增一个 ~ 指向 pluginsconfig.resolve.alias.set('~', path.resolve('plugins'))// 把 plugins 加入编译,因为新增的文件默认是不被 webpack 处理的config.module.rule('js').include.add(/plugins/).end().use('babel').loader('babel-loader').tap(options => {// 修改它的选项...return options})}
}

c.在新建的一个plugins文件夹下面编写npm包内组件

我这是把封装的组件在不同的文件夹,一个文件夹代表一个组件,后面在合理添加并继续封装。
***下面我以custom-tree这个组件为例:(是一个美观自定义树形显示组件)

d.****index.js文件内容:
为组件提供 install 方法,供组件对外按需引入

代码如下:

// 导入你的组件、指令和过滤器
import customTree from './components/custom-tree';
import screenHeight from '../utils/screenHeight';// 定义一个对象,包含插件的 install 方法和需要暴露的组件、指令、过滤器等
const lgbComponents = {install(Vue) {// 注册指令Vue.directive('screen-height', screenHeight);// 注册组件Vue.component('custom-tree', customTree);}
};// 导出插件对象
export default lgbComponents;

注:这个单独暴露组件的index.js,意思是如果这个工程值封装一个组件使用的话,就用这个index.js文件暴露install即可了。

e.在本地页面中使用组件:

在main.js中全局引入统一注册的plugins文件夹下面的index.js文件:

import MyComponents from '../plugins/index.js'
app.use(MyComponents); // 在 app 上使用 MyComponents 插件

本地页面直接使用组件的name名称即可

f.本地页面使用没有问题,这时候就可以npm打包发布了

库模式打包,配置package.json文件

    "scripts": {"dev": "vue-cli-service serve","build": "vue-cli-service build","lib": "vue-cli-service build --target lib --name lgb-components-box --dest lib plugins/index.js","lint": "vue-cli-service lint"},因为在vue-cli中,可以通过以下命令将一个单独的入口打包成库// target: 默认为构建应用,改为 lib 即可启用构建库模式
// name: 输出文件名
// dest: 输出目录,默认为 dist,这里我们改为 lib
// entry: 入口文件路径
vue-cli-service build --target lib --name lib [entry]

package.json中配置打包信息:

name:包名
version:包的版本号,每次发包这个版本号都要改
description:包的描述
private:是否私有,一般都是false
author:作者
license:npm包协议
keywords:关键字,供npm上模糊搜索到包
main: "lib/lgb-components-box.umd.min.js",打包后的入口文件
module: "lib/lgb-components-box.common.js",打包后的入口文件

g..gitignore文件中添加:

.DS_Store
node_modules
/dist# local env files
.env.local
.env.*.local# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?src/
plugins/
public/
vue.config.js
babel.config.js
*.map
*.html

h.把包的一些测试文件过滤掉,最终打包只留下直接封装的文件,即plugins中封装的暴露组件

在终端执行npm run lib 即可,执行结果:

i.发布包(注意一定要使用境外镜像,不然打包不了)

终端中执行发包命令
npm login 登录(如果没有npm账号需要自己注册,并认证邮箱)
这样既登录成功

需要 one-time 的话,在手机你的邮箱里面显示 npm的验证码
在输入npm publish 发布包,出现包名加版本号,即发布成功

这个过程境外镜像比较慢 经常包network错误,可换成自己手机热点连接电脑试试,多尝试几次

npm 上能找到自己发布的包:

j.使用发布的包

安装命令  npm install lgb-components-box

使用文档 见使用文档说明

项目里面使用如下main.js引入

import lgbComponentsBox from 'lgb-components-box'
import 'lgb-components-box/lib/lgb-components-box.css'Vue.use(lgbComponentsBox);
注:全局使用,组件可以单独引用

页面直接使用npm包里面的 组件name即可

<custom-tree  subtractHeightJt="140px" leftTitle="测试npm打包组件"></custom-tree>
问题二:npm login和npm publish过程中经常报错 

a.大部分原因因为使用境外镜像访问比较慢导致的。

b.一部分原因因为邮箱号的npm验证码错误导致。

c.一小部分原因你的包名在npm上面有重复的导致。

其他原因:

        1、npm 源不对,处理:npm config set registry https://registry.npmjs.org/    --   有些非官方源个人可能无权发布,比如淘宝镜像需要admin权限。

        2、文件夹名和package.json里的'name'属性一样时也无法发布,处理:将文件夹名或'name'改成不一致即可。

        3、如果你的 npm 账号未登录成功,也会发包失败。

npm login 没有出现 username,跳转cnpm注册的解决方法_npm username忘记了-CSDN博客

问题三:npm包更新过程后,不同镜像下npm xx包版本不同

        这种原因是因为 使用的淘宝镜像会延迟与国外镜像,所以在淘宝镜像下会是老版本,只有在境外镜像会同步管理端平台发布版本。

        因此刚发布更新的npm包文件也需要同样使用境外镜像npm install

常用的npm包命令

npm说明npm命令
npm登录npm login
npm发布npm publish
npm初始化包npm init
查看当前npm包版本npm view <package_name> versions
查看npm源npm config get registry
设置npm源npm config set registry <registry_url>
npm更新版本号

npm version <update_type>

 <update_type>可以是patchminormajor等标签。

npm取消发布npm unpublish <package_name>@<version>

这样你的npm包就发布上去啦,供多个项目使用噜,是不是感觉前端很有意思哈!!

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

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

相关文章

unity文字||图片模糊

一.文字模糊 1、增大字体大小后等比缩放 快捷键R 2、更改字体渲染模式 二.图片模糊 1、更改过滤模式 2、更改格式或者压缩 3、如果只是图片边缘看不清&#xff0c;可以增加canvas/图片的每单位参考像素

nginx漏洞修复 ngx_http_mp4_module漏洞(CVE-2022-41742)【低可信】 nginx版本升级

风险描述&#xff1a; Nginx 是一款轻量级的Web服务器、反向代理服务器。 Nginx 的受影响版本中的ngx _http_mp4_module模块存在内存越界写入漏洞&#xff0c;当在配置中使用 mp4 directive时&#xff0c;攻击者可利用此漏洞使用使用ngx_http_mp4_module模块处理特制的音频或视…

WARNING: The Nouveau kernel driver is currently in use by your system. 处理方法

实践系统&#xff1a; 安装NVIDIA驱动时&#xff0c;提示&#xff1a; WARNING: The Nouveau kernel driver is currently in use by your system. This driver is incompatible with the NVIDIA driver&#xff0c;and must be disabled before proceeding.警告&#xff1…

Meta发布Llama 3.1开源大语言模型;谷歌发布NeuralGCM AI天气预测模型

&#x1f989; AI新闻 &#x1f680; Meta发布Llama 3.1开源大语言模型 摘要&#xff1a;Meta正式发布了开源大语言模型Llama 3.1&#xff0c;包括8B、70B和405B参数版本。Llama 3.1在推理能力和多语言支持方面有所改进&#xff0c;上下文长度提升至128K&#xff0c;405B参数…

node和npm安装;electron、 electron-builder安装

1、node和npm安装 参考&#xff1a; https://blog.csdn.net/sw150811426/article/details/137147783 下载&#xff1a; https://nodejs.org/dist/v20.15.1/ 安装&#xff1a; 点击下载msi直接运行安装 安装完直接cmd打开可以&#xff0c;默认安装就已经添加了环境变量&…

科技引领水资源管理新篇章:深入剖析智慧水利解决方案,展现其在提升水资源利用效率、优化水环境管理方面的创新实践

本文关键词&#xff1a;智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…

JavaDS —— 排序

排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&a…

人大金仓亮相国际金融展,助力数字金融跑出“加速度”

7月19日至21日&#xff0c;由商务部批准、中国金融电子化集团有限公司主办的2024中国国际金融展&#xff08;以下简称“金融展”&#xff09;在北京国家会议中心举办。作为数据库领域国家队&#xff0c;人大金仓携金融领域创新成果与解决方案亮相本次金融展&#xff0c;获得了业…

亚信安全与软银中国全资企业爱思比通信达成战略合作

近日&#xff0c;亚信安全携手软银集团旗下全资企业爱思比通信科技&#xff08;上海&#xff09;有限公司&#xff08;以下简称“爱思比通信”&#xff09; 共同宣布&#xff0c;双方正式签署战略合作协议。依托双方在技术、业务和资源三大层面的实力与优势&#xff0c;亚信安全…

学习在测试时学习(Learning at Test Time): 具有表达性隐藏状态的循环神经网络(RNNs)

摘要 https://arxiv.org/pdf/2407.04620 自注意力机制在长文本语境中表现良好&#xff0c;但其复杂度为二次方。现有的循环神经网络&#xff08;RNN&#xff09;层具有线性复杂度&#xff0c;但其在长文本语境中的性能受到隐藏状态表达能力的限制。我们提出了一种新的序列建模…

controller层-请求格式为json-请求方法为get

前置条件 get请求映射&#xff0c;内容和PostMapping一致&#xff0c;需要请求参数更换为get数据 请求过程&#xff1a;用户请求--初始化DispatcherServlet及对接和分发用户请求--controller--service 用户请求&#xff1a;http://ip:port/user/getinfo 请求方法&#xff1a;ge…

redis全局唯一ID生成策略、countDownLatch、Lambda表达式总结

redis全局唯一ID生成策略 一、有哪些生成全局唯一ID的策略二、使用Redis自增1. 分析2. RedisIdWorker配置类3 单元测试注解分析&#xff08;难点较多&#xff09;3.1 countDownLatch前言3.2 常用方法 一、有哪些生成全局唯一ID的策略 二、使用Redis自增 1. 分析 2. RedisIdWor…

Java查询ES报错 I/O 异常解决方法: Request cannot be executed; I/O reactor status: STOPPED

问题 ES Request cannot be executed; I/O reactor status: STOPPED 报错解决 在使用ES和SpringBoot进行数据检索时&#xff0c;在接口中第一次搜索正常。第二次在搜索时在控制台就会输出Request cannot be executed; I/O reactor status: STOPPED错误 原因 本文错误是因为在使…

大语言模型-GPT-Generative Pre-Training

一、背景信息&#xff1a; GPT是2018 年 6 月由OpenAI 提出的预训练语言模型。 GPT可以应用于复杂的NLP任务中&#xff0c;例如文章生成&#xff0c;代码生成&#xff0c;机器翻译&#xff0c;问答对话等。 GPT也采用两阶段的训练过程&#xff0c;第一阶段是无监督的方式来预训…

7.23 字符串简单中等 520 125 14 34

520 Detect Capital 思路&#xff1a; 题目&#xff1a;判定word &#xff1a;if the usage of capitals in it is right.遍历所有的string&#xff1a; 两种情况&#xff1a; 首字母capitals–>判定第二个字母是否大写–>所有字母大写 otherwise 除第一个以外全部小写&a…

nginx的配置和使用

一、nginx支持win和linux版本的下载&#xff0c;选择合适的版本进行安装 二、配置文件注解 重点的几个参数进行注释&#xff1a; 1、listen 要监听的服务的端口&#xff0c;符合这个端口的才会被监听 server_name要监听的服务地址&#xff0c;可能是ip,也可能是域名&#xf…

41-50题矩阵和字符串 在Java中,将大写字符转换为小写字符的方法主要有以下几种:

20240723 一、数组最后几个和字符串的两个448. 找到所有数组中消失的数字&#xff08;和645. 错误的集合差不多&#xff09;283. 移动零118. 杨辉三角119. 杨辉三角 II661. 图片平滑器&#xff08;没看懂&#xff09;598. 区间加法 II566. 重塑矩阵303. 区域和检索 - 数组不可变…

键盘是如何使用中断机制的?当打印一串字符到显示屏上时发生了什么???

当在键盘上按下一个键时会进行一下操作&#xff1a; 1.当按下任意一个键时&#xff0c;键盘编码器监控会来判断按下的键是哪个 2.键盘控制器用将解码,将键盘的数据保存到键盘控制器里数据寄存器里面 3.此时发送一个中断请求给中断控制器&#xff0c;中断控制器获取到中断号发送…

Elasticsearch介绍、安装以及IK分词器 --学习笔记

Elasticsearch 是什么&#xff1f; Elasticsearch 是一个高度可扩展的开源全文搜索和分析引擎。它允许你以极快的速度存储、搜索和分析大量数据。Elasticsearch 基于 Apache Lucene 构建&#xff0c;提供了一个分布式、多租户能力的全文搜索引擎&#xff0c;带有 HTTP web 接口…

笔记小结:现代卷积神经网络之批量归一化

本文为李沐老师《动手学深度学习》笔记小结&#xff0c;用于个人复习并记录学习历程&#xff0c;适用于初学者 训练深层神经网络是十分困难的&#xff0c;特别是在较短的时间内使他们收敛更加棘手。 本节将介绍批量规范化&#xff08;batch normalization&#xff09;&#xf…