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 小时内不允许重复发布

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

操作系统常见调度算法的详细介绍

目录 1. 先进先出算法&#xff08;FIFO&#xff09; 2. 前后台调度算法 3. 最短处理机运行期优先调度算法&#xff08;短进程优先算法&#xff09; 4. 最高响应比优先调度算法&#xff08;HRRN&#xff09; 5. 优先级调度算法 6. 时间片轮转调度算法 7. 多级反馈队列轮转…

ADB详细教程

目录 一、ADB简介 二、配置 配置环境变量 验证是否安装成功 三、简单使用 基本命令 设备连接管理 USB连接 WIFI连接&#xff08;需要USB线&#xff09; 开启手机USB调试模式 开启USB调试 四、其他 更换ADB默认启动端口 一、ADB简介 ADB&#xff08;Android Debug…

WEB攻防-第60天:PHP反序列化POP链构造魔术方法流程漏洞触发条件属性修改

目录 一、序列化与反序列化基础 1.1 什么是序列化与反序列化 二、魔术方法的生命周期 2.1 常见的魔术方法 2.2 模式方法的生命周期触发调用 2.2.1 __construct() 2.2.2 __destruct() 2.2.3 __sleep() 2.2.4 __wakeup() 2.2.5 __invoke() 2.2.6 __toS…

SQLMesh系列教程-2:SQLMesh入门项目实战(下篇)

上篇我介绍了环境搭建、duckdb数据准备、sqlmesh数据模型、plan命令运行。本文继续介绍审计、测试、生成血缘关系以及python模型等。 有两种方法可以在SQLMesh中创建宏。一种方法是使用Python&#xff0c;另一种方法是使用Jinja。这里我们创建Python宏。让我们构建简单的Python…

自主项目面试点总结

1、许苑–OJ判题系统 技术栈&#xff1a;Spring BootSpring Cloud AlibabaRedisMybatisMQDocker 项目地址: https://github.com/xuyuan-upward/xyoj-backend-microservice 1.1、项目介绍: 一个基于微服务的OJ系统&#xff0c;具备能够根据管理员预设的题目用例对用户提交的代…

Macbook Pro快速搭建Easysearch学习环境

在学习过程中&#xff0c;我们有时身边没有可用的服务器&#xff0c;这时就需要借助自己的 Mac 来安装和学习 Easysearch。然而&#xff0c;Easysearch 官网并未提供 Mac 版本的安装教程&#xff0c;下面我将详细整理我在 Mac 上安装和使用 Easysearch 的折腾经历。 Easysearc…

Arduino 第十三章:红外接收

Arduino 第十三章&#xff1a;红外接收 一、红外接收概述 红外接收在日常生活和电子制作中十分常见&#xff0c;像电视、空调等家电的遥控器就是利用红外信号来实现远程控制的。在 Arduino 项目里&#xff0c;借助红外接收模块能够让设备接收红外信号&#xff0c;进而实现诸如…

朝天椒USB服务器:解决加密狗远程连接

本文探讨朝天椒USB服务器用Usb Over Network技术&#xff0c;解决加密狗在虚拟机、云主机甚至异地的远程连接问题。 在企业数字化转型的浪潮中&#xff0c;加密狗作为防止软件盗版的重要手段&#xff0c;广泛应用于各类软件授权场景。然而&#xff0c;随着企业超融合进程不断加…

第二篇:电压与电流的“锡安之战”——电路定律在800V高压平台中的应用

——基尔霍夫与戴维南如何破解新能源汽车的“高压密码” 核心隐喻&#xff1a;电路定律的“数字起义” 在《黑客帝国》中&#xff0c;锡安的反抗军通过破解母体协议实现逆袭。而在新能源汽车的800V高压平台中&#xff0c; 基尔霍夫定律 和 戴维南定理 正是工程师手中的“通…

【牛客】动态规划专题一:斐波那契数列

文章目录 DP1 斐波那契数列法1&#xff1a;递归法2&#xff1a;动态规划法3&#xff1a;优化空间复杂度 2.分割连接字符串3. 给定一个字符串s和一组单词dict&#xff0c;在s中添加空格将s变成一个句子 DP1 斐波那契数列 法1&#xff1a;递归 // 递归 #include <iostream>…

innovus如何分步长func和dft时钟

在Innovus工具中&#xff0c;分步处理功能时钟&#xff08;func clock&#xff09;和DFT时钟&#xff08;如扫描测试时钟&#xff09;需要结合设计模式&#xff08;Function Mode和DFT Mode&#xff09;进行约束定义、时钟树综合&#xff08;CTS&#xff09;和时序分析。跟随分…

5-R循环

R 循环 ​ 有的时候&#xff0c;我们可能需要多次执行同一块代码。一般情况下&#xff0c;语句是按顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了更为复杂执行路径的多种控制结构。 循环语句允许我们多…

DeepSeek AI R1推理大模型API集成文档

DeepSeek AI R1推理大模型API集成文档 引言 随着自然语言处理技术的飞速发展&#xff0c;大语言模型在各行各业的应用日益广泛。DeepSeek R1作为一款高性能、开源的大语言模型&#xff0c;凭借其强大的文本生成能力、高效的推理性能和灵活的接口设计&#xff0c;吸引了大量开发…

知识图谱_protege的安装

目录 1.下载protege 2.安装可视化工具Graphviz 3.配置 参考【知识图谱】3.Protege下载安装-CSDN博客 1.下载protege 我在官网下载不了所以我就没有在官网下载 项目首页 - Protege-5.5.0Windows版本快速下载指南:Protege是一个广受欢迎的、强大的知识建模工具&#xff0c;用…

从BERT到ChatGPT:大模型训练中的存储系统挑战与技术发展——论文泛读

计算机研究与发展 2024 Paper 论文阅读笔记整理 问题 以ChatGPT为代表的大模型在文字生成、语义理解等任务上表现卓越&#xff0c;但大模型的参数量在3年内增长数万倍&#xff0c;且仍呈现增长的趋势。大模型训练面临存储挑战&#xff0c;存储需求大&#xff0c;且具有独特的…

船舶维保管理系统

一、项目介绍 381.基于SpringBoot的船舶维保管理系统&#xff0c;系统包含四种角色&#xff1a;管理员、船家、维保人员、维保公司,系统分为前台和后台两大模块&#xff0c;主要功能如下。 船家&#xff1a; - 个人中心&#xff1a;管理个人信息。 - 公告管理&#xff1a;查看…

【详细版】DETR系列之Deformable DETR(2021 ICLR)

论文标题Deformable DETR: Deformable Transformers for End-to-End Object Detection论文作者Xizhou Zhu, Weijie Su, Lewei Lu, Bin Li, Xiaogang Wang, Jifeng Dai发表日期2021年03月01日GB引用> Xizhou Zhu, Weijie Su, Lewei Lu, et al. Deformable DETR: Deformable T…

从云原生到 AI 原生,谈谈我经历的网关发展历程和趋势

作者&#xff1a;谢吉宝&#xff08;唐三&#xff09; 编者按&#xff1a; 云原生 API 网关系列教程即将推出&#xff0c;欢迎文末查看教程内容。本文整理自阿里云智能集团资深技术专家&#xff0c;云原生产品线中间件负责人谢吉宝&#xff08;唐三&#xff09; 在云栖大会的精…

基于机器学习时序库pmdarima实现时序预测

目录 一、Pmdarima实现单变量序列预测1.1 核心功能与特性1.2 技术优势对比1.3 python案例1.3.1 时间序列交叉验证1.3.1.1 滚动交叉验证1.3.1.2 滑窗交叉验证 时间序列相关参考文章&#xff1a; 时间序列预测算法—ARIMA 基于VARMAX模型的多变量时序数据预测 基于机器学习时序库…

【文本处理】如何在批量WORD和txt文本提取手机号码,固话号码,提取邮箱,删除中文,删除英文,提取车牌号等等一些文本提取固定格式的操作,基于WPF的解决方案

企业的应用场景 数据清洗&#xff1a;在进行数据导入或分析之前&#xff0c;往往需要对大量文本数据进行预处理&#xff0c;比如去除文本中的无关字符&#xff08;中文、英文&#xff09;&#xff0c;只保留需要的联系信息&#xff08;手机号码、固话号码、邮箱&#xff09;。…