npmjs.com說:npm能讓javascript開發(fā)人員發(fā)布代碼和復(fù)用代碼變得更容易.并別能非常容易的讓別人將你發(fā)布的代碼同步到最新版本。
npm
是一個包管理工具,就像arch下的pacman
划咐、 debian系下的apt-get
熟史、以及基于RPM包的yum
如CentOS、RedHat肋殴,它能幫我們自動處理軟件包的以來關(guān)系囤锉,以及軟件包的安裝和卸載提供更簡便的操作,讓使用者最少的關(guān)心與軟件使用無關(guān)的東西护锤。最開始npm
只是用來管理node項目代碼的官地,現(xiàn)在已經(jīng)可以管理很多其他語言代碼了。
npm 安裝
學(xué)習(xí)環(huán)境:
Linux arch 4.8.2-1-ARCH #1
運行:
curl -L https://npmjs.org/install.sh | sh
通常運行上面命令都會失敗烙懦,如果你沒有變更過linux下權(quán)限配置驱入,都會因為權(quán)限不能執(zhí)行sh
命令
所以, curl下載并執(zhí)行安裝命令可能需要變更為:
curl -L https://npmjs.org/install.sh | sudo sh
不出意外就可以順利安裝了,可能需要耐心等待一會兒氯析,因為npm默認(rèn)使用了國外鏡像亏较,數(shù)據(jù)包路由可能需要更多時間。
安裝結(jié)束后掩缓,可以使用如下命令校驗是否安裝成功:
[palm@arch]: ~/Desktop/node-stu/stunode>$ npm
Usage: npm <command>
where <command> is one of:
access, adduser, bin, bugs, c, cache, completion, config,
ddp, dedupe, deprecate, dist-tag, docs, edit, explore, get,
help, help-search, i, init, install, install-test, it, link,
list, ln, login, logout, ls, outdated, owner, pack, ping,
prefix, prune, publish, rb, rebuild, repo, restart, root,
run, run-script, s, se, search, set, shrinkwrap, star,
stars, start, stop, t, tag, team, test, tst, un, uninstall,
unpublish, unstar, up, update, v, version, view, whoami
npm <cmd> -h quick help on <cmd>
npm -l display full usage info
npm help <term> search for help on <term>
npm help npm involved overview
Specify configs in the ini-formatted file:
/home/palm/.npmrc
or on the command line via: npm <command> --key value
Config info can be viewed via: npm help config
npm@3.10.9 /usr/lib/node_modules/npm
上面輸出信息表示已經(jīng)成功安裝了npm雪情,已經(jīng)可以使用了。npm一些簡單的使用如下:
- npm -v 查看當(dāng)前npm版本
[palm@arch]: ~/Desktop/node-stu/stunode>$ npm -v
3.10.9
- npm --help / npm man npm幫助你辣,如果你忽然忘記了npm某一個命令使用可以通過這兩個命令查找對應(yīng)命令描述巡通,如:
[palm@arch]: ~/Desktop/node-stu/stunode>$ npm --help install
npm install (with no args, in package dir)
npm install [<@scope>/]<pkg>
npm install [<@scope>/]<pkg>@<tag>
npm install [<@scope>/]<pkg>@<version>
npm install [<@scope>/]<pkg>@<version range>
npm install <folder>
npm install <tarball file>
npm install <tarball url>
npm install <git:// url>
npm install <github username>/<github project>
aliases: i, isntall
common options: [--save|--save-dev|--save-optional] [--save-exact]
- npm install
npm install <package_name>
使用這個命令尘执,npm會幫助我們下載 #package_name
默認(rèn)到當(dāng)前的node_modules
目錄下,如果沒有這個目錄宴凉,npm會自動創(chuàng)建誊锭。這種安裝方式是本地安裝,換一種說法弥锄,被安裝的軟件包(#package_name
) 只是在當(dāng)前所在project
下生效丧靡。如果需要全局使用可以增加參數(shù) -g
,如此籽暇,就是當(dāng)前系統(tǒng)用戶下可用温治。更多信息可以使用以下命令查看:
npm help npm-folders
因為默認(rèn)npm使用了國外的源,所以图仓,可以使用追加 --registry=https: //xxx.xxx.xxx
從指定源下載該軟件包.
- npm init 該命令會在當(dāng)前目錄下自動創(chuàng)建一個
package.json
文件罐盔,并且會提示輸入一系列信息,比如包名救崔,初始版本(默認(rèn)為1.0.0)惶看, 軟件包描述,入口文件(或main文件,默認(rèn)叫index.js), 軟件測試命令,git倉庫地址以及開發(fā)者名字等等. 完畢確認(rèn)后內(nèi)容類似如下這樣:
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"directories": {
"test": "test"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
package.json
文件內(nèi)容必須是嚴(yán)格的json格式,不能是javascript對象,像這樣:
{
name: "test",
version: "1.0.0",
description: "",
main: "index.js",
directories: {
test: "test"
},
scripts: {
test: "echo \"Error: no test specified\" && exit 1"
},
author: "",
license: "MIT"
}
這樣的格式是錯誤的六孵。key-value
中纬黎,value
更不能是對象類型字面量值。 只能是字符串劫窒。
package.json 文件
package.json 能更好的幫助npm或者其他包管理工具管理軟件包本今,通過這個文件,npm可以自動下載安裝包所需要的依賴包主巍,以及run入口函數(shù)冠息,讓軟件倉庫如github等更方便的、更通用的測試軟件包是否可用孕索,同時package.json 也提供一個通用的軟件包信息讀取接口逛艰。基于這個文件搞旭,我們可以很容易的讀取到該軟件包詳細(xì)信息散怖。
package.json更多的字段描述在這里,根據(jù)習(xí)慣肄渗,如果我們提供了 README.md
或者'README'文件镇眷,也可以忽description字段,這個字段是為了幫助別人在npm搜索。所以這個字段的信息翎嫡,要盡可能的對軟件有用欠动,從而使你的軟件包讓更多的人發(fā)現(xiàn)。
總之惑申,package.json已經(jīng)是npm包定義的一個不可缺少的一部分具伍。
- npm install <package_name> --save
--save參數(shù)是為了自動的修改package.jsondependencies
字段铆遭,會自動將安裝的軟件包作為本軟件包的依賴添加到package.json文件中。這樣我們就不用去手動修改 package.json文件了沿猜,如果手動維護,忘記添加后碗脊,使用我們發(fā)布的包會出現(xiàn)缺少依賴錯誤啼肩。 栗子:
npm install express --save
可能需要等待一段時間,安裝完畢會將這個目錄樹打印到命令行窗口上衙伶,就像這樣:
test@1.0.0 /home/palm/Desktop/node-stu/test
└─┬ express@4.14.0
├─┬ accepts@1.3.3
│ ├─┬ mime-types@2.1.12
│ │ └── mime-db@1.24.0
│ └── negotiator@0.6.1
├── array-flatten@1.1.1
├── content-disposition@0.5.1
├── content-type@1.0.2
├── cookie@0.3.1
├── cookie-signature@1.0.6
├─┬ debug@2.2.0
│ └── ms@0.7.1
├── depd@1.1.0
├── encodeurl@1.0.1
├── escape-html@1.0.3
├── etag@1.7.0
├─┬ finalhandler@0.5.0
│ ├── statuses@1.3.0
│ └── unpipe@1.0.0
├── fresh@0.3.0
├── merge-descriptors@1.0.1
├── methods@1.1.2
├─┬ on-finished@2.3.0
│ └── ee-first@1.1.1
├── parseurl@1.3.1
├── path-to-regexp@0.1.7
├─┬ proxy-addr@1.1.2
│ ├── forwarded@0.1.0
│ └── ipaddr.js@1.1.1
├── qs@6.2.0
├── range-parser@1.2.0
├─┬ send@0.14.1
│ ├── destroy@1.0.4
│ ├─┬ http-errors@1.5.0
│ │ ├── inherits@2.0.1
│ │ └── setprototypeof@1.0.1
│ └── mime@1.3.4
├── serve-static@1.11.1
├─┬ type-is@1.6.13
│ └── media-typer@0.3.0
├── utils-merge@1.0.0
└── vary@1.1.0
查看項目根目錄下文件祈坠,多了一個 node_modules
(如果你沒有新建該目錄的話):
查看目錄node_modules
,express 軟件包的依賴都自動下載到該目錄下了,linux下可以使用命令
ls node_modules/
查看依賴包是否有遺漏矢劲。查看package.json
文件赦拘,發(fā)現(xiàn)有新增節(jié)點dependencies
,如:
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.14.0"
}
}
更多npm使用在這里芬沉, 比如: 包本地/全局卸載躺同、包依賴更新等等
npm也提到了自己提倡的coding-style
,比如丸逸,經(jīng)程R眨看見的比較混亂的{
前是否需要換行,在c
語言中黄刚,一般都是這樣:
int fun(int x, int y)
{
return x + y ;
}
而在java
或 javascript
中是這樣的:
public int add(int x, int y) {
return x + y ;
}
function fun(x,y) {
return x + y ;
}
npm 提倡使用上面javascript
代碼風(fēng)格, 如:
//bad
function()
{
//
}
//good
function() {
//
}
個人也非常推薦npm的 coding-style
捎谨,甚至非常排斥c
語言代碼風(fēng)格在javascript上使用,不僅僅是因為大部分javascript解釋引擎自動在語句末尾添加分號憔维。
----- npm學(xué)習(xí)結(jié)束