最近在折騰 hexo 的更新,遇到了一些問題,正好使用 npm 進行包管理,順便研究了下 npm 的一些經常使用命令html
NPM(node package manager),一般稱爲node包管理器。顧名思義,它的主要功能就是管理node包,包括:安裝、卸載、更新、查看、搜索、發佈等。node
npm的背後,是基於couchdb的一個數據庫,詳細記錄了每一個包的信息,包括做者、版本、依賴、受權信息等。它的一個很重要的做用就是:將開發者從繁瑣的包管理工做(版本、依賴等)中解放出來,更加專一於功能的開發。數據庫
npm官網: https://npmjs.org/ npm官方文檔: https://npmjs.org/doc/README.htmlnpm
咱們須要瞭解什麼json
在具體介紹npm包的管理以前,咱們首先得來了解一下npm包的兩種安裝模式。bash
本地安裝 vs 全局安裝(重要) node包的安裝分兩種:本地安裝、全局安裝。二者的區別以下,後面會經過簡單例子說明hexo
npm install pkg - 本地安裝app
運行以下命令,就會在當前目錄下安裝 grunt-cli(grunt命令行工具)ide
npm install grunt-cli
安裝結束後,當前目錄下回多出一個node_modules目錄,grunt-cli就安裝在裏面。同時注意控制檯輸出的信息:grunt
grunt-cli@0.1.9 node_modules/grunt-cli ├── resolve@0.3.1 ├── nopt@1.0.10 (abbrev@1.0.4) └── findup-sync@0.1.2 (lodash@1.0.1, glob@3.1.21)
簡單說明一下:
grunt-cli@0.1.9:當前安裝的package爲grunt-cli,版本爲0.19 node_modules/grunt-cli:安裝目錄 resolve@0.3.1:依賴的包有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/
也就是以前所說的全局安裝目錄啦。
grunt-cli@0.1.9 /usr/local/lib/node_modules/grunt-cli ├── resolve@0.3.1 ├── nopt@1.0.10 (abbrev@1.0.4) └── findup-sync@0.1.2 (lodash@1.0.1, glob@3.1.21)
npm的包管理命令是使用頻率最高的,因此也是咱們須要緊緊記住並熟練使用的。其實無非也就是幾個動做:安裝、卸載、更新、查看、搜索、發佈等。
安裝最新版本的grunt-cli npm install grunt-cli
安裝0.1.9版本的grunt-cli npm install grunt-cli@"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 grunt-cli@"0.1.9"
npm ls:查看安裝了哪些包 運行以下命令,就能夠查看當前目錄安裝了哪些package npm ls
輸出以下
/private/tmp/npm └─┬ grunt-cli@0.1.9 ├─┬ findup-sync@0.1.2 │ ├─┬ glob@3.1.21 │ │ ├── graceful-fs@1.2.3 │ │ ├── inherits@1.0.0 │ │ └─┬ minimatch@0.2.12 │ │ ├── lru-cache@2.3.0 │ │ └── sigmund@1.0.0 │ └── lodash@1.0.1 ├─┬ nopt@1.0.10 │ └── abbrev@1.0.4 └── resolve@0.3.1
輸出以下,一樣,若是是要查看package的全局安裝信息,加上-g就能夠
npm ls pkg:查看特定package的信息 運行以下命令,輸出grunt-cli的信息
npm ls grunt-cli
輸出的信息比較有限,只有安裝目錄、版本,以下:
/private/tmp/npm └── grunt-cli@0.1.9
若是要查看更詳細信息,能夠經過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
這個命令我本身也還沒實際用過,不誤導你們,語法以下,也可參考官方對於package發佈的說明https://npmjs.org/doc/developers.html:
npm publish <tarball> npm publish <folder>
npm的配置工做主要是經過npm config命令,主要包含增、刪、改、查幾個步驟,下面就以最爲經常使用的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
設置完,咱們查看下當前代理設置
npm config get proxy
輸出以下:
http://proxy.example.com:8080/
一樣可以下簡寫:
npm get proxy
刪除proxy 代理不須要用到了,那刪了吧
npm delete proxy
查看全部配置
npm config list
直接修改配置文件 有時候以爲一條配置一條配置地修改有些麻煩,就直接進配置文件修改了
npm config edit
這貨在官網彷佛沒有詳細的描述,其實就是包的描述信息啦。假設當咱們下載了node應用,這個node應用依賴於A、B、C三個包,若是沒有package.json,咱們須要人肉安裝這個三個包(若是對版本有特定要求就更悲劇了):
npm install A npm install B npm install C
有了package.json,一行命令安裝全部依賴。
npm install
字段至關多,但最重要的的是下面幾個
在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"
版本書寫要求 版本能夠v開頭,好比 v1.0.1(v只是可選) 1.0.1-7,這裏的7是所謂的「構建版本號」,不理是神馬,反正版本大於1.0.1 1.0.1beta,或者1.0.1-beta,若是1.0.1後面不是 「連字符加數字」 這種形式,那麼它是pre release 版本,即版本小於 1.0.1 根據b、c,有:0.1.2-7 > 0.1.2-7-beta > 0.1.2-6 > 0.1.2 > 0.1.2beta 寫在後面
內容只是簡單地把最多見的命令,以及一些須要瞭解的內容列了出來。如要進一步瞭解,可參考官網說明。此外,npm help是咱們最好的朋友,若是忘了有哪些命令,命令下有哪些參數,可經過help進行查看。