npm 注册表包含包,其中许多也是 Node 模块,或者包含 Node 模块。继续阅读以了解它们的不同之处以及它们如何相互作用。

The npm registry contains packages, many of which are also Node modules, or contain Node modules. Read on to understand how they differ and how they interact.


About packages

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

A package is a file or directory that is described by a package.json file. A package must contain a package.json file in order to be published to the npm registry. For more information on creating a package.json file, see "Creating a package.json file".


Packages can be unscoped or scoped to a user or organization, and scoped packages can be private or public. For more information, see


About package formats


A package is any of the following:

  • a) 包含由 package.json 文件描述的程序的文件夹。

    a) A folder containing a program described by a package.json file.

  • b) 包含 (a) 的压缩包。

    b) A gzipped tarball containing (a).

  • c) 解析为 (b) 的 URL。

    c) A URL that resolves to (b).

  • d) 与 (c) 一起在注册表上发布的 <name>@<version>

    d) A <name>@<version> that is published on the registry with (c).

  • e) 指向 (d) 的 <name>@<tag>

    e) A <name>@<tag> that points to (d).

  • f) 具有满足 (e) 的 latest 标签的 <name>

    f) A <name> that has a latest tag satisfying (e).

  • g) 一个 git url,在克隆时会导致 (a)。

    g) A git url that, when cloned, results in (a).

npm 包 git URL 格式

npm package git URL formats

用于 npm 包的 Git URL 可以通过以下方式格式化:

Git URLs used for npm packages can be formatted in the following ways:

  • git://

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

The commit-ish can be any tag, sha, or branch that can be supplied as an argument to git checkout. The default commit-ish is HEAD.


About modules

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

A module is any file or directory in the node_modules directory that can be loaded by the Node.js require() function.

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

To be loaded by the Node.js require() function, a module must be one of the following:

  • 包含 package.json 文件的文件夹,其中包含 "main" 字段。

    A folder with a package.json file containing a "main" field.

  • 一个 JavaScript 文件。

    A JavaScript file.

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

Note: Since modules are not required to have a package.json file, not all modules are packages. Only modules that have a package.json file are also packages.

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

In the context of a Node program, the module is also the thing that was loaded from a file. For example, in the following program:

var req = require('request')

我们可能会说“变量 req 指的是 request 模块”。

we might say that "The variable req refers to the request module".

npm 中文网 - 粤ICP备13048890号