package.json中的每一個(gè)字段你都了解了嗎

你真的了解package.json嗎枢泰?來(lái)看看吧遇西,這可能是最全的package解析

企業(yè)常說(shuō)需要有項(xiàng)目經(jīng)驗(yàn)的人棵磷,那經(jīng)驗(yàn)僅僅只是代碼和功能模塊開發(fā)的經(jīng)驗(yàn)嗎胚鸯,深入理解package.json文件也能讓別人對(duì)你刮目相看喲,以下將一一分析每個(gè)字段的真實(shí)含義鳖目。

在我們搭建的每一個(gè)項(xiàng)目的根目錄下一般默認(rèn)都會(huì)有一個(gè)package.json文件扮叨,它定義了當(dāng)前項(xiàng)目所需要的各種模塊以及依賴文件同時(shí)也包含了項(xiàng)目的配置信息例如名稱、版本领迈、許可證等等彻磁。

當(dāng)我們拿到一個(gè)項(xiàng)目運(yùn)行命令npm install的時(shí)候,會(huì)根據(jù)package.json文件中的配置自動(dòng)下載所需的模塊狸捅,生成node_modules(用來(lái)存放用包管理工具下載安裝的包的文件夾)

一衷蜓、package.json是什么?

package.json文件是一個(gè)JSON對(duì)象尘喝,從后綴名.json就可以看出磁浇,該對(duì)象的每一個(gè)成員就是當(dāng)前項(xiàng)目的一項(xiàng)設(shè)置,比如name就是項(xiàng)目名稱朽褪,version是項(xiàng)目版本號(hào)置吓。

{
 "name": "vue-project",
 "version": "0.1.0",
}

以上代碼就是定義了項(xiàng)目名稱以及版本號(hào)

Package.json就是一個(gè)對(duì)象,對(duì)象中包含了多項(xiàng)屬性缔赠,在企業(yè)項(xiàng)目中我們關(guān)注較多的devDependencies 和 dependencies字段也就是項(xiàng)目運(yùn)行運(yùn)行和開發(fā)環(huán)境所依賴的模塊

那其它的字段又表示什么衍锚?有什么重要的意義?

二嗤堰、配置字段詳細(xì)剖析

1戴质、name

package.json文件中最重要的就是name和version字段,這兩項(xiàng)是必填的。名稱和版本一起構(gòu)成一個(gè)標(biāo)識(shí)符置森,該標(biāo)識(shí)符被認(rèn)為是完全唯一的斗埂。對(duì)包的更改應(yīng)該與對(duì)版本的更改一起進(jìn)行符糊。

name必須是字符串凫海,不能以.或_開頭,不能有大寫字母男娄,因?yàn)槊Q最終成為URL的一部分因此不能包含任何非URL安全字符行贪。 npm官方建議我們不要使用與核心節(jié)點(diǎn)模塊相同的名稱。不要在名稱中加js或node模闲。如果需要可以使用engines來(lái)指定運(yùn)行環(huán)境建瘫。

該名稱會(huì)作為參數(shù)傳遞給require,因此它應(yīng)該是簡(jiǎn)短的尸折,但也需要具有合理的描述性啰脚。

2、version

Version項(xiàng)目版本號(hào)实夹, x.x.x的格式, 符合語(yǔ)義化版本規(guī)則(遵循“大版本.次要版本.小版本”的格式規(guī)定)橄浓,在項(xiàng)目每次發(fā)布時(shí)需提交新的且唯一版本號(hào)

3、description

項(xiàng)目描述信息亮航,description是字符串荸实,便于用戶在npm上搜索到我們的項(xiàng)目。

"description": "vue-elementui",

4缴淋、keywords

keywords是一個(gè)字符串組成的數(shù)組准给,便于用戶在npm上搜索到我們的項(xiàng)目

"keywords":["node.js","vue", "element"],

5、homepage

homepage項(xiàng)目的主頁(yè)地址重抖。

"homepage": "https://github.com/owner"

6露氮、bugs

項(xiàng)目問(wèn)題反饋的Url或報(bào)告問(wèn)題的郵箱地址。

"bugs":{"url":"https://github.com/owner","email":"xufang_2016@163.com"},

若只設(shè)置url钟沛,則bugs可用字符串來(lái)代替對(duì)象畔规。

"bugs":"https://github.com/owner",

7、license

項(xiàng)目許可證讹剔,讓使用者知道如何使用此項(xiàng)目,有何權(quán)限來(lái)使用我們的模塊油讯,以及使用該模塊有限制等

"license" : "BSD-3-Clause"

8、author,contributors

Author表示一個(gè)person對(duì)象

Contributors表示person的數(shù)組延欠,相當(dāng)于一群person

包含了作者及貢獻(xiàn)者(我們的模塊開發(fā)者以及眾多貢獻(xiàn)者)

一個(gè)對(duì)象中包含name陌兑、url和email

  "author": { 
     "name": "fangfang",
     "email": "xufang_2016@163.com", 
     "url": " http://www.itiedu.cn"
  }
"contributors":[{"name":" fangfang","email":" xufang_2016@163.com ","url": " http://www.itiedu.cn }]

9、files

files是一個(gè)文件數(shù)組由捎,描述了將軟件包作為依賴項(xiàng)安裝時(shí)要包括的條目兔综。如果在數(shù)組里面聲明了一個(gè)文件夾,那也會(huì)包含文件夾中的文件。某些特殊文件和目錄也被包括或排除在外软驰,無(wú)論它們是否存在于文件數(shù)組中涧窒。

簡(jiǎn)而言之,下載依賴包所包含的文件

10锭亏、main

主文件纠吴,也是項(xiàng)目的入口文件,默認(rèn)值是項(xiàng)目根目錄下的index.js慧瘤。

"main": "./index.js",

11戴已、browser

如果要在客戶端使用模塊,則應(yīng)使用browser字段來(lái)代替main字段锅减。

12糖儡、bin

bin用來(lái)指定各個(gè)內(nèi)部命令對(duì)應(yīng)的可執(zhí)行文件的位置。

"bin": {
  "mybuild": "./bin/mybuild.js"
}

上面代碼指定怔匣,mybuild命令對(duì)應(yīng)的可執(zhí)行文件為 bin 子目錄下的 mybuild.js握联。當(dāng)本地安裝myapp時(shí),Npm會(huì)尋找這個(gè)文件每瞒,在./node_modules/.bin/目錄下建立符號(hào)鏈接(快捷方式)金闽。在上面的例子中,mybuild.js會(huì)建立符號(hào)鏈接./node_modules/.bin/mybuild独泞。 ./node_modules/.bin/`目錄會(huì)在運(yùn)行時(shí)加入系統(tǒng)的PATH變量呐矾,因此在運(yùn)行npm時(shí),就可以不帶路徑懦砂,直接通過(guò)命令來(lái)調(diào)用這些腳本蜒犯。

npx mybuild

所有node_modules/.bin/目錄下的命令,都可以用npm run [命令]npx [命令]的格式運(yùn)行荞膘。bin中引用的文件需以#!/usr/bin/envnode開頭

13罚随、man

用來(lái)指定當(dāng)前模塊的man文檔的位置

 "man" :[ "./doc/doc.1" ]

14、directories

用來(lái)標(biāo)識(shí)模塊結(jié)構(gòu)的方法羽资,類似于commonjs包規(guī)范的介紹淘菩,想查看npm中的package.json,就可以看到doc屠升、lib潮改、man目錄及位置

15、repository

代碼存放的地址

 "repository": {
    "type" : "git",
    "url" : "https://github.com/npm/XXX.git"
  }

16腹暖、scripts

scripts指定了運(yùn)行腳本命令的npm命令行縮寫

  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build"
  },

比如serve指定了項(xiàng)目運(yùn)行命令npm run serve

npm run build表示項(xiàng)目打包

17汇在、config

用于添加命令行的環(huán)境變量

  "config":{
    "name" : "fang",
    "config" : { "port" : "8080" },
    "scripts" : { "serve": "vue-cli-service serve"}
  },

可以通過(guò)輸入命令npm config set來(lái)修改值

npm config set fang:port 8088

18、devDependencies 和 dependencies

dependencies脏答,依賴的意思糕殉,這些安裝包都是程序所依賴的包,需要發(fā)布到生產(chǎn)環(huán)境的.

dev即develop亩鬼,開發(fā)的意思,也就是開發(fā)環(huán)境下的依賴阿蝶。

--save參數(shù)表示將該模塊寫入dependencies屬性雳锋,--save-dev表示將該模塊寫入devDependencies屬性

例如安裝axios

安裝到開發(fā)環(huán)境 npm axios --save-dev

安裝到生產(chǎn)環(huán)境 npm axios --save

區(qū)別:

devDependencies中的插件只用于開發(fā)環(huán)境,不用于生產(chǎn)環(huán)境羡洁,而dependencies是要發(fā)布到生產(chǎn)環(huán)境

的玷过。比如babel有關(guān)的轉(zhuǎn)化es6到es5的依賴只是開發(fā)環(huán)境下轉(zhuǎn)化用,生產(chǎn)過(guò)程中是用不到焚廊,所以只用寫

在devDependencies中冶匹,而像vue或element-ui這種實(shí)際運(yùn)行會(huì)調(diào)用习劫,得寫在dependencies中咆瘟。

版本前可以加上各種限制,主要有以下幾種:
指定版本:比如1.2.2诽里,遵循“大版本.次要版本.小版本”的格式規(guī)定袒餐,安裝時(shí)只安裝指定版本。

波浪號(hào)(tilde)+指定版本:比如~1.2.2谤狡,表示安裝1.2.x的最新版本(不低于1.2.2)灸眼,但是不安裝1.3.x,也就是說(shuō)安裝時(shí)不改變大版本號(hào)和次要版本號(hào)墓懂。

插入號(hào)(caret)+指定版本:比如?1.2.2焰宣,表示安裝1.x.x的最新版本(不低于1.2.2),但是不安裝2.x.x捕仔,也就是說(shuō)安裝時(shí)不改變大版本號(hào)匕积。需要注意的是,如果大版本號(hào)為0榜跌,則插入號(hào)的行為與波浪號(hào)相同闪唆,這是因?yàn)榇藭r(shí)處于開發(fā)階段,即使是次要版本號(hào)變動(dòng)钓葫,也可能帶來(lái)程序的不兼容悄蕾。

latest:安裝最新版本。

舉例說(shuō)明下:

>1.0.2 大于當(dāng)前版本

>=1.0.2 大于等于當(dāng)前版本

<1.0.2 小于當(dāng)前版本

<=1.0.2小于等于當(dāng)前版本

~1.0.2 不低于1.0.2础浮,但不改變大版本號(hào)和次要版本號(hào)

^1.0.2 不低于1.0,2, 但不改變大版本號(hào)

1.2.x 表示1.2.3 ,1.2.4版本都支持

19帆调、peerDependencies

當(dāng)我們開發(fā)一個(gè)模塊的時(shí)候,如果當(dāng)前模塊與所依賴的模塊同時(shí)依賴一個(gè)第三方模塊豆同,并且依賴的是兩個(gè)不兼容的版本時(shí)就會(huì)出現(xiàn)問(wèn)題番刊。

比如,你的項(xiàng)目依賴A模塊和B模塊的1.0版诱告,而A模塊本身又依賴B模塊的2.0版撵枢。

大多數(shù)情況下民晒,這不構(gòu)成問(wèn)題,B模塊的兩個(gè)版本可以并存锄禽,同時(shí)運(yùn)行潜必。但是,有一種情況沃但,會(huì)出現(xiàn)問(wèn)題磁滚,就是這種依賴關(guān)系將暴露給用戶。

最典型的場(chǎng)景就是插件宵晚,比如A模塊是B模塊的插件垂攘。用戶安裝的B模塊是1.0版本,但是A插件只能和2.0版本的B模塊一起使用淤刃。這時(shí)晒他,用戶要是將1.0版本的B的實(shí)例傳給A,就會(huì)出現(xiàn)問(wèn)題逸贾。因此陨仅,需要一種機(jī)制,在模板安裝的時(shí)候提醒用戶铝侵,如果A和B一起安裝灼伤,那么B必須是2.0模塊。

peerDependencies字段咪鲜,就是用來(lái)供插件指定其所需要的主工具的版本

從npm 3.0版開始狐赡,peerDependencies不再會(huì)默認(rèn)安裝了

20、bundledDependencies

bundledDependencies是一個(gè)數(shù)組疟丙,指定發(fā)布時(shí)將定義的模塊一起打包

{
  "name": "vue-project",
  "version": "1.0.0",
  "bundledDependencies": [
    "elementui", "echarts"
  ]
}

21颖侄、optionaldependencies

如果出現(xiàn)包找不到或者安裝失敗時(shí),但又不影響npm繼續(xù)運(yùn)行隆敢,可將該包放在optionalDependencies對(duì)象中发皿。

 "optionalDependencies": {
    "echarts": "^4.9.0"
 }

表示的是定義的模塊如果安裝失敗,不會(huì)在輸入npm install時(shí)失敗

22拂蝎、engines

engines字段指明了該模塊運(yùn)行的平臺(tái)穴墅,比如Node``的某個(gè)版本,或者npm的某個(gè)版本或者瀏覽器温自。

"engines": {"node" : ">=8.9.0 <12.x", "npm" : "~6.14.12" }

23玄货、os

指定你的項(xiàng)目將運(yùn)行在什么操作系統(tǒng)上

"os" : [ "win32", "darwin", "linux" ],

24、cup

指定你的項(xiàng)目將運(yùn)行在什么cpu架構(gòu)上

"cpu" : [ "x64", "ia32" ]

25悼泌、private

決定我們的項(xiàng)目是否會(huì)發(fā)布松捉,如果設(shè)置為true,那么npm會(huì)拒絕發(fā)布

"private": true

26、publishConfig

模塊發(fā)布時(shí)生效馆里,設(shè)置一些值的集合

通常publishConfig會(huì)配合private來(lái)使用隘世,如果你只想讓模塊被發(fā)布到一個(gè)特定的npm倉(cāng)庫(kù)可柿,如一個(gè)內(nèi)部的倉(cāng)庫(kù)

  "private": true,
  "publishConfig": {
    "tag": "1.0.0",
    "registry": "https://registry.npmjs.org/",
    "access": "public"
   }

27、preferGlobal

表示在不安裝為全局時(shí)給予顯示警告

此文獻(xiàn)給有需要的人丙者,寫的匆忙&個(gè)人能力有限复斥,有錯(cuò)之處望見諒!共同進(jìn)步

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末械媒,一起剝皮案震驚了整個(gè)濱河市目锭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纷捞,老刑警劉巖痢虹,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異主儡,居然都是意外死亡奖唯,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門缀辩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)臭埋,“玉大人,你說(shuō)我怎么就攤上這事臀玄。” “怎么了畅蹂?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵健无,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我液斜,道長(zhǎng)累贤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任少漆,我火速辦了婚禮臼膏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘示损。我一直安慰自己渗磅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布检访。 她就那樣靜靜地躺著始鱼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪脆贵。 梳的紋絲不亂的頭發(fā)上医清,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音卖氨,去河邊找鬼会烙。 笑死负懦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的柏腻。 我是一名探鬼主播密似,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼葫盼!你這毒婦竟也來(lái)了残腌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贫导,失蹤者是張志新(化名)和其女友劉穎抛猫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孩灯,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闺金,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了峰档。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片败匹。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖讥巡,靈堂內(nèi)的尸體忽然破棺而出掀亩,到底是詐尸還是另有隱情,我是刑警寧澤欢顷,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布槽棍,位于F島的核電站,受9級(jí)特大地震影響抬驴,放射性物質(zhì)發(fā)生泄漏炼七。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一布持、第九天 我趴在偏房一處隱蔽的房頂上張望豌拙。 院中可真熱鬧,春花似錦题暖、人聲如沸按傅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)逞敷。三九已至,卻和暖如春灌侣,著一層夾襖步出監(jiān)牢的瞬間推捐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工侧啼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牛柒,地道東北人堪簿。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像皮壁,于是被迫代替她去往敵國(guó)和親椭更。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容