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è)置script
、license
等等棺牧。除了官方必須的一些參數(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)代碼變更時胚嘲,版本號按以下原則更新。
- 如果只是修復(fù)bug洛二,需要更新Z位馋劈。
- 如果是新增了功能,但是向下兼容晾嘶,需要更新Y位妓雾。
- 如果有大變動,向下不兼容垒迂,需要更新X位械姻。
????????版本號有了這個保證后,在申明第三方包依賴時机断,除了可依賴于一個固定版本號外楷拳,還可依賴于某個范圍的版本號。例如"argv": "0.0.x"表示依賴于0.0.x系列的最新版argv吏奸。