【问题标题】:npm: meaning of main attributenpm:主要属性的含义
【发布时间】:2017-05-05 01:53:06
【问题描述】:

npm init 将生成一个名为package.json 的文件。内容如下:

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

我读到了这个package.json doc

主要字段是模块 ID 这是您程序的主要入口点。也就是说,如果你的 包名为 foo,用户安装它,然后执行 require("foo"),那么你的主模块的导出对象将是 返回。

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

对于大多数模块,拥有一个主脚本和 其他的通常不多。

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

【问题讨论】:

  • 这取决于每个特定的模块。你可以提供任何,看看和弄清楚。这也取决于你如何导入模块。
  • 您是否使用require("./my-webpack-tut") 来运行您的应用程序?还是您以其他方式运行它?

标签: javascript node.js npm package.json


【解决方案1】:

解析一个模块的节点算法伪代码见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 的文件夹中。然后你可以通过require('../libraryA') 来要求libraryA。这将解析为../libraryA/lib/entireMegaHugeLibraryA.js。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    相关资源
    最近更新 更多