npm:主要属性

时间:2017-05-04 15:42:01

标签: javascript node.js npm package.json

npm init将生成名为package.json的文件。以下是内容:

{
  "name": "webpack-tut",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
   ....
}

我读了package.json doc

  

主要字段是模块ID   这是您的计划的主要入口点。也就是说,如果你的   package命名为foo,用户安装它,然后安装   require(“foo”),那么你的主模块的exports对象就是   返回。

     

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

     

对于大多数模块而言,最有意义的是拥有一个主脚本和   通常不多。

我真的不明白这一点。因为在我的项目和我下载的一些项目中,看起来这个字段没有效果。我更改了文件名,例如:"main": "temp.js",app仍然运行正常。

1 个答案:

答案 0 :(得分:0)

可以找到用于解析一个模块的节点算法伪代码here

package.json :: main - 如果要创建可由其folder解析的模块,则非常有用。这将是一个引用模块提供的整个库的文件。

在您的情况下,当其他模块需要您正在构建的模块时,将使用此项。

例如,众所周知的lodash可以拥有一个包含整个库的构建,可以像require('lodash')一样引用它。这是有效的,因为package.json文件具有"main: "lodash.js"。在许多情况下,这可能不是一个好主意,因为您可能只需要此库的一部分。因此,可以使用核心构建和引用以及其他必要的文件或构建。

另一个例子,如果您在名为libraryA./libraryA的文件夹中有模块package.json

{
  "name": "libraryA",
  "version": "1.0.0",
  "description": "",
  "main": "./lib/entireMegaHugeLibraryA.js",
   ....
}

名为libraryB的文件夹中的模块./libraryB。然后,您可以通过执行libraryArequire('../libraryA')。这将解析为../libraryA/lib/entireMegaHugeLibraryA.js

现在,如果您分析algorithm pseudocode,就会发现自己位于a. Parse X/package.json, and look for "main" field.行。