2017-05-04 211 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.行。