npm(node package manager)是nodejs的包管理器,用於node插件管理(包括安裝、卸載、管理依賴等), NPM是隨同NodeJS一塊兒安裝的包管理工具,能解決NodeJS代碼部署上的不少問題,它是 Node 得到成功的重要緣由之一。常見的使用場景有如下幾種:javascript
容許用戶從NPM服務器下載別人編寫的第三方包到本地使用。html
容許用戶從NPM服務器下載並安裝別人編寫的命令行程序到本地使用。前端
容許用戶將本身編寫的包或命令行程序上傳到NPM服務器供別人使用。java
因爲新版的nodejs已經集成了npm,因此以前npm也一併安裝好了。一樣能夠經過輸入 "npm -v" 來測試是否成功安裝node
爲啥咱們須要一個包管理工具呢?由於咱們在Node.js上開發時,會用到不少別人寫的JavaScript代碼。若是咱們要使用別人寫的某個包,每次都根據名稱搜索一下官方網站,下載代碼,解壓,再使用,很是繁瑣。因而一個集中管理的工具應運而生:你們都把本身開發的模塊打包後放到npm官網上,若是要使用,直接經過npm安裝就能夠直接用,不用管代碼存在哪,應該從哪下載。程序員
更重要的是,若是咱們要使用模塊A,而模塊A又依賴於模塊B,模塊B又依賴於模塊X和模塊Y,npm能夠根據依賴關係,把全部依賴的包都下載下來並管理起來。不然,靠咱們本身手動管理,確定既麻煩又容易出錯。npm
什麼是cnpm?json
由於npm安裝插件是從國外服務器下載,受網絡影響大,可能出現異常,因此咱們樂於分享的淘寶團隊幹了這事。來自官網:「這是一個完整 npmjs.org 鏡像,你能夠用此代替官方版本(只讀),同步頻率目前爲 10分鐘 一次以保證儘可能與官方服務同步。」gulp
安裝完畢後會產生一個node_modules目錄,其目錄下就是安裝的各個node模塊。瀏覽器
通常狀況下會以本地模式運行,包會被安裝到和你的應用程序代碼的本地node_modules目錄下。
在全局模式下,Node包會被安裝到Node的安裝目錄下的node_modules下
由於node插件包很是大,版本龐雜,因此不加入package信息,模塊間的依賴變得很是困難,將配置信息寫入package.json並將其加入版本管理,其餘開發者對應下載便可(命令提示符執行npm install,則會根據package.json下載全部須要的包)。 每一個項目的根目錄下面,通常都有一個package.json文件,定義了這個項目所須要的各類模塊,以及項目的配置信息(好比名稱、版本、許可證等元數據)。npm install 命令根據這個配置文件,自動下載所需的模塊,也就是配置項目所需的運行和開發環境。
name - 包名。(不要把node或者js放在名字中)
version - 包的版本號。
dependencies - 項目運行所依賴的模塊
devDependencies - 項目開發所須要的模塊
bin - 這須要在你的package.json中提供一個bin字段,它是一個命令名和本地文件名的映射。在安裝時,若是是全局安裝,npm將會使用符號連接把這些文件連接到prefix/bin,若是是本地安裝,會連接到./node_modules/.bin/
使用npm卸載插件:npm uninstall < name > [-g] [--save-dev] PS:不要直接刪除本地插件包
使用npm更新插件:npm update < name > [-g] [--save-dev]
更新所有插件:npm update [--save-dev]
查看npm幫助:npm help
查看當前目錄已安裝插件:npm list
還有一些npm的簡單命令就很少說了
PS:npm安裝插件過程:從http://registry.npmjs.org下載對應的插件包(該網站服務器位於國外,因此常常下載緩慢或出現異常),解決辦法就是cnpm
安裝:命令提示符執行npm install cnpm -g --registry=https://registry.npm.taobao.org
注意:安裝完後最好查看其版本號cnpm -v或關閉命令提示符從新打開,安裝完直接使用有可能會出現錯誤
PS:cnpm跟npm用法徹底一致,只是在執行命令時將npm改成cnpm。
bower 和 npm有什麼區別
npm 是伴隨 Node.js 出現的一個包管理器,最開始只能支持 Node.js 的模塊管理,可是後來, npm 官網通過一次改版,打出的口號是,javascript 的包管理器,因此,其已經不在侷限因而 Node.js 的模塊管理了,已經通用到了全部 js 的包管理工具了,能夠說,先後通吃了。
bower 的話,從一開始,就是專門爲前端表現設計的包管理器,一切所有爲前端考慮的。npm 和 bower 的最大區別,就是 npm 支持嵌套地依賴管理,而 bower只能支持扁平的依賴(嵌套的依賴,由 程序員本身解決)。
嵌套依賴,指的就是,你依賴的軟件包,還有它本身的依賴,好像摘葡萄,一摘一大串。在服務器環境的時候,這並沒什麼關係,由於存儲空間夠大,一切代碼都是本地運行,只要解決完依賴就好了, 可是到了用戶產品的瀏覽器裏,就很成問題了,你不能讓用戶去下載好幾M的js代碼,那就太糟糕了。在這個狀況下,就須要程序員本身手動解決用到的類庫的嵌套依賴問題。好比確保各類各樣的插件 都依賴同一個版本的jQuery。
cnpm有哪些問題?
1.cnpm 的倉庫只是 npm 倉庫的一個拷貝,它不承擔 publish 工做,因此你用 cnpm publish 命令會執行失敗的
2.不只是 publish 會執行失敗,其它的須要註冊用戶(npm adduser)、或者修改 package 狀態等命令都沒法用 cnpm
7.參考文獻
開發者對 npm 公司不滿,unpublish 了本身的全部模塊
由於全局模式安裝,包能夠供全部的程序使用。本地安裝則不能夠。 npm 默認會把包安裝到當前目錄下。這反映了 npm 不一樣的設計哲學。如 果把包安裝到全局,能夠提升程序的重複利用程度,避免一樣的內容的多 份副本,但壞處是難以處理不一樣的版本依賴。若是把包安裝到當前目錄, 或者說本地,則不會有不一樣程序依賴不一樣版本的包的衝突問題,同時還減 輕了包做者的 API 兼容性壓力,但缺陷則是同一個包可能會被安裝許屢次。
一、在js實例代碼中,默認下node.js會在NODE_PATH和目前js所在項目下的node_modules文件夾下去尋找模塊,所以,若是隻是全局安裝,不能直接經過require()的方式去引用模塊,須要手動解決包路徑的配置問題,固然你也能夠複製全局安裝的node_modules文件夾到項目下,還有辦法能夠選擇將環境變量的NODE_PATH設置爲C:\Program Files\nodejs。
2.對於包的更新很差管理,可能你須要爲每一個包從新命名,如gulp@3.8.一、gulp@3.9.1...,爲了區別不一樣項目使用指定的包,保證模塊之間的相互依賴,區別每一個項目正常運行
A:npm install --save babel-cli和npm install -dev babel-cli使用這兩個命令安裝後可自動寫入文件
npm install --save-dev babel-cli也能夠在一塊兒用