2017-05-04 210 views
0

npm init将生成一个名为package.json的文件。以下是内容:npm:主属性的含义

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

我读了这个package.json doc

主要领域是一个模块ID 这是主要的入口点到您的程序。也就是说,如果你的 包名为foo,并且用户安装它,然后 需要(“foo”),那么你的主模块的exports对象将返回 。

这应该是一个模块ID相对于您的包的根文件夹 文件夹。

对于大多数模块来说,使用主脚本和 通常没有其他更多的意义。

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

+0

它取决于每个特定的模块。你可以提供任何,看看,弄清楚。还取决于你如何导入模块。 –

+0

您是否在使用'require(“./ my-webpack-tut”)'来运行您的应用程序?或者你以其他方式运行它? –

回答

0

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

package.json :: main - 如果您想创建一个可以通过它的folder解决的模块,这非常有用。这将是一个引用模块提供的整个库的文件。

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

例如,众所周知的lodash可以有一个版本保存整个库,可以参考像require('lodash')。这是有效的,因为package.json文件有"main: "lodash.js"。在很多情况下,这可能不是一个好主意,因为你可能只需要这个库的一部分。相反,可以根据需要使用核心构建和引用以及其他文件或构建。

再举一个例子,如果你被点名了./libraryApackage.json一个文件夹中有模块libraryA

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

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

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