package.json 中的屬性詳解

npm是前端開發(fā)人員廣泛使用的包管理工具蜕青,項目中通過package.json來管理項目中所依賴的npm包的配置。package.json就是一個json文件沪袭,除了能夠描述項目的包依賴外叫倍,允許我們使用“語義化版本規(guī)則”指明你項目依賴包的版本枣抱,讓你的構(gòu)建更好地與其他開發(fā)者分享布疙,便于重復(fù)使用蚊惯。

1、package.json簡介

通過 npm init 初始化一個項目灵临,會生成3個目錄/文件拣挪, node_modules, package.json和 package.lock.json。其中package-lock.json文件是為了鎖版本俱诸。

2、package.json常用屬性

1)name

name是項目的名稱赊舶,命名規(guī)范:

名稱的長度必須小于或等于214個字符睁搭,不能以“.”和“_”開頭赶诊,不能包含大寫字母;

名稱可以作為參數(shù)被傳入require("")园骆,用來導(dǎo)入模塊舔痪,所以應(yīng)當(dāng)盡可能的簡短、語義化锌唾;

名稱不能和其他模塊的名稱重復(fù)锄码,可以使用npm view命令查詢模塊明是否重復(fù),如果不重復(fù)就會提示404晌涕。

2)version

version字段表示該項目包的版本號滋捶。

版本號的使用規(guī)范如下:

版本號的命名遵循語義化版本2.0.0規(guī)范,格式為:主版本號.次版本號.修訂號余黎,通常情況下重窟,修改主版本號是做了大的功能性的改動,修改次版本號是新增了新功能惧财,修改修訂號就是修復(fù)了一些bug巡扇;

如果某個版本的改動較大,并且不穩(wěn)定垮衷,可能如法滿足預(yù)期的兼容性需求厅翔,就需要發(fā)布先行版本,先行版本通過會加在版本號的后面搀突,通過“-”號連接以點分隔的標(biāo)識符和版本編譯信息:內(nèi)部版本(alpha)刀闷、公測版本(beta)和候選版本(rc,即release candiate)描姚。

3)description

description字段用來描述這個項目包涩赢。

4)keywords

keywords字段是一個字符串?dāng)?shù)組,表示這個項目包的關(guān)鍵詞轩勘。和description一樣筒扒,都是用來增加項目包的曝光率的。

5)author

author顧名思義就是作者绊寻,表示該項目包的作者花墩。它有兩種形式,一種是字符串格式

另一種是對象形式

6)dependencies

dependencies字段中聲明的是項目的生產(chǎn)環(huán)境中所必須的依賴包澄步。使用 npm 或 yarn 安裝npm包時冰蘑,該npm包會被自動插入到此配置項中:

當(dāng)在安裝依賴時使用--save參數(shù),也會將新安裝的npm包寫入dependencies屬性村缸。

該字段的值是一個對象祠肥,該對象的各個成員,分別由模塊名和對應(yīng)的版本要求組成梯皿,表示依賴的模塊及其版本范圍仇箱。

"dependencies": {

? ? "@baidu/san-native-cli": "1.10.14",

? ? "@baidu/talos-san-native": "1.3.125",

? ? "axios": "0.21.1",

? ? "lodash": "^4.17.15",

? ? "san-store": "2.1.3",

? ? "san-update": "2.1.0",

? },

下面三個版本號在安裝的時候代表不同的含義:

??????? "4.17.15" 表示安裝指定的4.17.15版本

??????? "~4.17.15" 表示安裝4.17.X中的最新版本

??????? "^4.17.15" 表示安裝4.X.X中的最新版本

7)devDependencies

devDependencies中聲明的是開發(fā)階段需要的依賴包县恕,如Webpack、Eslint剂桥、Babel等忠烛,用于輔助開發(fā)。它們不同于 dependencies权逗,因為它們只需安裝在開發(fā)設(shè)備上美尸,而無需在生產(chǎn)環(huán)境中運行代碼。

當(dāng)打包上線時并不需要這些包斟薇,可以使用 npm install --save-dev <PACKAGENAME> 這些依賴添加到 devDependencies 中师坎,這些依賴依然會在本地指定 npm install 時被安裝和管理,但是不會被安裝到生產(chǎn)環(huán)境中奔垦。

8)scripts

scripts 是 package.json中內(nèi)置的腳本入口屹耐,是key-value鍵值對配置,key為可運行的命令椿猎,可以通過 npm run 來執(zhí)行命令惶岭。除了運行基本的scripts命令,還可以結(jié)合pre和post完成前置和后續(xù)操作犯眠。

"scripts": {

? ? "dev": "node index.js",

? ? "predev": "node beforeIndex.js",

? ? "postdev": "node afterIndex.js"

}

9)main?& module & browser

main按灶,module和browser 3個字段來定義npm包的入口文件。

main : 定義了 npm 包的入口文件筐咧,browser 環(huán)境和 node 環(huán)境均可使用鸯旁。

module : 定義 npm 包的 ESM 規(guī)范的入口文件,browser 環(huán)境和 node - 環(huán)境均可使用量蕊。

browser : 定義 npm 包在 browser 環(huán)境下的入口文件铺罢。

10)module

module字段可以定義 npm 包的 ESM 規(guī)范的入口文件。

11)config

config字段用來配置scripts運行時的配置參數(shù)残炮。

3韭赘、npm和yarn的區(qū)別

npm 是 Node.js 的包管理工具;npm 通過 Node.js 模塊根目錄的 package.json 文件獲取模塊元數(shù)據(jù)和依賴關(guān)系等势就。

npm 有以下問題:

1.速度慢:npm 按照隊列執(zhí)行安裝每個 package泉瞻,只有當(dāng)前 package 安裝完成之后,才會進行后面的安裝苞冯。

2.同一個項目袖牙,npm 安裝的時候無法保持一致性,由于 package.json 文件中版本號的特點舅锄。

yarn的優(yōu)點:

速度快鞭达、并行安裝:npm是按照隊列執(zhí)行每一個包,也就是必須等到當(dāng)前包安裝完成之后才能繼續(xù)后面的安裝。而yarn是并行執(zhí)行所有任務(wù)碉怔,提高了性能烘贴。

離線模式:如果之前已經(jīng)安裝過一個軟件包,用yarn再次安裝時會從緩存中獲取撮胧,就不用像npm那樣再從網(wǎng)絡(luò)下載了。

安裝版本統(tǒng)一老翘。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芹啥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铺峭,更是在濱河造成了極大的恐慌墓怀,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卫键,死亡現(xiàn)場離奇詭異傀履,居然都是意外死亡,警方通過查閱死者的電腦和手機莉炉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門钓账,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人絮宁,你說我怎么就攤上這事猿诸∠冻冢” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長旬陡。 經(jīng)常有香客問我,道長逻淌,這世上最難降的妖魔是什么惜纸? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮忍饰,結(jié)果婚禮上贪嫂,老公的妹妹穿的比我還像新娘。我一直安慰自己喘批,他們只是感情好撩荣,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著饶深,像睡著了一般餐曹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上敌厘,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天台猴,我揣著相機與錄音,去河邊找鬼。 笑死饱狂,一個胖子當(dāng)著我的面吹牛曹步,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播休讳,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼讲婚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了俊柔?” 一聲冷哼從身側(cè)響起筹麸,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雏婶,沒想到半個月后物赶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡留晚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年酵紫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片错维。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡奖地,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出需五,到底是詐尸還是另有隱情鹉动,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布宏邮,位于F島的核電站泽示,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蜜氨。R本人自食惡果不足惜械筛,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望飒炎。 院中可真熱鬧埋哟,春花似錦、人聲如沸郎汪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煞赢。三九已至抛计,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間照筑,已是汗流浹背吹截。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工瘦陈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人波俄。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓晨逝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親懦铺。 傳聞我的和親對象是個殘疾皇子捉貌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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