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

news2024/9/24 11:33:14

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

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


前提:本文涉及的命令都是在要发布的包的根目录下执行的,在编辑器的集成终端或者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 目录
        // 新增一个 ~ 指向 plugins
        config.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.coloradmin.cn/o/1944199.html

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

相关文章

自训练和增量训练word2vec模型

1、自己准备训练语料文件 根据自己的业务场景准备训练数据&#xff0c;比如用户在商城上的同购行为序列或同浏览行为序列。 我们希望通过自己训练业务相关的语料word2vec模型来获得词嵌入、词相关性查询等。 1.1 准备语料库文件 # 示例&#xff1a;准备自己的一个大规模的语…

学习记录day16—— 数据结构 双向链表 循环链表

双向链表 1、概念 1&#xff09;就是从任意一个节点既能存储其前驱节点&#xff0c;又能存储后继节点 2)结构体中增加一个指向前驱节点的指针 //定义数据类型 typedef int datatype;//定义节点类型 typedef struct Node {union {int len;datatype data;};struct Node *prio; …

k8s中部署Jenkins、SonarQube、StorageClass部署流程

部署Jenkins 系统环境&#xff1a; • kubernetes 版本&#xff1a;1.23.3 • jenkins 版本&#xff1a;2.172 • jenkins 部署示例文件 Github 地址&#xff1a;https://github.com/my-dlq/blog-example/tree/master/jenkins-deploy 一、设置存储目录 在 Kubenetes 环境下…

Kolla-Ansible的确是不支持CentOS-Stream系列产品了

看着OpenStack最新的 C 版本出来一段时间了&#xff0c;想尝个鲜、用Kolla-Ansible进行容器化部署&#xff0c;结果嘛。。。 根据实验结果&#xff0c;自OpenStack Bobcat版本开始&#xff0c;Kolla-Ansible就适合在CentOS系列产品上部署了&#xff0c;通过对 Bobcat和Caracal…

llama模型,nano

目录 llama模型 Llama模型性能评测 nano模型是什么 Gemini Nano模型 参数量 MMLU、GPQA、HumanEval 1. MMLU(Massive Multi-task Language Understanding) 2. GPQA(Grade School Physics Question Answering) 3. HumanEval llama模型 Large Language Model AI Ll…

Python教程(一):环境搭建及PyCharm安装

目录 引言1. Python简介1.1 编译型语言 VS 解释型语言 2. Python的独特之处3. Python应用全览4. Python版本及区别5. 环境搭建5.1 安装Python&#xff1a; 6. 开发工具&#xff08;IDE&#xff09;6.1 PyCharm安装教程6.2 永久使用教程 7. 编写第一个Hello World结语 引言 在当…

微服务实战系列之玩转Docker(六)

前言 刚进入大暑&#xff0c;“清凉不肯来&#xff0c;烈日不肯暮”&#xff0c;空调开到晚&#xff0c;还是满身汗。——碎碎念 我们知道&#xff0c;仓库可见于不同领域&#xff0c;比如粮食仓库、数据仓库。在容器领域&#xff0c;自然也有镜像仓库&#xff08;registry&…

【案例】使用React+redux实现一个Todomvc

About 大家好&#xff0c;我是且陶陶&#xff0c;今天跟大家分享一个redux的todoList案例&#xff0c;通过这个案例能够快速掌握redux的基本知识点&#x1f339; ❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…❤️…

超声波眼镜清洗机什么牌子好?入门级家用超声波清洗机推荐

戴眼镜的人一定都有对眼镜店的超声波清洗机清洗过的眼镜惊讶过&#xff0c;洗过之后光洁如新&#xff0c;镜片清澈透亮。最初笔者以为超声波清洗机只能用来清洗眼镜&#xff0c;没想到它还能清洗很多小玩意儿。目前市面上的超声波清洗机品牌繁多&#xff0c;今天笔者来教教大家…

QtCreator和QtDesignStudio最佳实践

一、QTC和QDS工作流概述 很多初学者对 QDS(Qt Design Studio) 和 QTC(Qt Creator)如何配合经常存有疑问&#xff0c;本文介绍具体的工作流程。 工作流程 1.产品设计&#xff1a;通过PS、Figma、XD等专业工具设计页面视觉和原型。 2.QDS 原型制作&#xff1a;导入设计源文件、…

计算机网络-配置双机三层互联(静态路由方式)

目录 交换机工作原理路由器工作原理路由信息表组成部分路由器发决策 ARP工作原理配置双机三层互联&#xff08;静态路由方式&#xff09; 交换机工作原理 MAC自学习过程 初始状态&#xff1a; 刚启动的交换机的MAC地址表是空的。 学习过程&#xff1a; 当交换机收到一个数据帧…

【QML之·组件】

系列文章目录 文章目录 前言一、概述2.QML组件的重要性 二、实例演示总结 前言 组件是QML中的一个重要概念&#xff0c;它是用户界面的构建块。组件是可重用的&#xff0c;可以在不同的界面中使用。每个组件都有自己的属性、信号和方法&#xff0c;可以通过绑定和事件处理来实现…

C# 与C++ cli

cli CLI&#xff08;Command Line Interface&#xff09;是一种通过命令行界面与计算机系统进行交互的方式。它提供了一种以文本形式输入命令和接收系统输出的方法&#xff0c;用于执行各种操作和管理计算机系统。以下是CLI的详细解释&#xff1a; 一、定义与基本概念 定义&…

时间序列数据增强方法概述

时间序列数据增强方法概述 时间序列数据增强是一种提高模型泛化能力和预测准确性的技术&#xff0c;通过在原始数据集上生成新的样本&#xff0c;可以增加模型训练过程中的多样性和鲁棒性。本文将介绍几种常用的时间序列数据增强方法&#xff0c;并提供相应的Python代码示例。…

OS Copilot初体验的感受与心得

本文介绍体验操作系统智能助手OS Copilot后&#xff0c;个人的一些收获、体验等。 最近&#xff0c;抽空体验了阿里云的操作系统智能助手OS Copilot&#xff0c;在这里记录一下心得与收获。总体观之&#xff0c;从个人角度来说&#xff0c;感觉这个OS Copilot确实抓住了不少开发…

宝塔国际版Docker Manager 3.4获取镜像列表报错解决办法

宝塔国际版安装Docker Manager 3.4,遇到获取镜像列表的时候报错。 解决办法 找到:/www/server/panel/plugin/docker/docker_main.py文件 替换函数utc_to_local 原代码 # UTC时间转换为时间戳def utc_to_local(self, utc_time_str, utc_format=%Y-%m-%dT%H:%M:%S):

邮件安全篇:如何防止邮件泄密?

本文主要讨论组织内部用户违反保密规定通过邮件泄密的场景。其他场景导致邮箱泄密的问题&#xff08;如账号被盗、邮件系统存在安全漏洞等&#xff09;不在本文的讨论范围。本文主要从邮件系架构设计、邮件数据防泄漏系统、建立健全规章制度、安全意识培训等方面分别探讨。 1. …

SpringBoot整合Spring Boot Admin实现监控

目录 基本操作流程&#xff1a; 服务端 server 0.创建一个springboot项目 1.导入依赖 2.添加配置信息 3.在启动类添加注解 4.运行 客户端client 1.添加依赖 2.添加配置信息 3.运行 基本操作流程&#xff1a; 服务端 server 0.创建一个springboot项目 1.导入依赖 …

Wordpress安装到win10(2024年7月)

目录 1.wordpress介绍 2下载应用 2.1.wordpress 2.2XAMPP 2.3 PHPmyadmin 3.配置应用 3.1XAMPP进程 3.2 文件配置 3.3 phpmyadmin配置 4.配置网页 4.1 数据库创建 4.2 安装wordpress 5.进入面板 6.总结 1.wordpress介绍 WordPress是一个开源内容管理系统&#xff0…

域名解析到ipv6,并用CF隐藏端口

要求&#xff1a;域名解析到 IPv6 地址并隐藏端口 ‍ 效果&#xff1a;用域名 https://myhalo.soulio.top​ 访问http://[2409:8a62:867:4f12:56c7:5508:f7x6:8]:8080​。唯一缺点是延迟有点高。 ​​ ‍ 难度&#xff1a;需要有一定域名解析、cloudflare使用基础 ‍ 实…