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

我是Node noob。 Node.js中“包”和“模块”有什么不同?

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

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

模块示例:

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

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

包的例子:

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

本质上,你可以安装包, Shapes ,并有权访问圆形,矩形和方形模块。

每个Node应用程序都是一个package ,并且应该有一个package.json文件。 这些应用程序充当中间件(或等同于库),并且被安装在其他应用程序中的是modules

简而言之,所有的modules都是packages ,但并不是所有的packages都被用作modules ,尽pipe很多都可以。

如果将模块列为package.json文件中的dependencies ,并将其放置到node_modules文件夹中,则模块将被安装,但npm将通过package.json文件recursion以添加它们依赖的modules

一切你可以require()是一个模块。 CommonJS世界大多数情况下,一个文件就是一个模块。

一个包可以包含多个模块,但是通常在package.json中指定入口点( main ),或者在没有提供main属性的情况下加载index.js ,例如: require('express')

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

如果包在package.json的dependencies属性中列出,则包可以从其他包中访问模块。

实际上npm 会把所有的软件包都安装到node_modules中,因为它应该是node_packages

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