package.json
俗稱 依賴配置文件(我本身取的名),最主要的做用就是,管理項目中所用到的依賴。它自己的做用是爲 node.js 模塊服務的,模塊有不少屬性,爲了描述模塊的特性,package.json
也被稱做模塊的 描述文件
。html
name
和 version
是 package.json
中最重要的兩個屬性,並且是必填的。這兩個屬性一塊兒就造成了 npm 模塊惟一標識符。分別表示 模塊的 名稱 和 版本。名稱通常不會變,版本會隨着模塊的修改而更新變更。前端
這兩個字段都是用來在 npm
官網上搜索的, 區別是一個是字符串, 一個是字符串數組。node
這兩個屬性,都是用來記錄項目中所用到的依賴。區別是,一個是用來記錄開發環境所用的依賴,一個是記錄生產環境所用到的依賴。git
好比,對於大多數前端項目來講,gulp
等構件工具及插件,可能只在開發環境中使用,而在生產環境只關心最終生成的 dist
文件,因此,gul
p 等插件 就應該放在 devDependencies
下。npm
經過 npm i xxx -save
、npm i xxx -s
、yarn add xxx -S
安裝的依賴會添加到 dependencies
下;json
經過 npm i xxx -save-dev
、npm i xxx -d
、yarn add xxx -D
安裝的依賴會添加到 devDependencies
下;gulp
可讓宿主環境擁有某個特定版本的依賴數組
前提:項目X
依賴 模塊A
, 模塊A
依賴 模塊B
插件
狀況一:若是 模塊B
定義在 模塊A
的 dependencies
字段中
結果:模塊B
只能被 模塊A 引用
;
可能的好處:假如 項目X 也依賴 模塊B,版本不同,則能夠互不干擾。
可能的壞處:假如 項目X 也依賴 模塊B,且版本同樣,則會有兩個如出一轍的 模塊B
項目X └──node_modules/ └── 模塊A └──node_modules/ └── 模塊B
狀況二:若是 模塊B
定義在 模塊A
的 peerDependencies
字段中
結果:項目X
也會下載 或 檢查 模塊b
的版本。
可能的好處:假如 項目X 也依賴 模塊B,版本不同,則會在控制檯以警告的形式提示版本問題。
可能的壞處:假如 項目X 也依賴 模塊B,且版本同樣,只用下載一遍。
項目X └──node_modules/ ├── 模塊a └── 模塊b
結論:定義在 peerDependencies
中的依賴,在宿主環境中,也會被下載 或 被檢查版本。
files
是一個包含項目中的文件的數組。若是命名了一個文件夾,那也會包含文件夾中的文件。(除非被其餘條件忽略了 .npmignore .gitignore)
在 npm publish
的時候,會依據這個配置 上傳你的文件。
scripts
是一個由腳本命令組成的 kye value 對象。