目录
关于包和模块
目录
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-ish
是HEAD
。
关于模块
一个**模块**是node_modules
目录中的任何文件或目录,可以由 Node.js 的require()
函数加载。
要由 Node.js 的require()
函数加载,模块必须是以下之一
- 一个包含
package.json
文件(其中包含"main"
字段)的文件夹。 - 一个 JavaScript 文件。
**注意:**由于模块不需要具有package.json
文件,因此并非所有模块都是包。只有具有package.json
文件的模块才是包。
在 Node 程序的上下文中,module
也是从文件中加载的内容。例如,在以下程序中
var req = require('request')
我们可能会说“变量req
引用request
模块”。