Node中的模块和包之间的区别?

时间:2013-11-15 18:51:32

标签: node.js package

我是Node noob。 Node.js中“package”和“module”之间有什么区别?

8 个答案:

答案 0 :(得分:39)

Modules是node.js的库。请参阅下面摘录的api:

  

Node有一个简单的模块加载系统。在节点,文件和模块中   是一对一的对应。

模块示例:

  • Circle.js
  • Rectangle.js
  • Square.js

包是将一个或多个模块(库)分组(或打包)在一起。这些通常由其他包或您自己的项目使用。 Node.js使用package manager,您可以在其中找到并安装数千个包。

包裹示例:

Shapes             <- Package name
  - Circle.js      <- 
  - Rectangle.js   <- Modules that belong to the Shapes package
  - Square.js      <-

基本上,您可以安装软件包Shapes,并可以访问Circle,Rectangle和Square模块。

答案 1 :(得分:4)

每个节点应用都是package,并且应该有package.json个文件。那些充当中间件(或相当于库)并且打算安装在其他应用程序中的应用程序是modules

简而言之,所有modules都是packages,但并非所有packages都可以用作modules,但很多都可以用作dependencies

如果在package.json文件中列为node_modules,则会安装模块,并将其放入npm文件夹,但package.json通过其modules进行递归文件添加他们依赖的{{1}}。

答案 2 :(得分:3)

我搜索了node.js doc,发现了their def for module

  

在Node.js模块系统中,每个文件都被视为一个单独的模块。

npm有一些官方定义here

  

快速摘要
   package 是package.json描述的文件或目录。这可以以多种不同的方式发生!有关更多信息,请参见下面的“什么是软件包?”。
  模块是Node.js的require()可以加载的任何文件或目录。同样,有几种配置可以使这种情况发生。有关更多信息,请参见下面的“什么是模块?”。

答案 3 :(得分:2)

模块是一个具有一些合理功能的JavaScript文件。

是一个包含一个或多个模块的目录,以及一个包含有关包的元数据的package.json文件。

一个包可以非常 简单 ,例如,下划线只有一个Javascript文件(我们看到它的两个版本是常规的和缩小的version和package.json)

open@open-PC MINGW64 ~/Desktop/module-package-demo/node_modules/underscore
$ dir
LICENSE       README.md      underscore-min.js
package.json  underscore.js  underscore-min.js.map

Express 这样的 复杂 包在根目录中有一个Javascript文件,但在其子目录中有更多的Javascript文件文件和更多在

的子目录中
open@open-PC MINGW64 ~/Desktop/module-package-demo/node_modules/express
$ dir
History.md  index.js  lib  LICENSE  package.json  Readme.md

现在人们将包称为模块非常普遍。

答案 4 :(得分:1)

你能做的一切require()都是一个模块。在CommonJS世界的大多数情况下,它的一个文件就是一个模块。

包可以包含多个模块,但是您通常会加载入口点(main),该入口点在package.json index.js 如果未提供main属性,例如:require('express')

但如果你知道位置,你也可以要求另一个文件(不是主文件),例如:require("express/lib/application")(在node.js中你可以省略扩展名: .js

如果某个软件包列在package.jsondependencies属性中,则可以访问其他软件包中的模块。

实际上,npm会将所有软件包安装到 node_modules 中,这会让人感到困惑,因为它应该是 node_packages

https://nodejs.org/api/modules.html

答案 5 :(得分:1)

来自https://docs.npmjs.com/about-packages-and-modules

关于包裹

package package.json 描述的文件或目录 文件。软件包必须包含 package.json 文件,才能成为 发布到npm注册表。

[...]

关于模块

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

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

  • 带有 package.json 文件的文件夹,其中包含“ main” 字段。
  • 其中包含 index.js 文件的文件夹。
  • 一个JavaScript文件。

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


在Node程序的上下文中,模块也是 是从文件 加载的内容。例如,在下面 程序:

var req = require('request')

我们可能会说“变量 req 请求模块”。

答案 6 :(得分:-1)

包装

包是package.json文件描述的文件或目录。 软件包必须包含package.json文件才能发布到npm注册表。

模块

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

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

  • 包含package.json文件的文件夹,其中包含“主”字段。

  • 其中包含index.js文件的文件夹。一个JavaScript文件。

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

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

var req = require('request')

我们可能会说“变量req指向请求模块”。

注意

由于模块不需要具有package.json文件, 并非所有模块都是软件包。也只有具有package.json文件的模块才是 包。

答案 7 :(得分:-2)

  • 模块是具有某些可重用功能的单个javascript文件。
  • 包是其中包含一个或多个模型的目录。