我是Node noob。 Node.js中“package”和“module”之间有什么区别?
答案 0 :(得分:39)
Modules是node.js的库。请参阅下面摘录的api:
Node有一个简单的模块加载系统。在节点,文件和模块中 是一对一的对应。
模块示例:
包是将一个或多个模块(库)分组(或打包)在一起。这些通常由其他包或您自己的项目使用。 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.json的dependencies
属性中,则可以访问其他软件包中的模块。
实际上,npm会将所有软件包安装到 node_modules 中,这会让人感到困惑,因为它应该是 node_packages 。
答案 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)