文章目录
- 🌟前言
- 🌟Nodejs包
- 🌟什么是包?
- 🌟自定义包
- 🌟包配置文件
- 🌟示例
- 🌟Package.json 属性说明
- 🌟语义化版本号
- 🌟package.json示例
- 🌟符合CommonJS规范的包
- 🌟写在最后
🌟前言
哈喽小伙伴们,新的专栏 Node 已开启;这个专栏里边会收录一些Node的基础知识和项目实战,今天带领大家初识一下 Node.js包
让我们一起来看看吧🤘
🌟Nodejs包
由多个子模块组成的大模块叫做包。
🌟什么是包?
我们已经知道了 JS 模块的基本单位是单个 JS 文件,但复杂些的模块往往由多个子模块组成。为了便于管理和使用,我们可以把由多个子模块组成的大模块称做包(package),并把所有子模块放在同一个目录里。
🌟自定义包
在组成一个包的所有子模块中,需要有一个入口模块,入口模块的导出对象被作为包的导出对象。例如有以下目录结构。
目录:d:/node/calc/
/calc
sum.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.js
var 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!
✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!