Node.js的包概述

简介: 在Node.js语言中,包和模块并没有本质的不同,包是在模块的基础上更深一步的抽象,包将某个独立的功能封装起来,用于发布、更新、依赖管理和进行版本控制。Node.js根据CommonJS规范实现了包机制,开发了npm来解决包的发布和获取需求。
在Node.js语言中,包和模块并没有本质的不同,包是在模块的基础上更深一步的抽象,包将某个独立的功能封装起来,用于发布、更新、依赖管理和进行版本控制。Node.js根据CommonJS规范实现了包机制,开发了npm来解决包的发布和获取需求。

Node.js的包是一个目录,其中包含JSON格式的包说明文件package.json。Node.js的包基本遵循CommonJS规范,因此具备以下特征:

CommonJS规范定义的包特性:
1)顶层目录包含package.json文件;
2)bin目录存放二进制文件;
3)lib目录存放JavaScript文件;
4)doc目录存放文档;
5)test目录存放单元测试。

Node.js的模块与文件是一一对应的,文件不仅可以是JavaScript源码文件或二进制文件,还可以是目录。最简单的包,就是一个目录的模块。

Node.js的包通常是一些模块的集合,在模块的基础上提供了更高层的抽象,相当于提供了一些固定接口的函数库。
通过定制package.json,我们可以创建更复杂、更完善、更符合规范的包用于发布。

Node.js在调用包时,首先会检查包中的package.json文件的main字段,将其作为包的接口模块,如果package.json文件的main字段不存在,那么Node.js会尝试寻找index.js或index.node作为包的接口。

package.json文件是CommonJS规范用于描述包的文件,完全符合规范的package.json文件应该包含以下字段:
1)name:包名。包名是唯一的,由小写字母、数字和下划线组成,不能含空格。
2)description:包说明。对包进行简要描述。
3)version:版本号。满足《语义化版本识别》规范的版本字符串。
4)keywords:关键字数组,通常用于搜索。
5)maintainers:维护者数组。每个元素包含name、email(可选)、web(可选)字段。
6)contributors:贡献者数组。格式与maintainer数组相同。包作者应该是贡献者数组的第一个元素。
7)bugs:提交bug的地址,可以是网址或电邮地址。
8)licenses:许可证数组。每个元素要包含type(许可证名称)和url(链接到许可证文本的地址)字段。
9)repositories:仓库托管地址数组。每个元素要包含type(仓库的类型,如Git)、url(仓库地址)和path(相对于仓库的路径,可选)字段。
10)dependencies:包依赖。是一个关联数组,由包名和版本号组成。

注:《语义化版本识别》规范是国外提出的一套版本命名规范,最初目的是解决各种各样的版本号大小比较的问题,目前被许多包管理系统所采用。

下面是一个完全符合CommonJS规范的package.json例子:


[javascript]   view plain copy print ?
  1. {   
  2.   "name""testpackage",  
  3.   "description""My package for CommonJS.",  
  4.   "version""0.1.0",  
  5.   "keywords": [  
  6.      "testpackage",  
  7.      "liq"  
  8.   ],   
  9.   "maintainers": [  
  10.      {  
  11.         "name""liq",  
  12.         "email""liq@hotmail.com",  
  13.      }  
  14.   ],  
  15.   "contributors": [  
  16.      {  
  17.         "name""liq",  
  18.         "web""http://blog.csdn.net/chszs"  
  19.      }  
  20.   ],  
  21.   "bugs": {  
  22.      "mail""liq@hotmail.com",  
  23.      "web""http://blog.csdn.net/chszs"  
  24.   },  
  25.   "licenses": [  
  26.      {  
  27.         "type""Apache License v2",  
  28.         "url""http://www.apache.org/licenses/apache2.html"  
  29.      }  
  30.   ],  
  31.   "repositories": [  
  32.      {  
  33.         "type""git",  
  34.         "url""http://github.com/chszs/packagetest.git"  
  35.      }  
  36.   ],  
  37.   "dependencies": {   
  38.      "webkit""1.2",  
  39.      "ssl": {   
  40.         "gnutls": ["1.0""2.0"],  
  41.         "openssl""0.9.8"  
  42.      }  
  43.   }  
  44. }  



目录
相关文章
|
2月前
|
JavaScript 前端开发
JS将两个数组和合并成数组包对象格式的方法
JS将两个数组和合并成数组包对象格式的方法
25 0
|
4月前
|
JavaScript
Nodejs 第七章(发布npm包)
Nodejs 第七章(发布npm包)
28 0
N..
|
25天前
|
JavaScript 前端开发 API
Vue.js概述
Vue.js概述
N..
18 2
|
1月前
|
存储 XML 前端开发
编程笔记 html5&css&js 036 CSS概述
编程笔记 html5&css&js 036 CSS概述
|
3月前
|
JavaScript 前端开发 IDE
如何像人类一样写JavaScript代码(包会)之函数基本使用
如何像人类一样写JavaScript代码(包会)之函数基本使用
如何像人类一样写JavaScript代码(包会)之函数基本使用
|
3月前
|
JavaScript 前端开发 程序员
如何像人类一样写JavaScript代码(包会)之函数参数和返回值
如何像人类一样写JavaScript代码(包会)之函数参数和返回值
118 1
|
4月前
|
JavaScript 前端开发
什么是JavaScript预解析?包学会!
1.我们js引擎运行js 分为两步:预解析 代码执行          (1).预解析 js引擎会把js 里面所有的 var 还有 function 提升到当前作用域的最前面          (2).代码执行 按照代码书写的顺序从上往下执行 2.预解析分为 变量预解析 (变量提升) 和 函数预解析(函数提升)         (1) 变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作         (2) 函数提升 就是把所有的函数声明提升到当前作用域的最前面不调用函数
|
4月前
|
数据采集 JavaScript 前端开发
Vue Nuxt.js 概述
Vue Nuxt.js 概述
80 0
|
4月前
|
JavaScript 小程序 前端开发
nodejs管理包工具nvm的安装与基本使用
有好的建议,请在下方输入你的评论。 欢迎访问个人博客 guanchao.site 欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”
62 1
|
5月前
|
存储 JavaScript 前端开发
【js】函数概述学习笔记(8)
【js】函数概述学习笔记(8)
22 0