Node.js开发属于自己的npm包(发布到npm官网)

在 Node.js 中开发并发布自己的 npm 包是一个非常好的练习,可以帮助我们更好地理解模块化编程和包管理工具,本篇文章主要阐述如何使用nodejs开发一个属于自己的npm包,并且将其发布在npm官网。在开始之前确保已经安装了 Node.js 和 npm。可以在cmd命令行中运行 node -v 和 npm -v 来检查它们的版本,我这里使用的是nvm。

目录

一、初始化包的基本结构

二、开发包的基本流程

1.包的功能

2.开发包流程 

2.1 创建根目录

2.2 创建其他文件

 2.3 初始化package.json

2.4 开发功能

2.5 整合包的入口文件

2.6 编写包的说明文档

三、发布包

1.注册账号

2.登录账号

3.发布包

4.查看包

四、删除包


一、初始化包的基本结构

一个规范的包,他必须包含以下基本结构:

(1)独立的目录结构:包必须以一个独立的目录形式存在,这是包的基本组织单元。该目录应包含包的所有相关文件和子目录,以便于管理和分发。

(2)package.json 配置文件:在包的顶级目录中,必须存在一个名为 package.json 的文件。该文件是 Node.js 包的核心配置文件,用于定义包的元数据、依赖关系及其他重要信息。

package.json配置:

名称功能
namenpm服务器上面的包名(这个名字和文件夹的名字可以不一致)
version包的版本号 
descriptionnpm官网上面查找的时候,搜素框下面提示框所显示的简介

main

包的入口
keywords包的查找关键词
license所遵守的开源许可协议

(3)index.js文件:这是包的入口文件。

(4)README.md:包的说明文档--官网上面也会以网页的形式展现出来的。

二、开发包的基本流程

1.包的功能

  • 格式化日期:将日期转为特定字符串格式,如ISO 8601或自定义。
  • 转义 HTML 特殊字符:转换<、>等字符为HTML实体,防解析错误。
  • 还原 HTML 特殊字符:将HTML实体转换回原字符,恢复文本原貌。

2.开发包流程 

2.1 创建根目录

新建timeEscape-tools文件夹,作为包的根目录。

2.2 创建其他文件

在新建的文件夹下,创建以下文件夹和文件,包含src文件夹、package.json文件、index.js文件及README.md。

 2.3 初始化package.json

在package.json文件中书写以下代码,注意:下方的代码中除了名称不变,其余的可根据需要进行修改。

{"name":"timeescape-tools","version":"1.0.0","description":"提供了格式化时间,HTMLEscape相关的功能","main":"index.js","keywords": ["date", "format", "html", "escape"],"license":"ISC"
}

2.4 开发功能

对于包的功能我们将其文件建立在src文件夹下,如下在src文件夹中创建dateFormat和htmlEscape文件。

(1)dateFormat.js中定义格式化时间的方法 

//定义格式化时间的函数
function dateFormat(date) { const dt = new Date(date);//年const year = zeroPad(dt.getFullYear());const month = zeroPad(dt.getMonth() + 1);//日const day = zeroPad(dt.getDate());//时const hour = zeroPad(dt.getHours());//分const minute = zeroPad(dt.getMinutes());//秒const second = zeroPad(dt.getSeconds());    //返回格式化后的时间字符串return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
}
//定义一个补零的函数
function zeroPad(num) {return num>9?num:'0'+num;
}
module.exports = {dateFormat
}

(2)htmlEscape.js中定义转义和还原HTML的方法

//定义转义HTML字符的函数
function escapeHtml(str) {return str.replace(/<|>|"|&/g, (match) => { switch (match) {case '<':return '&lt;';case '>':return '&gt;';case '"':return '&quot;';case '&':return '&amp;';default:return match;}})
}
//定义还原HTML字符的函数
function unescapeHtml(str) {return str.replace(/&lt;|&gt;|&quot;|&amp;/g, (match) => { switch (match) {case '&lt;':return '<';case '&gt;':return '>';case '&quot;':return '"';case '&amp;':return '&';default:return match;}})
}
module.exports = {escapeHtml,unescapeHtml
}

2.5 整合包的入口文件

在index.js文件中引入上述开发功能的文件,并且将其向外暴露出去。

const date = require('./src/dateFormat')
const escape=require('./src/htmlEscape')
//向外暴露
module.exports = {...date,...escape
}

2.6 编写包的说明文档

以上步骤操作完之后,就可以来书写介绍文档了

<!--* @Description: timeEscape-tools使用文档介绍
-->
##安装
```
npm install timeEscape-tools
```
##导入
```js
const timeEscape = require('timeEscape-tools');
```
##使用--格式化时间
```js// 调用dateFormat对时间进行格式化
const timeStr = timeEscape.dateFormat(new Date());
console.log(timeStr); // 2021-01-28 11:18:31
```##使用--转义HTML中的特殊字符
```js
// 调用escapeHTML对HTML中的特殊字符进行转义
const htmlStr = '<div>Hello, world!</div>';
const escapedHtmlStr = timeEscape.escapeHtml(htmlStr);
console.log(escapedHtmlStr); // &lt;div&gt;Hello, world!&lt;/div&gt;
```
##使用--解码HTML中的特殊字符
```js
// 调用unescapeHTML对HTML中的特殊字符进行解码
const escapedHtmlStr = '&lt;div&gt;Hello, world!&lt;/div&gt;';
const htmlStr = timeEscape.unescapeHtml(escapedHtmlStr);
console.log(htmlStr); // <div>Hello, world!</div>
``` 
##开源协议
ISC

三、发布包

1.注册账号

访问https://www.npmjs.com/网站,点击“sign up”按钮进入注册页面,按照提示填写相关信息以注册个人npm账号。

2.登录账号

在以上注册账号的步骤操作完成后,可以在终端中执行 npm login 命令进行登录。这里需要注意一点在执行 npm login 命令之前,必须先把下包的服务器地址切换为 npm 的官方服务器。否则会导致登录失败!
由于我在执行此命令前未更换,导致出现以下错误:Public registration is not allowed

解决方式:在终端中执行以下命令,将自己的npm镜像源改为npm的https://registry.npmjs.org/这个,注意:(发布完后 切换:npm config set registry https://registry.npmmirror.com,避免npm install报错)

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

3.发布包

在终端中切换到包的根目录,运行npm publish发布npm包。注意,包名需唯一,避免与现有包重复。如有不确定,可先在https://www.npmjs.com/搜索确认包名是否重复。

4.查看包

 在npm官网上查看包是否发布成功,登录自己的npm账号,然后点击头像,选择packages即可查看。

四、删除包

 如若想要删除自己所发布的包,需在终端运行包名 --force命令,即可从npm删除已发布的包。

npm unpublish timeEscape-tools --force

 注意:

  • npm unpublish 命令只能测除 72 小时以内发布的包,
  • npm unpublish 别酸的包,在 24 小时内不允许重复发布

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

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

相关文章

如何在RTACAR中配置IP多播(IP Multicast)

一、什么是IP多播 IP多播&#xff08;IP Multicast&#xff09;是一种允许数据包从单一源地址发送到多个目标地址的技术&#xff0c;是一种高效的数据传输方式。 多播地址是专门用于多播通信的IP地址&#xff0c;范围从 224.0.0.0到239.255.255.255 与单播IP地址不同&#x…

android的DataBinding的使用

参考&#xff1a; Android基础入门&#xff1a;dataBinding的简单使用 Android DataBinding的使用

12.翻转、对称二叉树,二叉树的深度

反转二叉树 递归写法 很简单 class Solution { public:TreeNode* invertTree(TreeNode* root) {if(rootnullptr)return root;TreeNode* tmp;tmproot->left;root->leftroot->right;root->righttmp;invertTree(root->left);invertTree(root->right);return …

网络安全行业的冬天

冬天已经来了&#xff0c;春天还会远吗&#xff1f;2022年10月28日&#xff0c;各个安全大厂相继发布了财报&#xff0c;纵观2022年前三季度9个月&#xff0c;三六零亏了19亿&#xff0c;奇安信亏了11亿&#xff0c;深信服亏了6亿&#xff0c;天融信亏了4亿&#xff0c;安恒亏了…

MYSQL索引与视图

一、新建数据库 mysql> create database mydb15_indexstu; mysql> use mydb15_indexstu; 二、新建表 &#xff08;1&#xff09;学生表Student mysql> create table Student(-> Sno int primary key auto_increment,-> Sname varchar(30) not null unique,-…

深度优先搜索(DFS)——八皇后问题与全排列问题

&#xff08; ^ _ ^ &#xff09; 数据结构好难哇&#xff08;哭 1.BFS和DFS 数据结构空间性质DFSstackO(h)不具有最短性质BFSqueueO(2^h)具有最短路性质 空间上DFS占优势&#xff0c;但是BFS具有最短性 &#xff08;若所有权重都是1&#xff0c;则BFS一定最短&#xff09;&…

Flink 内存模型各部分大小计算公式

Flink 的运行平台 如果 Flink 是运行在 yarn 或者 standalone 模式的话&#xff0c;其实都是运行在 JVM 的基础上的&#xff0c;所以首先 Flink 组件运行所需要给 JVM 本身要耗费的内存大小。无论是 JobManager 或者 TaskManager &#xff0c;他们 JVM 内存的大小都是一样的&a…

Vue07

一、Vuex 概述 目标&#xff1a;明确Vuex是什么&#xff0c;应用场景以及优势 1.是什么 Vuex 是一个 Vue 的 状态管理工具&#xff0c;状态就是数据。 大白话&#xff1a;Vuex 是一个插件&#xff0c;可以管理 Vue 通用的数据 (多组件共享的数据)。例如&#xff1a;购物车数…

Linux内核中的软中断与NAPI机制:高效处理网络数据包

在现代操作系统中,中断处理是系统性能的关键因素之一,尤其是在处理高负载的网络数据包时。Linux内核通过软中断(SoftIRQ)和NAPI(New API)机制,实现了高效的网络数据包处理。本文将深入探讨软中断和NAPI机制的原理、实现方式以及它们在处理网络数据包中的作用。 一、软中…

Linux 安装 Ollama

1、下载地址 Download Ollama on Linux 2、有网络直接执行 curl -fsSL https://ollama.com/install.sh | sh 命令 3、下载慢的解决方法 1、curl -fsSL https://ollama.com/install.sh -o ollama_install.sh 2、sed -i s|https://ollama.com/download/ollama-linux|https://…

Docker Desktop无法安装报错(求助记录中)

之前Docker Desktop无法使用&#xff0c;报了一个注册表的错误&#xff08;忘记截图&#xff09;我想着更新安装下应该就好了&#xff0c;结果Docker Desktop一直无法安装&#xff0c;花了几天都没解决。同时我的window11更新也出现下载错误 - 0x80040154异常,启动或关闭Window…

Docker入门(Windows)

视频链接&#xff1a;Docker | 狂神说 环境说明 Windows For Docker WSL2 概念 Docker是什么&#xff1f; 百度百科&#xff1a;百度百科 Docker 是一个开源的平台&#xff0c;它利用操作系统级虚拟化技术来打包和运行应用程序。通过使用容器化技术&#xff0c;Docker 提…

kafka生产者之发送模式与ACK

文章目录 Kafka的发送模式Kafka的ack机制发送模式与ack的关联重试次数总结 在Kafka中&#xff0c;发送模式与ack机制紧密相关&#xff0c;它们共同影响着消息发送的可靠性和性能。 Kafka的发送模式 发后即忘&#xff08;Fire and Forget&#xff09;&#xff1a;生产者发送消息…

STM32 RTC亚秒

rtc时钟功能实现&#xff1a;rtc模块在stm32内部&#xff0c;由电池或者主电源供电。如下图&#xff0c;需注意实现时仅需设置一次初始化。 1、stm32cubemx 代码生成界面设置&#xff0c;仅需开启时钟源和激活日历功能。 2、生成的代码,需要对时钟进行初始化&#xff0c;仅需…

kafka服务端之延时操作实现原理

文章目录 背景案例延时生产实现原理延时拉取实现原理 总结 背景 上篇我们说到了kafka时间轮是延时操作内部实现的重要数据结构&#xff0c;这篇我们来说下kafka内部的延时操作实现原理。这里我们以延时生产和延时拉取为例说明延时操作的实现原理。 案例 延时生产 我们知道如…

【算法】动态规划专题⑥ —— 完全背包问题 python

目录 前置知识进入正题模板 前置知识 【算法】动态规划专题⑤ —— 0-1背包问题 滚动数组优化 完全背包问题是动态规划中的一种经典问题&#xff0c;它与0-1背包问题相似&#xff0c;但有一个关键的区别&#xff1a;在完全背包问题中&#xff0c;每种物品都有无限的数量可用。…

第四十章:职场转折:突破困境,重新出发

从绍兴与岳父岳母温馨相聚归来后&#xff0c;小冷满心都是温暖与幸福&#xff0c;本以为生活与工作会继续平稳前行&#xff0c;然而&#xff0c;命运却悄然为他的职场之路埋下了转折的伏笔。 平静工作下的暗潮涌动 小冷所在的公司是一家专注于地图导航与位置服务的企业&#xf…

VSCode中出现“#include错误,请更新includePath“问题,解决方法

1、出现的问题 在编写C程序时&#xff0c;想引用头文件但是出现如下提示&#xff1a; &#xff08;1&#xff09;首先检查要引用的头文件是否存在&#xff0c;位于哪里。 &#xff08;2&#xff09;如果头文件存在&#xff0c;在编译时提醒VSCode终端中"#include错误&am…

ElementUI的常用组件及使用技巧

1. 引言 项目背景与目标 随着前端技术的快速发展,构建高效、美观的用户界面变得越来越重要。ElementUI作为一款基于Vue.js的组件库,提供了丰富的组件和工具,帮助开发者快速构建高质量的Web应用。本文旨在介绍ElementUI的常用组件及其使用技巧,帮助开发者更好地利用Elemen…

实验5 配置OSPFv2验证

实验5 配置OSPFv2验证 1.实验目的 &#xff08;1&#xff09;OSPFv2 验证的类型和意义。 &#xff08;2&#xff09;配置基于区域的 OSPFv2 简单口令验证和 MD5 验证的方法。 &#xff08;3&#xff09;配置基于链路的 OSPFv2 简单口令验证和 MD5 验证的方法。 2.实验准备 配置…