package.json文件說明解釋

1惜互、package.json是什么橄教?

???????什么是Node.js的模塊(Module)?在Node.js中浩村,模塊是一個庫或框架做葵,也是一個Node.js項目。Node.js項目遵循模塊化的架構(gòu)心墅,當(dāng)我們創(chuàng)建了一個Node.js項目蜂挪,意味著創(chuàng)建了一個模塊重挑,這個模塊的描述文件,被稱為package.json棠涮。
???????通常情況下package.json內(nèi)容出錯谬哀,會導(dǎo)致項目出現(xiàn)bug,甚至阻止項目的運行严肪。下面是normalize包的package.json文件:

{
  "name": "normalize.css",
  "version": "3.0.3",
  "description": "Normalize.css as a node packaged module",
  "style": "normalize.css",
  "files": [
    "LICENSE.md",
    "normalize.css"
  ],
  "homepage": "http://necolas.github.io/normalize.css",
  "repository": {
    "type": "git",
    "url": "git://github.com/necolas/normalize.css.git"
  },
  "main": "normalize.css",
  "author": {
    "name": "Nicolas Gallagher"
  },
  "license": "MIT",
  "gitHead": "2bdda84272650aedfb45d8abe11a6d177933a803",
  "bugs": {
    "url": "https://github.com/necolas/normalize.css/issues"
  },
  "_id": "normalize.css@3.0.3",
  "scripts": {},
  "_shasum": "acc00262e235a2caa91363a2e5e3bfa4f8ad05c6",
  "_from": "normalize.css@3.0.3",
  "_npmVersion": "2.7.0",
  "_nodeVersion": "0.10.35",
  "_npmUser": {
    "name": "necolas",
    "email": "nicolasgallagher@gmail.com"
  },
  "maintainers": [
    {
      "name": "tjholowaychuk",
      "email": "tj@vision-media.ca"
    },
    {
      "name": "necolas",
      "email": "nicolasgallagher@gmail.com"
    }
  ],
  "dist": {
    "shasum": "acc00262e235a2caa91363a2e5e3bfa4f8ad05c6",
    "tarball": "https://registry.npmjs.org/normalize.css/-/normalize.css-3.0.3.tgz"
  },
  "directories": {},
  "_resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-3.0.3.tgz",
  "readme": "ERROR: No README data found!"
}

2史煎、package.json屬性說明

????name - 包名.
????version - 包的版本號。
????description - 包的描述驳糯。
????homepage - 包的官網(wǎng)URL篇梭。
????author - 包的作者,它的值是你在https://npmjs.org網(wǎng)站的有效賬戶名酝枢,遵循“賬戶名<郵件>”的規(guī)則恬偷,例如:zhangsan <zhangsan@163.com>
????contributors - 包的其他貢獻(xiàn)者帘睦。
????dependencies / devDependencies - 生產(chǎn)/開發(fā)環(huán)境依賴包列表袍患。它們將會被安裝在 node_module 目錄下。
????repository - 包代碼的Repo信息竣付,包括type和URL诡延,type可以是git或svn,URL則是包的Repo地址古胆。
????main - main 字段指定了程序的主入口文件肆良,require('moduleName') 就會加載這個文件。這個字段的默認(rèn)值是模塊根目錄下面的 index.js逸绎。
????keywords - 關(guān)鍵字

???????上述參數(shù)是極為常見的參數(shù)惹恃,另外還可以設(shè)置scriptlicense等等棺牧。除了官方必須的一些參數(shù)外巫糙,我們也可以存儲我們自己的關(guān)于模塊的描述信息在package.json。

3陨帆、生成package.json文件

???????我們可以使用NPM生成package.json文件曲秉,它可以包含最基本的設(shè)置以及結(jié)果采蚀。

$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (node_modules) runoob                   # 模塊名
version: (1.0.0) 
description: Node.js 測試模塊(www.runoob.com)  # 描述
entry point: (index.js) 
test command: make test
git repository: https://github.com/runoob/runoob.git  # Github 地址
keywords: 
author: 
license: (ISC) 
About to write to ……/node_modules/package.json:      # 生成地址

{
  "name": "runoob",
  "version": "1.0.0",
  "description": "Node.js 測試模塊(www.runoob.com)",
  ……
}

Is this ok? (yes) yes

???????這樣就生成了一個最基本的package.json文件疲牵,注意手動更改的時候要完全遵循嚴(yán)格的JSON書寫格式,否則容易出現(xiàn)意想不到的簡單錯誤榆鼠。

4纲爸、關(guān)于版本號的描述

???????npm模塊的完整的版本號一般是【主版本 . 次要版本 . 補丁版本】,一般情況下妆够,次要版本號發(fā)生改變的話识啦,表示程序有重大更新负蚊。

(1)使用~表示版本范圍

?????????這里大概可以如此概述:① 補丁版本號缺失,則允許補丁版本號升級颓哮;② 次要版本號+補丁版本號缺失家妆,則允許次要版本號+補丁版本號升級。

標(biāo)識示例 描述 版本范圍 說明
~2.3.4 主版本+次要版本+補丁版本 2.3.4 <= version < 2.4.0 在主版本+次要版本不允許變更的前提下冕茅,允許補丁版本升級(補丁板板號下限是4伤极,無上限)。
~2.3 主版本+次要版本 2.3.0 <= version < 2.4.0 在主版本+次要版本不允許變更的前提下姨伤,允許補丁版本升級哨坪。
~2 主版本 2.0.0 <= version < 3.0.0 在主版本不允許變更的前提下,允許次要版本+補丁版本升級乍楚。
(2)使用^表示版本范圍

?????????這里大概可以如此概述:
?????????① 若主版本號不為0当编,則允許次要版本號+補丁版本號升級;② 若主版本號為0徒溪,次要版本號不為0忿偷,則允許補丁版本號升級;③ 若主版本號+次要版本號皆為0词渤,將無法升級模塊牵舱;④ 若主版本不為0,補丁版本缺失(將被視作0)缺虐,那么將允許次要版本+補丁版本升級到到最新芜壁;⑤ 若主版本為0,補丁版本缺失(將被視作0)高氮,那么允許補丁版本升級到最新慧妄;⑥ 若次要版本+補丁版本均缺失,此時補丁版本,被視作1剪芍,那么將允許次要版本+補丁版本升級到最新塞淹。

標(biāo)識示例 描述 版本范圍 說明
^1.3.4 主版本號不為0 1.3.4 <= version < 2.0.0 主版本不為0,允許次要版本+補丁版本升級(此例下限是1.3.4罪裹,上線是2.0.0但不匹配2.0.0)
^0.2.3 主版本號為0饱普,次要版本號不為0 0.2.3 <= version < 0.3.0 主版本為0,次要版本不為0状共,允許補丁版本升級(此例下限是0.2.3套耕,上限是0.3.0但不匹配0.3.0)
^0.0.3 主版本號+次要版本號均為0 0.0.3 <= version < 0.0.4 主版本號+次要版本號均為0,無法升級模塊
^1.3 主版本不為0峡继,補丁版本缺失 1.3.0 <= version < 2.0.0 主版本不為0冯袍,補丁版本因缺失被視作0,允許次要版本+補丁版本升級到到最新(此例下限是1.3.0,上線是2.0.0但不匹配2.0.0)
^0.2 主版本為0康愤,補丁版本缺失 0.2.0 <= version < 0.3.0 主版本為0儡循,補丁版本因缺失被視作0,允許補丁版本升級到最新(此例下限是0.2.0征冷,上限是0.3.0但不匹配0.3.0)
^1 主版本號不為0择膝,次要版本+補丁版本均缺失 1.0.0 <= version < 2.0.0 主版本不為0,次要版本+補丁版本因缺失被視作0检激,允許次要版本+補丁版本升級(此例下限是1.0.0调榄,上線是2.0.0但不匹配2.0.0)
^0 主版本號為0,次要版本+補丁版本均缺失 0.0.1 <= version < 1.0.0 主版本為0呵扛,次要版本因缺失被視作0每庆,補丁版本雖缺失但只能被視作1,允許缺失的次要版本+補丁版本升級到最新(此例下限是0.0.1今穿,上限是1.0.0但不匹配1.0.0)
(3)語義版本號

?????????使用NPM下載和發(fā)布代碼時都會接觸到版本號缤灵。NPM使用語義版本號來管理代碼,這里簡單介紹一下蓝晒。

?????????語義版本號分為X.Y.Z三位腮出,分別代表主版本號、次版本號和補丁版本號芝薇。當(dāng)代碼變更時胚嘲,版本號按以下原則更新。

  1. 如果只是修復(fù)bug洛二,需要更新Z位馋劈。
  2. 如果是新增了功能,但是向下兼容晾嘶,需要更新Y位妓雾。
  3. 如果有大變動,向下不兼容垒迂,需要更新X位械姻。

????????版本號有了這個保證后,在申明第三方包依賴時机断,除了可依賴于一個固定版本號外楷拳,還可依賴于某個范圍的版本號。例如"argv": "0.0.x"表示依賴于0.0.x系列的最新版argv吏奸。

5欢揖、本文參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者苦丁。
  • 序言:七十年代末浸颓,一起剝皮案震驚了整個濱河市物臂,隨后出現(xiàn)的幾起案子旺拉,更是在濱河造成了極大的恐慌产上,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛾狗,死亡現(xiàn)場離奇詭異晋涣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)沉桌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門谢鹊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人留凭,你說我怎么就攤上這事佃扼。” “怎么了蔼夜?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵兼耀,是天一觀的道長。 經(jīng)常有香客問我求冷,道長瘤运,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任匠题,我火速辦了婚禮拯坟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘韭山。我一直安慰自己郁季,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布钱磅。 她就那樣靜靜地躺著巩踏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪续搀。 梳的紋絲不亂的頭發(fā)上塞琼,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機(jī)與錄音禁舷,去河邊找鬼彪杉。 笑死,一個胖子當(dāng)著我的面吹牛牵咙,可吹牛的內(nèi)容都是我干的派近。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼洁桌,長吁一口氣:“原來是場噩夢啊……” “哼渴丸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤谱轨,失蹤者是張志新(化名)和其女友劉穎戒幔,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體土童,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡诗茎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了献汗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敢订。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖罢吃,靈堂內(nèi)的尸體忽然破棺而出楚午,到底是詐尸還是另有隱情,我是刑警寧澤尿招,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布醒叁,位于F島的核電站,受9級特大地震影響泊业,放射性物質(zhì)發(fā)生泄漏把沼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一吁伺、第九天 我趴在偏房一處隱蔽的房頂上張望饮睬。 院中可真熱鬧,春花似錦篮奄、人聲如沸捆愁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昼丑。三九已至,卻和暖如春夸赫,著一層夾襖步出監(jiān)牢的瞬間菩帝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工茬腿, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留呼奢,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓切平,卻偏偏與公主長得像握础,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子悴品,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

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

  • 什么是 NPM npm之于Node禀综,就像pip之于Python,gem之于Ruby,composer之于PHP简烘。 ...
    ihoey閱讀 6,253評論 2 36
  • 前言 js是從網(wǎng)頁小腳本演變過來的,至今定枷,前端的js庫孤澎,也不像一個真正的模塊。前端js經(jīng)歷了工具類庫依鸥、組件庫、前端...
    白昔月閱讀 3,284評論 2 11
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理悼沈,服務(wù)發(fā)現(xiàn)贱迟,斷路器,智...
    卡卡羅2017閱讀 134,713評論 18 139
  • 【原文】郗公值永嘉喪亂絮供,在鄉(xiāng)里衣吠,甚窮餒①。鄉(xiāng)人以公名德壤靶,傳共飴之②缚俏。公常攜兄子邁及外生周翼二小兒往食③。鄉(xiāng)人曰:“...
    林露如雨閱讀 990評論 0 0
  • 簡悅直播教練恬源閱讀 460評論 2 5