【Node.js】包的结构及发布

0 前言

包的基础使用方法已在【Node.js】基础篇 中讲述,本篇将不再赘述!!!


1 package.json(包管理配置文件)

以下代码片段为package.json基础内容及介绍

{"name": "code",    //包名称"version": "1.0.0",    //包版本号"description": "",    //包的描述"main": "index.js",    //包的入口文件"scripts": {    //自定义脚本...},"keywords": [],    //包的关键词"author": "",    //包的作者"license": "ISC",    //包的许可证"dependencies": {    //核心依赖包:开发和项目上线之后都需要用到的包名及版本...},"devDependencies": {    //开发依赖包:开发时需要用到的包名及版本...}
}

2 包的分类

2.1 项目包

那些被安装到项目的node_modules 目录中的包,都是项目包

2.1.1 开发依赖包(devDependencies)

被记录到devDependencies节点中的包,只在开发期间会用到

命令:

-D : --save-dev的简写

npm i 包名 -D

2.1.2 核心依赖包(dependencies)

被记录到dependencies节点中的包,在开发期间和项目上线之后都会用到

命令:

npm i 包名

2.2 全局包

在执行npm install 命令时,如果提供了-g参数,则会把包安装为全局包

全局包会被安装到C:\Users\用户目录\AppData\Roaming\npm\node_modules 目录下

npm i 包名 -gnpm uninstall 包名 -g

注意:

① 只有工具性质的包,才有全局安装的必要性,因为它们提供了好用的终端命令

 ② 判断某个包是否需要全局安装后才能使用,可以参考官方提供的使用说明即可


3 下包镜像

默认从国外的https://registry.npmjs.org/下载包

3.1内置镜像命令

# 查看当前的下包镜像源
npm config get registry# 切换镜像源(如淘宝)
npm config set registry=https://registry.npm.taobao.org/

缺点:容易输错链接


3.2 nrm工具

# 通过npm安装nrm并设置为全局可用的工具
npm i nrm -g# 查看所有可用的镜像源
nrm ls# 将下包镜像源切换为taobao镜像
nrm use taobao

4 md转html小工具(i5ting_toc)

# 将 i5ting_toc 安装为全局包
npm i -g i5ting_toc# 调用 i5ting_toc    -o:转化为自动打开html文件
i5ting_toc -f 要转换的md文件路径 -o

5 开发自己的包

① 新建自定义文件夹,作为包的根目录

② 在该文件夹中,新建如下三个文件:

  • package.json (包管理配置文件)
  • index.js (包的入口文件)
  • README.md (包的说明文档)

5.1 package.json

{
"name": "abc",    //包名
"version": "1.0.0",    //版本号
"main": "index.js",    //入口
"description": "描述内容",    //搜索时的描述内容
"keywords": ["user", "dateFormat", "escape"],    //搜索关键词
"license": "ISC"    //包的许可证,写这种即可
}

 5.2 编写自己的包内容

...


5.3 README.md

包根目录中的README.md 文件,是包的使用说明文档

通过它,我们可以事先把包的使用说明,以markdown 的格式写出来,方便用户参考

README 文件中具体写什么内容,没有强制性的要求;

只要能够清晰地把包的作用、用法、注意事项等描述清楚即可

我们所创建的这个包的README.md 文档中,会包含以下6 项内容:

安装方式、导入方式、格式化时间、转义HTML 中的特殊字符、还原HTML 中的特殊字符、开源协议


6 发布包

6.1 注册npm账号

① 访问https://www.npmjs.com/ 网站,点击sign up 按钮,进入注册用户界面

② 填写账号相关的信息:Full Name、Public Email、Username、Password

③ 点击Create an Account 按钮,注册账号

④ 登录邮箱,点击验证链接,进行账号的验证


6.2 登录npm账号

npm 账号注册完成后,可以在终端中执行npm login 命令,依次输入用户名、密码、邮箱后,即可登录成功

注意:在运行npmlogin 命令之前,必须 先把下包的服务器地址切换为npm的官方服务器,

否则会导致发布包失败!


6.3 把包发布到npm上

将终端切换到包的根目录之后,运行npm publish 命令,即可将包发布到npm 上(注意:包名不能雷同)


6.4 删除已发布的包

运行  npm unpublish 包名 --force 命令,即可从npm 删除已发布的包

注意:

① npm unpublish 命令只能删除72 小时以内发布的包

② npm unpublish 删除的包,在24 小时内不允许重复发布

③ 发布包的时候要慎重,尽量不要往npm 上发布没有意义的包!


7 加载机制

7.1 优先从缓存中加载

模块在第一次加载后会被缓存

这也意味着多次调用require() 不会导致模块的代码被执行多次

注意:不论是内置模块、用户自定义模块、还是第三方模块,它们都会优先从缓存中加载,从而提高模块的加载效率


7.2 内置模块的加载机制

内置模块是由Node.js 官方提供的模块,内置模块的加载优先级最高

例如,require('fs') 始终返回内置的fs 模块,即使在node_modules 目录下有名字相同的包也叫做fs


7.3 自定义模块的加载机制

使用require() 加载自定义模块时,必须指定以./或../开头的路径标识符

在加载自定义模块时,如果没有指定./ 或../ 这样的路径标识符,则node 会把它当作内置模块或第三方模块进行加载

同时,在使用require() 导入自定义模块时,如果省略了文件的扩展名,则Node.js 会按顺序分别尝试加载以下的文件:

① 按照确切的文件名进行加载

② 补全.js扩展名进行加载

③ 补全.json 扩展名进行加载

④ 补全.node 扩展名进行加载

⑤ 加载失败,终端报错 


7.4 第三方模块的加载机制

如果传递给require()的模块标识符不是一个内置模块,也没有以‘./’ 或‘../’ 开头,则Node.js 会从当前模块的父目录开始,尝试从/node_modules文件夹中加载第三方模块

如果没有找到对应的第三方模块,则移动到再上一层父目录中,进行加载,直到文件系统的根目录

例如,假设在'C:\Users\user\project\foo.js' 文件里调用了 require('tools'),则 Node.js 会按以下顺序查找:

① C:\Users\user\project\node_modules\tools

② C:\Users\user\node_modules\tools

③ C:\Users\node_modules\tools

④ C:\node_modules\tools


7.5 目录作为模块

当把目录作为模块标识符,传递给require() 进行加载的时候,有三种加载方式:

① 在被加载的目录下查找一个叫做package.json 的文件,并寻找main 属性,作为require() 加载的入口

② 如果目录里没有package.json 文件,或者main 入口不存在或无法解析,则Node.js 将会试图加载目录下的index.js 文件

③ 如果以上两步都失败了,则Node.js 会在终端打印错误消息,报告模块的缺失:Error: Cannot find module 'xxx'

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

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

相关文章

撕碎QT面具(6):调节窗口大小后,控件被挤得重叠的解决方法

问题:控件重叠 分析原因:因为设置了最小大小,所以界面中的大小不会随窗口的变化而自动变化。 处理方案:修改mimumSize的宽度与高度为0,并设置sizePolicy为Expanding,让其自动伸缩。 结果展示(自…

Leetcode - 周赛436

目录 一、3446. 按对角线进行矩阵排序二、3447. 将元素分配给有约束条件的组三、3448. 统计可以被最后一个数位整除的子字符串数目四、3449. 最大化游戏分数的最小值 一、3446. 按对角线进行矩阵排序 题目链接 本题可以暴力枚举,在确定了每一个对角线的第一个元素…

玩转SpringCloud Stream

背景及痛点 现如今消息中间件(MQ)在互联网项目中被广泛的应用,特别是大数据行业应用的特别的多,现在市面上也流行这多个消息中间件框架,比如ActiveMQ、RabbitMQ、RocketMQ、Kafka等,这些消息中间件各有各的优劣,但是想…

解决 Mac 只显示文件大小,不显示目录大小

前言 在使用 mac 的时候总是只显示文件的大小,不显示文件夹的大小,为了解决问题可以开启“计算文件夹”。 步骤 1.进入访达 2.工具栏点击“显示”选项,点击 “查看显示选项” 3.勾选 显示“资源库"文件夹 和 计算所有大小 或者点击…

STM32 定时器产生定周期方法

目录 背景 程序 第一步、使能PCLK1外设时钟​编辑 第二步、时基单元配置 第三步、配置NVIC(设置定时中断优先级)​编辑 第四步、使能溢出中断 第五步、使能定时器 第六步、填写中断处理函数(ISR) 背景 在单片机开发当中&…

【DeepSeek系列】04 DeepSeek-R1:带有冷启动的强化学习

文章目录 1、简介2、主要改进点3、两个重要观点4、四阶段后训练详细步骤4.1 冷启动4.2 推理导向的强化学习4.3 拒绝采样和有监督微调4.4 针对所有场景的强化学习 5、蒸馏与强化学习对比6、评估6.1 DeepSeek-R1 评估6.2 蒸馏模型评估 7、结论8、局限性与未来方向 1、简介 DeepS…

Compose常用UI组件

Compose常用UI组件 概述Modifier 修饰符常用Modifier修饰符作用域限定Modifier Modifier 实现原理Modifier.Element链的构建链的解析 常用基础组件文字组件图片组件按钮组件选择器对话框进度条 常用布局组件线性布局帧布局 列表组件 概述 Compose 预置了很多基础组件&#xff…

Ansys EMC Plus:HIRF 与飞机耦合演示

在本篇博文中,我们将深入探讨 EMC Plus 高强度辐射场 (HIRF) 与软件示例中提供的飞机演示的耦合。本概述将指导您完成整个工作流程,从设置问题空间到基本后处理,包括材料属性分配和创建探针。 概述 在本演示中,下图所示的预先简化…

DeepSeek + Mermaid编辑器——常规绘图

下面这张图出自:由清华大学出品的 《DeepSeek:从入门到精通》。 作为纯文本生成模型,DeepSeek虽不具备多媒体内容生成接口,但其开放式架构允许通过API接口与图像合成引擎、数据可视化工具等第三方系统进行协同工作,最终…

红蓝对抗之常见网络安全事件研判、了解网络安全设备、Webshell入侵检测

文章目录 ​​研判(入侵检测)​​ ​​设备​​ ​​经典网络​​​​云网络​​ ​​异常HTTP请求​​​​Webshell分析​​ ​​Webshell 的分类​​​​Webshell 的检测​​ ​​主机层面​​​​流量层面​​ ​​附录​​ ​​常见端口漏洞…

基于levmar(Levenberg-Marquardt 非线性最小二乘优化库)的椭圆拟合

1. 包含必要的头文件 #include <opencv2/core.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/highgui.hpp> #include <vector> #include <cmath>2. 定义生成椭圆点的函数 编写一个函数&#xff0c;接受椭圆的中心坐标、长轴半径、短…

Fastgpt学习(5)- FastGPT 私有化部署问题解决

1.☺ 问题描述&#xff1a; Windows系统&#xff0c;本地私有化部署&#xff0c;postgresql数据库镜像日志持续报错" data directory “/var/lib/postgresql/data” has invalid permissions "&#xff0c;“ DETAIL: Permissions should be urwx (0700) or urwx,gr…

基于SpringBoot+vue粮油商城小程序系统

粮油商城小程序为用户提供方便快捷的在线购物体验&#xff0c;包括大米、面粉、食用油、调味品等各种粮油产品的选购&#xff0c;用户可以浏览商品详情、对比价格、下单支付等操作。同时&#xff0c;商城还提供优惠活动、积分兑换等福利&#xff0c;让用户享受到更多实惠和便利…

Python编程之数据分组

有哪些方式可以进行数据分组利用Pandas库进行分组使用itertools库的groupby分组操作构建Python字典方式实现(小规模数据,不适用数量特别大的情况,不需要依赖其它python库)利用NumPy的groupby函数分组操作利用Python的Dask库提供的函数进行分组下面看一个如何去实现坐标数据…

【Linux】认识协议、Mac/IP地址和端口号、网络字节序、socket套接字

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、初识协议2、Mac、IP地址3、端口号4、网络字节序5、socket 1、初识协议 协议就是一种约定。如何让不同厂商生产的计算机之间能…

ubuntu 安装docker

ubuntu 安装docker 官网地址 https://docs.docker.com/engine/install/ubuntu/ 尽量根据官网的来&#xff0c;网上找的很多都是一大堆各种报错 卸载旧版本 新机器不需要操作 卸载的非官方包是&#xff1a; docker.iodocker-composedocker-compose-v2docker-docpodman-docker…

环境变量2

目录 环境变量PATH 如何改变PATH 我们今天继续来学习环境变量2&#xff01;&#xff01;&#xff01; 环境变量PATH PATH的作用是知道命令的搜索路径&#xff0c;我们都知道Linux上的命令行指令&#xff0c;ll&#xff0c;pwd什么的为什么我们写出来系统就知道是什么并且运…

网络安全中的机器学习

当涉及到网络安全时&#xff0c;技术一直是保护系统免受攻击和数据泄露的关键。在这篇论文中&#xff0c;我将介绍一些当前在网络安全领域使用的关键技术&#xff0c;包括加密&#xff0c;身份验证和防火墙。 首先&#xff0c;加密是网络安全中最常见的技术之一。加密是指使用算…

sass报错:[sass] Undefined variable. @import升级@use语法注意事项

今天创建vue3项目&#xff0c;迁移老项目代码&#xff0c;使用sass的时候发现import语法已经废弃&#xff0c;官方推荐使用use替换。 这里我踩了一个坑找半天的问题&#xff0c;原因是sass升级到1.85之后 定义变量前加上 - 就是表示变量私有&#xff0c;即使使用use导出 在新的…

嵌入式经常用到串口,如何判断串口数据接收完成?

说起通信&#xff0c;首先想到的肯定是串口&#xff0c;日常中232和485的使用比比皆是&#xff0c;数据的发送、接收是串口通信最基础的内容。这篇文章主要讨论串口接收数据的断帧操作。 空闲中断断帧 一些mcu&#xff08;如&#xff1a;stm32f103&#xff09;在出厂时就已经在…