開始須要使用npm的了,以前學習時都只是圖快進行安裝,簡單總結下吧html
簡單說,npm是一個項目的JavaScript包管理工具,隨着項目愈來愈大,一個項目須要的包愈來愈多,若是每一個包都靠GitHub下載,引入,就會很浪費時間,同時也不利於記錄和管理
同時,npm更爲各軟件開發者提供分享和借鑑node
npm有如下三個部分組成:
網站,註冊表,命令行工具(CLI)
https://docs.npmjs.com/about-...npm
一個項目下有一個package.json文件,此文件記錄了項目安裝的包,npm新裝的包會寫入此文件進行記錄,也能夠經過此文件的記錄安裝相應的包
舉例:json
{ "name": "test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "babel-traverse": "^6.26.0", "lodash": "^4.17.11" } }
此test項目中安裝了babel-traverse和lodash這兩個依賴,都記錄於dependencies中babel
初始化後,npm會建立package.json文件
這裏有兩個方法,其實只是有沒有默認配置的區別而已
法一:npm會一個一個詢問你項目信息工具
npm init
法二:npm會爲你作好默認配置學習
npm init --yes 或者 npm init --y
這裏好比安裝babel-traverse:網站
npm install babel-traverse //即npm install babel-traverse --save,若添加於開發環境,則選項爲--save-dev
此行命令會在node_modules(沒有則建立)中安裝babel-traverse,而且在package.json和package.lock.json(沒有則建立)的dependencies中記錄此包(後面解釋package.lock.json)
test/package.jsonspa
{ "name": "test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "babel-traverse": "^6.26.0" } }
注意到^,npm會匹配最新的大版本依賴包,好比"^6.26.0"會匹配全部6.x.x的包
命令行
安裝完後咱們能夠看到node_modules中有babel-traverse文件夾,但爲何咱們只裝了babel-travers缺有那麼多其餘包呢,由於babel-traverse的開發也依賴了其餘包,進入babel-travers文件夾打開package.json能夠找到
"dependencies": { "babel-code-frame": "^6.26.0", "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "debug": "^2.6.8", "globals": "^9.18.0", "invariant": "^2.2.2", "lodash": "^4.17.4" }
npm也會安裝這些包,相應地,這些包也可能含有其餘包,所以會進行一個遞歸安裝
本地安裝即安裝依賴包
npm install <package_name>
全局安裝即將包做爲一個命令行工具,例如jshint
npm install -g <package_name>
具體不一樣參數可參考此連接:https://www.cnblogs.com/limit...
前面講到安裝一個包時也會引入其餘包,package.lock.json就是用於描述這個樹形結構
具體看官方描述:
https://docs.npmjs.com/files/...