1. 程式人生 > >npm應用及介紹

npm應用及介紹

NPM小結

nodejs的出現,可以算是前端里程碑式的一個事件,它讓前端攻城獅們擺脫了瀏覽器的束縛,踏上了一個更加寬廣的舞臺。前端的可能性,從此更加具有想象空間。

隨著一系列基於nodes的應用/工具的出現,工作中與nodejs打交道的機會越來越多。無論在node應用的開發,還是使用中,包管理都扮演著一個很重要的作用。NPM(node package manager),作為node的包管理工具,極大地便利了我們的開發工作,很有必要了解一下。

NPM是什麼

NPM(node package manager),通常稱為node包管理器。顧名思義,它的主要功能就是管理node包,包括:安裝、解除安裝、更新、檢視、搜尋、釋出等。

npm的背後,是基於couchdb的一個數據庫,詳細記錄了每個包的資訊,包括作者、版本、依賴、授權資訊等。它的一個很重要的作用就是:將開發者從繁瑣的包管理工作(版本、依賴等)中解放出來,更加專注於功能的開發。

npm官網:https://npmjs.org/

npm官方文件:https://npmjs.org/doc/README.html

我們需要了解什麼

  1. npm的安裝、解除安裝、升級、配置
  2. npm的使用:package的安裝、解除安裝、升級、檢視、搜尋、釋出
  3. npm包的安裝模式:本地 vs 全域性
  4. package.json:包描述資訊
  5. package版本:常見版本宣告形式

npm包安裝模式

在具體介紹npm包的管理之前,我們首先得來了解一下npm包的兩種安裝模式。

本地安裝 vs 全域性安裝(重要)

node包的安裝分兩種:本地安裝、全域性安裝。兩者的區別如下,後面會通過簡單例子說明

  • 本地安裝:package會被下載到當前所在目錄,也只能在當前目錄下使用。
  • 全域性安裝:package會被下載到到特定的系統目錄下,安裝的package能夠在所有目錄下使用。

npm install pkg - 本地安裝

執行如下命令,就會在當前目錄下安裝grunt-cli

(grunt命令列工具)

npm install grunt-cli

安裝結束後,當前目錄下回多出一個node_modules目錄,grunt-cli就安裝在裡面。同時注意控制檯輸出的資訊:

[email protected] node_modules/grunt-cli
├── [email protected]
├── [email protected] ([email protected])
└── [email protected] ([email protected], [email protected])

簡單說明一下:

  • [email protected]:當前安裝的package為grunt-cli,版本為0.19
  • node_modules/grunt-cli:安裝目錄
  • [email protected]:依賴的包有resolve、nopt、findup-sync,它們各自的版本、依賴在後面的括號裡列出來

npm install -g pkg- 全域性安裝

上面已經安裝了grunt-cli,然後你跑到其他目錄下面執行如下命令

grunt

果斷提示你grunt命令不存在,為什麼呢?因為上面只是進行了本地安裝,grunt命令只能在對應安裝目錄下使用。

-bash: grunt: command not found

如果為了使用grunt命令,每到一個目錄下都得重新安裝一次,那不抓狂才怪。腫麼辦呢?

很簡單,採用全域性安裝就行了,很簡單,加上引數-g就可以了

npm install -g grunt-cli

於是,在所有目錄下都可以無壓力使用grunt命令了。這個時候,你會注意到控制檯輸入的資訊有點不同。主要的區別在於安裝目錄,現在變成了/usr/local/lib/node_modules/grunt-cli/usr/local/lib/node_modules/也就是之前所說的全域性安裝目錄啦。

[email protected] /usr/local/lib/node_modules/grunt-cli
├── [email protected]
├── [email protected] ([email protected])
└── [email protected] ([email protected], [email protected])

npm包管理

npm的包管理命令是使用頻率最高的,所以也是我們需要牢牢記住並熟練使用的。其實無非也就是幾個動作:安裝、解除安裝、更新、檢視、搜尋、釋出等。

安裝最新版本的grunt-cli

npm install grunt-cli

安裝0.1.9版本的grunt-cli

npm install [email protected]"0.1.9"

通過package.json進行安裝

如果我們的專案依賴了很多package,一個一個地安裝那將是個體力活。我們可以將專案依賴的包都在package.json這個檔案裡宣告,然後一行命令搞定

npm install

其他package安裝命令

執行如下命令,列出所有npm install可能的引數形式

npm install --help

輸出如下,有興趣的童鞋可以瞭解下

npm install <tarball file>
npm install <tarball url>
npm install <folder>
npm install <pkg>
npm install <pkg>@<tag>
npm install <pkg>@<version>
npm install <pkg>@<version range>

解除安裝grunt-cli

比如解除安裝grunt-cli

npm uninstall grunt-cli

解除安裝0.1.9版本的grunt-cli

npm uninstall [email protected]"0.1.9"

npm ls:檢視安裝了哪些包

執行如下命令,就可以檢視當前目錄安裝了哪些package

npm ls

輸出如下

/private/tmp/npm
└─┬ [email protected]
  ├─┬ [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ └─┬ [email protected]
  │ │   ├── [email protected]
  │ │   └── [email protected]
  │ └── [email protected]
  ├─┬ [email protected]
  │ └── [email protected]
  └── [email protected]

輸出如下,同樣,如果是要檢視package的全域性安裝資訊,加上-g就可以

npm ls pkg:檢視特定package的資訊

執行如下命令,輸出grunt-cli的資訊

npm ls grunt-cli

輸出的資訊比較有限,只有安裝目錄、版本,如下:

/private/tmp/npm
└── [email protected] 

如果要檢視更詳細資訊,可以通過npm info pkg,輸出的資訊非常詳盡,包括作者、版本、依賴等。

npm info grunt-cli

npm update pkg:package更新

npm update grunt-cli

npm search pgk:搜尋

輸入如下命令

npm search grunt-cli

返回結果如下

npm http GET http://registry.npmjs.org/-/all/since?stale=update_after&startkey=1375519407838
npm http 200 http://registry.npmjs.org/-/all/since?stale=update_after&startkey=1375519407838
NAME                  DESCRIPTION                                        AUTHOR            DATE              KEYWORDS
grunt-cli             The grunt command line interface.                  =cowboy =tkellen  2013-07-27 02:24
grunt-cli-dev-exitprocess The grunt command line interface.              =dnevnik          2013-03-11 16:19
grunt-client-compiler Grunt wrapper for client-compiler.                 =rubenv           2013-03-26 09:15  gruntplugin
grunt-clientside      Generate clientside js code from CommonJS modules  =jga              2012-11-07 01:20  gruntplugin

npm釋出

這個命令我自己也還沒實際用過,不誤導大家,語法如下,也可參考官方對於package釋出的說明https://npmjs.org/doc/developers.html

npm publish <tarball>
npm publish <folder>

NPM配置

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

設定proxy

內網使用npm很頭痛的一個問題就是代理,假設我們的代理是 http://proxy.example.com:8080,那麼命令如下:

npm config set proxy http://proxy.example.com:8080

由於npm config set命令比較常用,於是可以如下簡寫

npm set proxy http://proxy.example.com:8080    

檢視proxy

設定完,我們檢視下當前代理設定

npm config get proxy

輸出如下:

http://proxy.example.com:8080/

同樣可如下簡寫:

npm get proxy

刪除proxy

代理不需要用到了,那刪了吧

npm delete proxy

檢視所有配置

npm config list

直接修改配置檔案

有時候覺得一條配置一條配置地修改有些麻煩,就直接進配置檔案修改了

npm config edit

關於package.json

這貨在官網似乎沒有詳細的描述,其實就是包的描述資訊啦。假設當我們下載了node應用,這個node應用依賴於A、B、C三個包,如果沒有package.json,我們需要人肉安裝這個三個包(如果對版本有特定要求就更悲劇了):

npm install A
npm install B
npm install C

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

npm install

package.json欄位簡介

欄位相當多,但最重要的的是下面幾個

  1. name: package的名字(由於他會成為url的一部分,所以 non-url-safe 的字母不會通過,也不允許出現"."、"_"),最好先在http://registry.npmjs.org/上搜下你取的名字是否已經存在
  2. version: package的版本,當package發生變化時,version也應該跟著一起變化,同時,你宣告的版本需要通過semver的校驗(semver可自行谷歌)
  3. dependencies: package的應用依賴模組,即別人要使用這個package,至少需要安裝哪些東東。應用依賴模組會安裝到當前模組的node_modules目錄下。
  4. devDependencies:package的開發依賴模組,即別人要在這個package上進行開發
  5. 其他:參見官網

package版本

在package.json裡,你經常會在包名後看到類似"~0.1.0"這樣的字串,這就是包的版本啦。下面會列舉最常見的版本宣告形式,以及版本書寫的要求:

常見版本宣告形式

a、"~1.2.3" 是神馬意思呢,看下面領悟

"~1.2.3" = ">=1.2.3 <1.3.0"
"~1.2" = ">=1.2.0 <1.3.0"
"~1" = ">=1.0.0 <1.1.0"

b、"1.x.x"是什麼意思呢,繼續自行領悟

"1.2.x" = ">=1.2.0 <1.3.0"
"1.x.x" = ">=1.0.0 <2.0.0"
"1.2" = "1.2.x"
"1.x" = "1.x.x"
"1" = "1.x.x"

版本書寫要求

  1. 版本可以v開頭,比如 v1.0.1(v只是可選)
  2. 1.0.1-7,這裡的7是所謂的“構建版本號”,不理是神馬,反正版本大於1.0.1
  3. 1.0.1beta,或者1.0.1-beta,如果1.0.1後面不是 “連字元加數字” 這種形式,那麼它是pre release 版本,即版本小於 1.0.1
  4. 根據b、c,有:0.1.2-7 > 0.1.2-7-beta > 0.1.2-6 > 0.1.2 > 0.1.2beta

寫在後面

內容只是簡單地把最常見的命令,以及一些需要了解的內容列了出來。如要進一步瞭解,可參考官網說明。此外,npm help是我們最好的朋友,如果忘了有哪些命令,命令下有哪些引數,可通過help進行檢視。

最關鍵的:如果文章內容有誤,請指出!!!