npm與package.json

1.背景介紹

NPM是什么?
NPM(node package manager),通常稱為node包管理器。顧名思義,它的主要功能就是管理node包,包括:安裝、卸載、更新、查看、搜索、發(fā)布等。
npm的背后,是基于couchdb的一個(gè)數(shù)據(jù)庫,詳細(xì)記錄了每個(gè)包的信息,包括作者、版本、依賴、授權(quán)信息等。它的一個(gè)很重要的作用就是:將開發(fā)者從繁瑣的包管理工作(版本、依賴等)中解放出來,更加專注于功能的開發(fā)。

我們需要了解什么?
1.npm的安裝、卸載、升級(jí)、配置
2.npm的使用:package的安裝、卸載、升級(jí)、查看、搜索、發(fā)布
3.npm包的安裝模式:本地 vs 全局
4.package.json:包描述信息
5.package版本:常見版本聲明形式

2.知識(shí)剖析

npm包安裝模式:
node包的安裝分兩種:本地安裝、全局安裝。兩者的區(qū)別如下:
本地安裝:npm install pkg,package會(huì)被下載到當(dāng)前所在目錄,也只能在當(dāng)前目錄下使用。
全局安裝:npm install -g pkg,package會(huì)被下載到到特定的系統(tǒng)目錄下,安裝的package能夠在所有目錄下使用

通過package.json進(jìn)行安裝:
如果我們的項(xiàng)目依賴了很多package,一個(gè)一個(gè)地安裝那將是個(gè)體力活。我們可以將項(xiàng)目依賴的包都在package.json這個(gè)文件里聲明,然后一行命令搞定
npm install

其他package安裝命令
運(yùn)行如下命令,列出所有npm install可能的參數(shù)形式:

npm install --help
npm uninstall pkg:卸載
npm ls:查看當(dāng)前目錄安裝了哪些package
npm info pkg:查看特定package的詳細(xì)信息
npm update pkg:package更新
npm search pgk:搜索

NPM配置
npm的配置工作主要是通過npm config命令,主要包含增、刪、改、查幾個(gè)步驟,下面就以最為常用的proxy配置為例:

設(shè)置proxy:npm set prox
查看proxy:npm get proxy
刪除proxy:npm delete proxy
查看所有配置:npm config list
直接修改配置文件:npm config edit

3.常見問題

什么是package.json?

4.解決方案

假設(shè)當(dāng)我們下載了node應(yīng)用,這個(gè)node應(yīng)用依賴于A、B、C三個(gè)包,如果沒有package.json,我們需要人肉安裝這個(gè)三個(gè)包(如果對(duì)版本有特定要求就更悲劇了):

npm install A
npm install B
npm install C

有了package.json,一行命令安裝所有依賴。
npm install

5.編碼實(shí)戰(zhàn)

npm 允許在package.json文件里面,使用scripts字段定義腳本命令。
"scripts": {"build": "node build.js"}
上面代碼是package.json文件的一個(gè)片段,里面的scripts字段是一個(gè)對(duì)象。它的每一個(gè)屬性,對(duì)應(yīng)一段腳本。比如,build命令對(duì)應(yīng)的腳本是node build.js.
命令行下使用npm run命令,就可以執(zhí)行這段腳本。
npm run build
node build.js

6.擴(kuò)展思考

package.json字段簡(jiǎn)介

package.json中最重要的屬性是name和version兩個(gè)屬性,這兩個(gè)屬性是必須要有的,否則模塊就無法被安裝,這兩個(gè)屬性一起形成了一個(gè)npm模塊的唯一標(biāo)識(shí)符。模塊中內(nèi)容變更的同時(shí),模塊版本也應(yīng)該一起變化。

name屬性就是你的模塊名稱,下面是一些命名規(guī)則:
1.必須小于等于214個(gè)字節(jié),包括前綴名稱在內(nèi)(如 x/xmodule)。
2.name屬性會(huì)成為模塊url、命令行中的一個(gè)參數(shù)或者一個(gè)文件夾名稱,任何非url安全的字符在name中都不能使用,也不能以"_"或"."開頭,不能含有大寫字母
3.不要使用和node核心模塊一樣的名稱,明早不要含有"js"和"node"。
4.name屬性也許會(huì)被寫在require()的參數(shù)中,所以最好取個(gè)簡(jiǎn)短而語義化的值。
5.創(chuàng)建一個(gè)模塊前可以先到https://www.npmjs.com查查name是否已經(jīng)被占用.

version:
package的版本,當(dāng)package發(fā)生變化時(shí),version也應(yīng)該跟著一起變化,同時(shí),version必須可以被npm依賴的一個(gè)node-semver模塊解析。

description:
package的應(yīng)用依賴模塊,即別人要使用這個(gè)package,至少需要安裝哪些東東。應(yīng)用依賴模塊會(huì)安裝到當(dāng)前模塊的node_modules目錄下。

devDependencies:
package的開發(fā)依賴模塊,即別人要在這個(gè)package上進(jìn)行開發(fā)。

常見版本聲明形式:
1."~1.2.3" 是神馬意思呢:
"~1.2.3" = ">=1.2.3 <1.3.0"

2."1.x.x"是什么意思呢:
"1.2.x" = ">=1.2.0 <1.3.0"

3.~version "約等于",^version "兼容版本

7.參考文獻(xiàn)

npm package.json屬性詳解:http://www.cnblogs.com/tzyy/p/5193811.html

PPT:http://localhost:63341/PPT/PPT/JS-11-npm%E4%B8%8Epackage.json.html#/
視頻:https://v.qq.com/x/page/w0539du6802.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容