npm 注册表包含包,其中许多也是 Node 模块,或者包含 Node 模块。继续阅读以了解它们之间的区别以及它们如何交互。

关于包

一个**包**是一个文件或目录,由一个package.json文件描述。要发布到 npm 注册表,包必须包含一个package.json文件。有关创建package.json文件的更多信息,请参阅“创建 package.json 文件”。

包可以是无范围的,也可以是用户或组织的范围,范围内的包可以是私有的或公开的。有关更多信息,请参阅

关于包格式

一个包可以是以下任何一种

  • a) 包含一个由package.json文件描述的程序的文件夹。
  • b) 包含 (a) 的压缩 tar 包。
  • c) 解析为 (b) 的 URL。
  • d) 一个已发布到注册表并包含 (c) 的<name>@<version>
  • e) 一个指向 (d) 的<name>@<tag>
  • f) 一个具有满足 (e) 的latest标记的<name>
  • g) 一个克隆后会生成 (a) 的git URL。

npm 包 git URL 格式

用于 npm 包的 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可以是任何标记、sha 或分支,可以作为参数提供给git checkout。默认commit-ishHEAD

关于模块

一个**模块**是node_modules目录中的任何文件或目录,可以由 Node.js 的require()函数加载。

要由 Node.js 的require()函数加载,模块必须是以下之一

  • 一个包含package.json文件(其中包含"main"字段)的文件夹。
  • 一个 JavaScript 文件。

**注意:**由于模块不需要具有package.json文件,因此并非所有模块都是包。只有具有package.json文件的模块才是包。

在 Node 程序的上下文中,module也是从文件中加载的内容。例如,在以下程序中

var req = require('request')

我们可能会说“变量req引用request模块”。