包是在模块基础上更深一步的抽象,它将某个独立的功能封装起来,用于发布、更新、依赖管理和版本控制。
Node.js 的包是一个目录,其中包含一个 JSON 格式的包说明文件package.json 。严格符合 CommonJS规范的包应该具有如下特征: node
1.package.json 必须在包的顶层目录下; 2.二进制文件应该在 bin 目录下; 3.JavaScript 代码应该在 lib 目录下; 4.文档应该在 doc 目录下; 5.单元测试应该在 test 目录下。
Node.js 对包的要求并无这么严格,只要顶层目录下有 package.json ,并符合一些规范便可。固然为了提升兼容性,咱们仍是建议你在制做包的时候,严格遵照 CommonJS 规范。git
1. 做为文件夹的模块web
模块与文件是一一对应的。文件不只能够是 JavaScript代码或二进制代码,还能够是一个文件夹。最简单的包,就是一个做为文件夹的模块。json
// 创建一个叫作 somepackage 的文件夹,在其中建立 index.js exports.hello = function(){ console.log("hello."); }; // 而后在 somepackage 以外创建 getpackage.js ,内容以下: var somePackage = require("./somepackage"); somePackage.hello(); // hello // 咱们使用这种方法能够把文件夹封装为一个模块,即所谓的包。包一般是一些模块的集合,在模块的基础上提供了更高层的抽象,至关于提供了一些固定接口的函数库。 经过定制 package.json,咱们能够建立更复杂、更完善、更符合规范的包用于发布。
package.json
在前面例子中的 somepackage 文件夹下,咱们建立一个叫作 package.json 的文件,内容以下所示:数组
{ "main" : "./lib/interface.js" } // 而后将 index.js 重命名为 interface.js 并放入lib子文件夹下。以一样的方式再次调用这个包,依然能够正常使用。 // Node.js 在调用某个包时,会首先检查包中 package.json 文件的 main 字段,将其做为包的接口模块,若是 package.json或main字段不存在,会尝试寻找 index.js 或 index.node 做为包的接口。
package.json 是 CommonJS 规定的用来描述包的文件,彻底符合规范的 package.json文件应该含有如下字段。函数
1.name:包的名称,必须是惟一的,由小写英文字母、数字和下划线组成,不能包含空格。 2.description:包的简要说明。 3.version:符合语义化版本识别规范的版本字符串。 4.keywords :关键字数组,一般用于搜索。 5.maintainers:维护者数组,每一个元素要包含name、email(可选)、web (可选)字段。 6.contributors:贡献者数组,格式与maintainers相同。包的做者应该是贡献者数组的第一个元素。 7.bugs:提交bug的地址,能够是网址或者电子邮件地址。 8.licenses :许可证数组,每一个元素要包含 type (许可证的名称)和 url (连接到许可证文本的地址)字段。 9.repositories:仓库托管地址数组,每一个元素要包含 type (仓库的类型,如 git )、url(仓库的地址)和 path (相对于仓库的路径,可选)字段。 10.dependencies:包的依赖,一个关联数组,由包名称和版本号组成。