npm 包和模块

官方文档:https://docs.npmjs.com/about-packages-and-modules

包的定义

package,包,它是一个由 package.json 描述的文件或者目录,一个包必须包含一个 package.json 文件。

包的格式

  1. 一个文件夹包含一个由 package.json 文件描述的程序。
  2. 一个包含 1 的压缩包
  3. 一个可以解析为 2 的URL
  4. 一个发布过的 <name>@<version> 且它包含一个 3
  5. 一个 <name>@<tag> 指向 4
  6. 一个包含 latest 标签的 <name> 且它满足 5
  7. 一个 git 的url,克隆的文件是 1

而 git 的 url 满足以下情况:

  • git://github.com/user/project.git#commit-ish
  • git+ssh://user@hostname:project.git#commit-ish
  • git+http://user@hostname/project/blah.git#commit-ish
  • git+https://user@hostname/project/blah.git#commit-ish

commit-ish 可以是任何标志,比如分支名、hash值这些可以作为git checkout 参数的内容,默认的 commit-ishmaster

模块的定义

module,模块,它是 node_modules 里面的任何可以被 Node.jsrequire()函数所加载的文件或者目录。形式如下:

  1. 一个包含 package.json 文件的文件夹
  2. 一个 JavaScript 文件

由于模块不一定包含一个 package.json 文件,而包一定包含,所以模块不一定是包,但包含 package.json 文件的模块也是一个包。

Node.js 的程序上下文中,模块也可以理解为一个从文件里被加载的事物,比如

1
var req = require('request');

那么我们就会说 reqrequest 模块的引用。