如何在 package.json 中使用 'main' 参数?

我已经做了相当多的搜索。但是,仍然对 Node 项目的 package.json 中的 “main” 参数有疑问。

  1. 填写此字段有何帮助?以另一种方式询问,如果此字段显示,我可以以不同的样式启动模块吗?
  2. 是否可以在主参数中填充多个脚本?如果是,它们是否会作为两个线程启动?如果不是,如何在模块中启动两个脚本并让它们并行运行?

我知道第二个问题很奇怪。这是因为我在OpenShift上托管了一个Node.js应用程序,但该应用程序由两个主要组件组成。一个是 REST API,另一个是通知传递服务。

我担心如果通知传递过程作为单个线程实现,则会阻止 REST API。但是,他们必须连接到相同的MongoDB盒式磁带。此外,如果可能的话,如果两个组件可以在同一个齿轮中服务,我想节省一个齿轮。

欢迎任何建议。


答案 1

npm 文档中可以看出

主字段是模块 ID,它是程序的主要入口点。也就是说,如果你的软件包被命名为foo,并且用户安装了它,然后确实需要(“foo”),那么你的主模块的导出对象将被返回。

这应该是相对于包文件夹根目录的模块 ID。

对于大多数模块来说,拥有一个主脚本是最有意义的,而且通常没有太多其他内容。

简而言之:

  1. 仅当包的入口点与其根文件夹中的入口点不同时,才需要在 中设置一个参数。例如,人们经常将入口点放在 或 中,在这种情况下,相应的脚本必须描述为 。mainpackage.jsonindex.jslib/index.jslib/<packagename>.jsmainpackage.json
  2. 不能将两个脚本作为 ,因为必须明确定义入口点。mainrequire('yourpackagename')

答案 2

为了回答第一个问题,加载模块的方式取决于模块入口点和 package.json 的主参数。

假设您有以下文件结构:

my-npm-module
|-- lib
|   |-- module.js
|-- package.json

package.json 中没有 main 参数,则必须通过给出模块入口点来加载模块:。require('my-npm-module/lib/module.js')

如果按如下方式设置 package.json main 参数,则可以按以下方式加载模块:。"main": "lib/module.js"require('my-npm-module')