Node【包】
文章目录
- 🌟前言
- 🌟Nodejs包
- 🌟什么是包?
- 🌟自定义包
- 🌟包配置文件
- 🌟示例
- 🌟Package.json 属性说明
- 🌟语义化版本号
- 🌟package.json示例
- 🌟符合CommonJS规范的包
- 🌟写在最后
🌟前言
哈喽小伙伴们,新的专栏 Node 已开启;这个专栏里边会收录一些Node的基础知识和项目实战,今天带领大家初识一下 Node.js包让我们一起来看看吧🤘
🌟Nodejs包
由多个子模块组成的大模块叫做包。
🌟什么是包?
我们已经知道了 JS 模块的基本单位是单个 JS 文件,但复杂些的模块往往由多个子模块组成。为了便于管理和使用,我们可以把由多个子模块组成的大模块称做包(package),并把所有子模块放在同一个目录里。

🌟自定义包
在组成一个包的所有子模块中,需要有一个入口模块,入口模块的导出对象被作为包的导出对象。例如有以下目录结构。
目录:d:/node/calc/
/calcsum.js //加法subtraction.js //减法multiplication.js //乘法division.js //除法main.js //主模块 入口模块
calc目录定义了一个包,其中包含了4个子模块,main.js作为入口模块。
var sum = require('./sum.js');
var subtraction = reuqire('./subtraction.js');
var multiplication = require('./multiplication.js');
var division = require('./division.js');function calc(a,tag,b){switch(tag){case '+':return sum(a,b);break;case '-':return subtraction(a,b);break;case '*':return multiplication(a,b);break;case '/':return division(a,b);}
}
module.exports = calc;
然后我们要使用这个包
//d:/node/use.jsvar calc = require('./calc/main.js');
console.log(clac(10,'+',100));
但是这样使用感觉不像一个包。
var calc = require('./calc');
🌟包配置文件
包配置文件是一个JSON格式的文件 package.json , 位于包的根目录下, 是包的重要组成部分。
🌟示例
如果想自定义入口模块的文件名和存放位置,就需要在包目录下包含一个 package.json 文件,package.json是包的配置文件。
D:/node/calc/calc/├── sum.js //加法├── subtraction.js //减法├── multiplication.js //乘法├── division.js //除法├── main.js //主模块 入口模块└── package.json
package.json{"name": "calc","main": "./calc/main.js"
}
🌟Package.json 属性说明
| 属性 | 描述 |
|---|---|
| name | 包名。规范定义它需要由小写的字母和数字组成, 可以包含 . _ - 但是不允许包含空格,包名必需是唯一的,以避免对外公布时产生重名冲突的误解。 |
| version | 包的版本号。一个语义化的版本号。查看详情 |
| description | 包的描述。 |
| keywords | 关键词数组, NPM 中主要用来做分类搜索 |
| homepage | 包的官网 url 。 |
| author | 包的作者姓名。 |
| contributors | 包的其他贡献者姓名。 |
| devDependencies | 开发环境依赖包列表。 |
| dependencies | 生产环境依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。 |
| repository | 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。 |
| main | main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require(“express”)。 |
🌟语义化版本号
使用NPM下载和发布代码时都会接触到版本号。NPM使用语义版本号来管理代码,这里简单介绍一下,查看更多。
语义版本号分为X.Y.Z三位,分别代表号、次版本号和补丁版本号。当代码变更时,版本号按以下原则更新。
| 版本号 | 语义 | 描述 |
|---|---|---|
| X | 主版本 | 如果有大变动,新增了功能,向下不兼容,需要更新X位。 |
| Y | 次版本号 | 如果是新增了功能,但是向下兼容,需要更新Y位。 |
| Z | 补丁版本号 | 如果只是修复bug,需要更新Z位。 |
🌟package.json示例
它是这样一个json文件(注意:json文件内是不能写注释的,复制下列内容请删除注释):
{"name": "test", //项目名称(必须)"version": "1.0.0", //项目版本(必须)"description": "This is for study gulp project!", //项目描述(必须)"homepage": "", //项目主页"repository": { //项目资源库"type": "git","url": "https://github.com/xxxx"},"author": { //项目作者信息"name": "allcky","email": "allcky@qq.com"},"license": "ISC", //项目许可协议"devDependencies": { //项目开发依赖包"gulp": "^3.8.11","gulp-less": "^3.0.0"},dependencies:{ //项目生产依赖包}
}
🌟符合CommonJS规范的包
包是在模块基础上更深一步的抽象,Nodejs 的包类似于 C/C++ 的函数库或者 Java/.Net 的类库。它将某个独立的功能封装起来,用于发布、更新、依赖管理和版本控制。Nodejs 根 据 CommonJS 规范实现了包机制,开发了 npm来解决包的发布和获取需求。
CommonJS的包规范的定义其实也十分简单,它由包结构和包描述文件两个部分组成,前者用于组织包中的各种文件,后者则用于描述包的相关信息,以供外部读取分析。
Node.js 的包是一个目录,其中包含一个 JSON 格式的包说明文件 package.json。严格符合 CommonJS 规范的包应该具备以下特征:
| 文件类型 | 描述 |
|---|---|
| package.json | 必须在包的顶层目录下 |
| 二进制文件 | 应该在 bin 目录下 |
| JavaScript | 应该在 lib 目录下 |
| 文档 | 应该在 doc 目录下 |
| 单元测试 | 应该在 test 目录下 |
Node.js 对包的要求并没有这么严格,只要顶层目录下有 package.json,并符合一些规范即可。当然为了提高兼容性,我们还是建议你在制作包的时候,严格遵守 CommonJS 规范。
/├── bin/ # 存放命令行相关代码│├── src/ # 开发目录│├── doc/ # 存放文档│├── lib/ # 存放API相关代码│├── node_modules/ # 存放三方包│├── tests/ # 存放测试用例│├── package.json # 元数据文件│└── README.md # 说明文件
🌟写在最后
更多Node知识以及API请大家持续关注,尽请期待。各位小伙伴让我们 let’s be prepared at all times!
✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!
相关文章:
Node【包】
文章目录 🌟前言🌟Nodejs包🌟什么是包?🌟自定义包🌟包配置文件🌟示例🌟Package.json 属性说明🌟语义化版本号🌟package.json示例 🌟符合CommonJS规…...
CHAPTER 2: 《BACK-OF-THE-ENVELOPE ESTIMATION》 第2章 《初略的估计》
CHAPTER 2: BACK-OF-THE-ENVELOPE ESTIMATION 在系统设计面试中,有时您会被要求估计系统容量或使用粗略估计的性能需求。根据杰夫迪恩的说法,谷歌高级研究员,“粗略的计算是你使用结合思想实验和常见的性能数字,以获得良好的感觉…...
RocketMQ高级概念
一 RocketMQ核心概念 1.消息模型(Message Model) RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责⽣产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应⼀台…...
eureka注册中心和RestTemplate
eureka注册中心和restTemplate的使用说明 eureka的作用 消费者该如何获取服务提供者的具体信息 1.服务者启动时向eureka注册自己的信息 2.eureka保存这些信息 3.消费者根据服务名称向eureka拉去提供者的信息 如果有多个服务提供者,消费者该如何选择? 服…...
redis复制的设计与实现
一、复制 1.1旧版功能的实现 旧版Redis的复制功能分为 同步(sync)和 命令传播。 同步用于将从服务器更新至主服务器的当前状态。命令传播用于 主服务器状态变化时,让主从服务器状态回归一致。 1.1.1同步 当客户端向服务端发送slaveof命令…...
Docker更换国内镜像源
什么是Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全…...
【网络编程】网络套接字,UDP,TCP套接字编程
前言 小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ 特别说明:本文分享的代码运行结果…...
海斯坦普Gestamp EDI 需求分析
海斯坦普Gestamp(以下简称:Gestamp)是一家总部位于西班牙的全球性汽车零部件制造商,目前在全球23个国家拥有超过100家工厂。Gestamp的业务涵盖了车身、底盘和机电系统等多个领域,其产品范围包括钣金、车身结构件、车轮…...
gpt写文章批量写文章-gpt3中文生成教程
怎么用gpt写文章批量写文章 批量写作文章是很多网站、营销人员、编辑等需要的重要任务,GPT可以帮助您快速生成大量自然、通顺的文章。下面是一个简单的步骤介绍,告诉您如何使用GPT批量写作文章。 步骤1:选择好训练模型 首先,选…...
HashMap实现原理
HashMap是基于散列表的Map接口的实现。插入和查询的性能消耗是固定的。可以通过构造器设置容量和负载因子,一调整容易得性能。 散列表:给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字…...
【Java 数据结构】PriorityQueue(堆)的使用及源码分析
🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…...
使用 Kubernetes 运行 non-root .NET 容器
翻译自 Richard Lander 的博客 Rootless 或 non-root Linux 容器一直是 .NET 容器团队最需要的功能。我们最近宣布了所有 .NET 8 容器镜像都可以通过一行代码配置为 non-root 用户。今天的文章将介绍如何使用 Kubernetes 处理 non-root 托管。 您可以尝试使用我们的 non-root…...
为什么大量失业集中爆发在2023年?被裁?别怕!失业是跨越职场瓶颈的关键一步!对于牛逼的人,这是白捡N+1!...
被裁究竟是因为自身能力不行,还是因为大环境不行? 一位网友说: 被裁后找不到工作,本质上还是因为原来的能力就配不上薪资。如果确实有技术在身,根本不怕被裁,相当于白送n1! 有人赞同楼主的观点&…...
Word控件Spire.Doc 【脚注】字体(3):将Doc转换为PDF时如何使用卸载的字体
Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…...
keil5使用c++编写stm32控制程序
keil5使用c编写stm32控制程序 一、前言二、配置图解三、std::cout串口重定向四、串口中断服务函数五、结尾废话 一、前言 想着搞个新奇的玩意玩一玩来着,想用c编写代码来控制stm32,结果在keil5中,把踩给我踩闷了,这里简单记录一下…...
中国社科院与美国杜兰大学金融管理硕士项目——在职读研的日子里藏着我们未来无限可能
人生充满期待,梦想连接着未来。每一天都可以看作新的一页,要努力去成为最好的自己。在职读研的光阴里藏着无限的可能,只有不断的努力,不断的强大自己,未来会因为你的不懈坚持而发生改变,纵使眼前看不到希望…...
hardhat 本地连接matemask钱包
Hardhat 安装 https://hardhat.org/hardhat-runner/docs/getting-started#quick-start Running a Local Hardhat Network Hardhat greatly simplifies the process of setting up a local network by having an in-built local blockchain which can be easily run through a…...
【华为OD机试真题】1001 - 在字符串中找出连续最长的数字串含-号(Java C++ Python JS)| 机试题+算法思路+考点+代码解析
文章目录 一、题目🔸题目描述🔸输入输出二、代码参考🔸Java代码🔸 C++代码🔸 Python代码🔸 JS代码作者:KJ.JK🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🍂个人博客首页: KJ.JK 💖系列专栏:华为OD机试(Java C++ Python JS)...
CrackMapExec 域渗透工具使用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、CrackMapExec 是什么?二、简单使用1、获取帮助信息2、smb连接执行命令3、使用winrm执行命令(躲避杀软)4、smb 协议常用枚…...
Modbus协议学习
以下内容从参考文章学习提炼 [参考文章](https://www.cnblogs.com/The-explosion/p/11512677.html) ## 基本概念 Modbus用的是主从通讯技术,主设备操作查询从设备。可以通过物理接口,可选用串口(RS232、RS485、RS422),…...
OpenClaw 实用指南-节假日系统巡检全自动化(下)
前言 在上一篇文章中,我们已详细讲解了节假日系统巡检全自动化的前三个核心部分,分别是:Part1:AI节假日智能判断、Part2:目标服务器稳定连接、Part3:借助“小龙虾”工具批量部署软件,并利用部署…...
科技企业如何利用智能手段提升研发效率?
观点作者:科易网-国家科技成果转化(厦门)示范基地 现状概述:传统研发模式的瓶颈与挑战 在全球科技创新加速迭代的背景下,科技企业面临的核心挑战之一是如何提升研发效率。传统研发模式往往存在以下痛点: 信…...
Graphormer应用场景:材料科学中新型催化剂吸附能预测落地实践
Graphormer应用场景:材料科学中新型催化剂吸附能预测落地实践 1. 引言:催化剂设计的挑战与机遇 在材料科学领域,催化剂设计一直是一项既关键又具有挑战性的任务。传统催化剂开发过程往往需要耗费数月甚至数年的时间,研究人员需要…...
【AI】AI安全工具:常用AI安全检测工具的使用教程
AI安全工具:常用AI安全检测工具的使用教程📝 本章学习目标:本章介绍实用工具,帮助读者掌握AI安全合规治理的工具使用。通过本章学习,你将全面掌握"AI安全工具:常用AI安全检测工具的使用教程"这一…...
德希科技在线 COD 传感器
一、应用场景与产品定位COD 是评判水体有机污染程度的核心指标,在河流湖泊、饮用水源地、市政管网及污水处理等场景的水质监测中不可或缺。研发人员针对长期在线、环保监测的需求,推出双波长紫外吸收法在线 COD 传感器,设备以无试剂、多参数、…...
Ai2Psd终极指南:如何将Illustrator矢量图层完美导出到Photoshop
Ai2Psd终极指南:如何将Illustrator矢量图层完美导出到Photoshop 【免费下载链接】ai-to-psd A script for prepare export of vector objects from Adobe Illustrator to Photoshop 项目地址: https://gitcode.com/gh_mirrors/ai/ai-to-psd 还在为AI到PSD的格…...
Go Routine 调度模型详解
Go Routine 调度模型详解 在现代编程语言中,高效的并发模型是提升程序性能的关键。Go语言凭借其轻量级的Go Routine和高效的调度器,成为高并发场景下的佼佼者。本文将深入解析Go Routine的调度模型,帮助开发者理解其底层机制,从而…...
Phi-4-mini-reasoning实操手册:Web界面响应延迟高?GPU显存占用诊断方法
Phi-4-mini-reasoning实操手册:Web界面响应延迟高?GPU显存占用诊断方法 1. 问题背景与现象分析 当使用Phi-4-mini-reasoning进行推理任务时,Web界面响应延迟高是一个常见问题。这种情况通常表现为: 点击"开始生成"按…...
intv_ai_mk11部署教程:公网IP+端口直连的安全加固方案(反向代理+访问限流)
intv_ai_mk11部署教程:公网IP端口直连的安全加固方案(反向代理访问限流) 1. 环境准备与快速部署 1.1 系统要求 操作系统:Ubuntu 20.04/22.04 LTSGPU:NVIDIA显卡(至少16GB显存)内存࿱…...
SOONet模型AI编程助手实践:根据代码注释自动定位相关教学视频片段
SOONet模型AI编程助手实践:根据代码注释自动定位相关教学视频片段 1. 引言 你有没有过这样的经历?在IDE里写代码,遇到一个不太熟悉的函数或者算法,比如“快速排序”,你停下来想查查资料。通常的做法是,要…...
