今天給大家分享一下?如何使用NPM纳令?CNPM又是什么挽荠?
1.背景介紹
什么是npm?
NPM是隨同NodeJS一起安裝的包管理工具平绩,能解決NodeJS代碼部署上的很多問題圈匆,常見的使用場景有以下幾種:
允許用戶從NPM服務(wù)器下載別人編寫的第三方包到本地使用。
允許用戶從NPM服務(wù)器下載并安裝別人編寫的命令行程序到本地使用捏雌。
允許用戶將自己編寫的包或命令行程序上傳到NPM服務(wù)器供別人使用跃赚。
由于新版的nodejs已經(jīng)集成了npm,所以之前npm也一并安裝好了腹忽。同樣可以通過輸入?"npm -v"?來測試是否成功安裝来累。命令如下砚作,出現(xiàn)版本提示表示安裝成功:
npm的規(guī)則
允許用戶從NPM服務(wù)器下載別人編寫的第三方包到本地使用。
允許用戶從NPM服務(wù)器下載并安裝別人編寫的命令行程序到本地使用嘹锁。
允許用戶將自己編寫的包或命令行程序上傳到NPM服務(wù)器供別人使用葫录。
由于新版的nodejs已經(jīng)集成了npm,所以之前npm也一并安裝好了领猾。同樣可以通過輸入 "npm -v" 來測試是否成功安裝
什么是cnpm?
因為npm安裝插件是從國外服務(wù)器下載米同,受網(wǎng)絡(luò)影響大,可能出現(xiàn)異常摔竿,如果npm的服務(wù)器在中國就好了面粮,所以我們樂于分享的淘寶團隊干了這事。來自官網(wǎng):“這是一個完整 npmjs.org 鏡像继低,你可以用此代替官方版本(只讀)熬苍,同步頻率目前為 10分鐘 一次以保證盡量與官方服務(wù)同步≡蹋”
2.知識剖析
NPM常用指令
1柴底、npm install moduleNames:安裝Node模塊
安裝完畢后會產(chǎn)生一個node_modules目錄,其目錄下就是安裝的各個node模塊粱胜。
node的安裝分為全局模式和本地模式柄驻。
一般情況下會以本地模式運行,包會被安裝到和你的應(yīng)用程序代碼的本地node_modules目錄下焙压。
在全局模式下鸿脓,Node包會被安裝到Node的安裝目錄下的node_modules下。
全局安裝命令為$npm install -g moduleName涯曲。
獲知使用$npm set global=true來設(shè)定安裝模式野哭,$npm get global可以查看當(dāng)前使用的安裝模式。
示例:
npm install express
默認(rèn)會安裝express的最新版本幻件,也可以通過在后面加版本號的方式安裝指定版本虐拓,如npm install express@3.0.6
npm install name -g
將包安裝到全局環(huán)境中
但是代碼中,直接通過require()的方式是沒有辦法調(diào)用全局安裝的包的傲武。全局的安裝是供命令行使用的,就好像全局安裝了vmarket后城榛,就可以在命令行中直接運行vm命令
npm install name --save
安裝的同時揪利,將信息寫入package.json中項目路徑中如果有package.json文件時,直接使用npm install方法就可以根據(jù)dependencies配置安裝所有的依賴包狠持,這樣代碼提交到github時疟位,就不用提交node_modules這個文件夾了。
npm root:查看當(dāng)前包的安裝路徑
npm root -g:查看全局的包的安裝路徑
npm -v:查看npm安裝的版本
npm list --depth=0:查看所有高級的npm moudles
npm list --depth=0 -global:查看所有全局安裝的模塊
為什么要保存至PACKAGE.JSON喘垂?
因為node插件包相對來說非常龐大甜刻,所以不加入版本管理绍撞,將配置信息寫入package.json并將其加入版本管理,其他開發(fā)者對應(yīng)下載即可(命令提示符執(zhí)行npm install得院,則會根據(jù)package.json下載所有需要的包)傻铣。
使用npm卸載插件:npm uninstall < name > [-g] [--save-dev] PS:不要直接刪除本地插件包
使用npm更新插件:npm update < name > [-g] [--save-dev]?
更新全部插件:npm update [--save-dev]?
查看npm幫助:npm help?
查看當(dāng)前目錄已安裝插件:npm list?
PS:npm安裝插件過程:從http://registry.npmjs.org下載對應(yīng)的插件包(該網(wǎng)站服務(wù)器位于國外,所以經(jīng)常下載緩慢或出現(xiàn)異常)祥绞,解決辦法就是cnpm
CNPM介紹:
官方網(wǎng)址:http://npm.taobao.org
安裝:命令提示符執(zhí)行npm install cnpm -g --registry=https://registry.npm.taobao.org
注意:安裝完后最好查看其版本號cnpm -v或關(guān)閉命令提示符重新打開非洲,安裝完直接使用有可能會出現(xiàn)錯誤?
PS:cnpm跟npm用法完全一致,只是在執(zhí)行命令時將npm改為cnpm蜕径。
PACKAGE.JSON 屬性說明:
name - 包名两踏。
version - 包的版本號。
description - 包的描述兜喻。
homepage - 包的官網(wǎng) url 梦染。
author - 包的作者姓名。
contributors - 包的其他貢獻(xiàn)者姓名朴皆。
dependencies - 依賴包列表帕识。如果依賴包沒有安裝,npm 會自動將依賴包安裝在 node_module 目錄下车荔。
repository - 包代碼存放的地方的類型渡冻,可以是 git 或 svn,git 可在 Github 上忧便。
main - main 字段是一個模塊ID族吻,它是一個指向你程序的主要項目。就是說珠增,如果你包的名字叫 express超歌,然后用戶安裝它,然后require("express")蒂教。keywords - 關(guān)鍵字
3.常見問題
如何安裝npm?
4.解決方案
1.前往nodejs官網(wǎng)下載nodejs巍举,https://nodejs.org/en/ ,建議下載穩(wěn)定版的凝垛,下載后無腦安裝即可懊悯。安裝完畢之后,在cmd中輸入node -v查看是否已經(jīng)安裝成功,如果有版本號顯示梦皮,則代表安裝成功L糠帧!剑肯!
5.編碼實戰(zhàn)
6.擴展思考
cnpm有哪些問題捧毛?
1.cnpm 的倉庫只是 npm 倉庫的一個拷貝,它不承擔(dān) publish 工作,所以你用 cnpm publish 命令會執(zhí)行失敗的
2.不僅是 publish 會執(zhí)行失敗呀忧,其它的需要注冊用戶(npm adduser)师痕、或者修改 package 狀態(tài)等命令都無法用 cnpm
7.參考文獻(xiàn)
8.更多討論
Q1:bower和npm的異同點?
npm是node js的包管理器而账,用來下載安裝node js的第三方工具包胰坟,也可以用來發(fā)布你自己開發(fā)的工具包。bower是一個前端庫管理的工具福扬,管理一些js庫腕铸,比如說jQuery,bootstrap等
Q2:如何查看npm配置铛碑?
npm config list //查看基本配置?
npm config list -l //查看所有配置
npm本地安裝與全局安裝有什么區(qū)別狠裹?
npm install grunt // 本地安裝,則是將模塊下載到當(dāng)前命令行所在目錄汽烦。?
npm install -g grunt//全局安裝涛菠,模塊將被下載安裝到【全局目錄】中;
npm如何獲取全局安裝的默認(rèn)目錄撇吞?
npm config get prefix
npm如何設(shè)置全局安裝的默認(rèn)目錄俗冻?
npm config set prefix “directory”
Q3:全局安裝和本地安裝的區(qū)別排宰?
全局安裝方式是鍵入命令:npm install gulp -g 或 npm install gulp --global海渊,其中參數(shù)-g的含義是代表安裝到全局環(huán)境里面璃弄,包安裝在Node安裝目錄下的node_modules文件夾中筐钟,一般在 \Users\用戶名\AppData\Roaming\ 目錄下,可以使用npm root -g查看全局安裝目錄旦委。
全局安裝后可以供命令行(command line)使用析恋,用戶可以在命令行中直接運行該組件包支持的命令篷角,如下圖全局安裝gulp后的cmd文件
本地安裝方式是鍵入命令:npm install gulp 或 npm install gulp --save-dev等画机,其中參數(shù)--save-dev的含義是代表把你的安裝包信息寫入package.json文件的devDependencies字段中冶伞,包安裝在指定項目的node_modules文件夾下。
本地安裝后可以直接通過require()的方式引入項目中node_modules目錄下的模塊步氏,如下示例响禽,本地安裝后直接在gulpfile.js中require('gulp')。
Q4:為什么進(jìn)行了全局安裝還要進(jìn)行本地安裝
在js實例代碼中荚醒,默認(rèn)下node.js會在NODE_PATH和目前js所在項目下的node_modules文件夾下去尋找模塊芋类,因此,如果只是全局安裝界阁,不能直接通過require()的方式去引用模塊梗肝,需要手動解決包路徑的配置問題,當(dāng)然你也可以復(fù)制全局安裝的node_modules文件夾到項目下铺董,還有辦法可以選擇將環(huán)境變量的NODE_PATH設(shè)置為C:\Program Files\nodejs。
2.對于包的更新不好管理,可能你需要為每個包重新命名精续,如gulp@3.8.1坝锰、gulp@3.9.1...,為了區(qū)別不同項目使用指定的包重付,保證模塊之間的相互依賴顷级,區(qū)別每個項目正常運行。