1.背景介紹
NPM是什么?
NPM(node package manager)渐溶,通常稱為node包管理器辉浦。顧名思義,它的主要功能就是管理node包茎辐,包括:安裝宪郊、卸載掂恕、更新、查看弛槐、搜索懊亡、發(fā)布等。
npm的背后丐黄,是基于couchdb的一個(gè)數(shù)據(jù)庫(kù)斋配,詳細(xì)記錄了每個(gè)包的信息,包括作者灌闺、版本艰争、依賴、授權(quán)信息等桂对。它的一個(gè)很重要的作用就是:將開發(fā)者從繁瑣的包管理工作(版本甩卓、依賴等)中解放出來(lái),更加專注于功能的開發(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能夠在所有目錄下使用
通過(guò)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的配置工作主要是通過(guò)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è)屬性是必須要有的点晴,否則模塊就無(wú)法被安裝感凤,這兩個(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)短而語(yǔ)義化的值姐仅。
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