package.json中的重要屬性

破曉前發表於2018-03-07

導讀

當你通過npm下載一個package的時候,在這個package的根目錄下都會有一個package.json檔案,這個檔案描述了該package的詳細資訊,比如名稱,版本號,作者等。還有些屬性是作為開發人員需要熟悉的,下面的屬性都是在開發過程中一些常用的屬性。

屬性列表

dependencies

Dependencies are specified with a simple hash of package name to version range. The version range is a string which has one or more space-separated descriptors. Dependencies can also be identified with a tarball or git URL

該屬性描述了package的依賴關係,代表package必須在這些依賴的基礎上才能正常執行。當你下載package的時候,會同樣把package的依賴同樣下載下來。

devDependencies

Dependencies are specified with a simple hash of package name to version range. The version range is a string which has one or more space-separated descriptors. Dependencies can also be identified with a tarball or git URL

devDependencies下的依賴表示是在開發過程中需要的依賴。與dependencies不同,安裝的時候並不會下載裡面的依賴。

files

The 'files' field is an array of files to include in your project. If you name a folder in the array, then it will also include the files inside that folder.

當你釋出package時,具體那些檔案會發布上去呢?就是通過該屬性控制的,一般情況下,該屬性是這樣配置的。

"files": [

"lib"

]
複製程式碼

在這種配置情況下,當釋出package時,會把lib資料夾釋出到npm registry上。

main

The main field is a module ID that is the primary entry point to your program. That is, if your package is named foo, and a user installs it, and then does require("foo"), then your main module's exports object will be returned.

該屬性描述了一個package的入口。

如果存在一個名字為module-1 的package,在專案中,通過commonjs語法或者是ES6,你可能會這麼用。

// ES6
import 'module-1' from 'module-1'
// commonjs
const module-1 = require('module-1')
複製程式碼

上面的程式碼是怎樣的執行邏輯呢。

實際情況是這樣的,他會從node_modules 中查詢是否存在module-1 的packge.如果找到,接著去檢視在package路徑下是否有index.js, index.json 檔案,然後再去尋找packge.json 檔案中是否有main 欄位。最後根據main 屬性配置的資訊,找到指定的檔案,這樣,這個packge就可以正確的載入進來了。

上述情況只是一個簡單的描述,實際情況要複雜的多.詳細的邏輯請參考 nodejs module

大部分情況下,該屬性都是如下配置。

"main": "lib/index.js"
複製程式碼

參考連結

相關文章