当前位置: 首页 > news >正文

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 上。
mainmain 字段是一个模块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!

✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

http://www.lryc.cn/news/61623.html

相关文章:

  • CHAPTER 2: 《BACK-OF-THE-ENVELOPE ESTIMATION》 第2章 《初略的估计》
  • RocketMQ高级概念
  • eureka注册中心和RestTemplate
  • redis复制的设计与实现
  • Docker更换国内镜像源
  • 【网络编程】网络套接字,UDP,TCP套接字编程
  • 海斯坦普Gestamp EDI 需求分析
  • gpt写文章批量写文章-gpt3中文生成教程
  • HashMap实现原理
  • 【Java 数据结构】PriorityQueue(堆)的使用及源码分析
  • 使用 Kubernetes 运行 non-root .NET 容器
  • 为什么大量失业集中爆发在2023年?被裁?别怕!失业是跨越职场瓶颈的关键一步!对于牛逼的人,这是白捡N+1!...
  • Word控件Spire.Doc 【脚注】字体(3):将Doc转换为PDF时如何使用卸载的字体
  • keil5使用c++编写stm32控制程序
  • 中国社科院与美国杜兰大学金融管理硕士项目——在职读研的日子里藏着我们未来无限可能
  • hardhat 本地连接matemask钱包
  • 【华为OD机试真题】1001 - 在字符串中找出连续最长的数字串含-号(Java C++ Python JS)| 机试题+算法思路+考点+代码解析
  • CrackMapExec 域渗透工具使用
  • Modbus协议学习
  • camunda如何处理流程待办任务
  • git部分文件不想提交解决方案
  • 2023年全国最新道路运输从业人员精选真题及答案58
  • Zimbra 远程代码执行漏洞(CVE-2019-9670)漏洞分析
  • 【数据结构初阶】第七节.树和二叉树的性质
  • 车载软件架构——闲聊几句AUTOSAR BSW(一)
  • 我国元宇宙行业分析:政策、技术、资金助推行业探索多元化应用场景
  • 都已经那么卷了,用户还需要开源的 API 管理工具么
  • 工信部教育与考试中心-软件测试工程师考试题A卷-答
  • 【设计模式】模板方法模式--让你的代码更具灵活性与可扩展性
  • 搞明白Redis持久化机制