本文同步發表於做者博客: 什麼是npm系列:1、npm簡介前端
npm
是Node.js
的包管理工具,它的誕生也極大的促進了前端的發展,在現代前端開發中都離不開npm
的身影。node
本文是npm系列的第一篇,知識很基礎,做爲一個熱身文章,若是各位已是開發熟練工了,徹底能夠跳過這篇。webpack
npm 是基於 Node.js,因此咱們須要安裝 Node.js,方式有兩種:web
// 查看npm版本
npm -v
// 更新npm自身
npm install npm@latest -g
複製代碼
在實際使用中咱們既安裝本地包(項目依賴),也會安裝全局包(命令行工具)。npm
可使用下面的命令來安裝一個包:json
npm install <package_name>
複製代碼
移除包能夠用指令:gulp
npm uninstall <package_name>
複製代碼
在項目中安裝包時默認會安裝到dependencies
中,咱們能夠經過如下參數來控制這個行爲:工具
dependencies
中devDependencies
中optionalDependencies
中dependencies
中除此以外還有兩個額外的參數:post
bundleDependencies
中如需從 package.json 文件中刪除依賴,須要在命令後添加參數:測試
npm uninstall --save lodash
// 經過--save-dev安裝的包,移除的時候也需指定爲--save-dev將其卸載
npm uninstall --save-dev webpack
複製代碼
全局安裝通常是用來安裝命令行工具,諸如gulp、http-server,咱們只須要在後面加上-g
,好比:
npm install -g http-server
複製代碼
有時候咱們記不清某個包,想查看全部已安裝的包應該用什麼命令呢:
// depth表明遍歷的深度,若是沒有該參數,會把全部包的依賴也顯示
npm list -g --depth 0
複製代碼
項目中安裝依賴後在自動生成package-lock.json
文件,裏面包含安裝的依賴信息,主要是用來鎖定依賴版本,確保團隊之間安裝依賴時不會出現差別。
前面提到dependencies
的概念,那在npm
中都有哪些依賴呢?
這兩個是咱們使用的最多的,也是最須要注意的。
假設咱們有一個插件magic-lint
,它的做用是在提交commit
時檢查以及格式化代碼,那麼裏面至少有prettier
插件用來美化代碼,咱們須要確保其餘用戶安裝magic-lint
以後能正常使用,那就要把prettier
列爲dependencies
。
另外咱們在開發magic-lint
過程是屬於開發環境,咱們會須要jest
來測試,普通用戶安裝時是不須要jest
,咱們把jest
列爲devDependencies
後就能夠避免這樣的狀況。
若是添加
--production
標記,或者環境變量NODE_ENV
被設置爲production
, npm就不會安裝devDependencies
中的模塊。
那何時用peerDependencies
呢?
假設咱們有一個webpack-plugin-god
插件,它只是webpack
的插件,並不依賴webpack
,因此在dependencies
或devDependencies
中不會寫明webpack
,但事實上它又是針對特定的webpack
版本開發,這個時候咱們就能夠把webpack
寫入peerDependencies
中。
若是有一個包屬於可與有無的,咱們就能夠把它歸爲optionalDependencies
寫代碼時咱們能夠這樣使用可選包:
try {
var foo = require('foo')
var fooVersion = require('foo/package.json').version
} catch (er) {
foo = null
}
if ( notGoodFooVersion(fooVersion) ) {
foo = null
}
// .. then later in your program ..
if (foo) {
foo.doFooThings()
}
複製代碼
假設咱們有一個package.json
:
{
"name": "awesome-web-framework",
"version": "1.0.0",
"bundledDependencies": [
"renderized", "super-streams"
]
}
複製代碼
經過npm pack
命令咱們能夠獲得文件awesome-web-framework-1.0.0.tgz
,裏面會包含renderized
和super-streams
兩個依賴。
在項目中執行npm install awesome-web-framework-1.0.0.tgz
,結構也會變爲:
├── node_modules
├── awesome-web-framework
│ └── renderized
│ └── super-streams
└── xxx
複製代碼
下一篇將講解 npm install
,看了以後,但願可以讓你驚歎一下:「哇~ 原來還能夠這樣」,我就心滿意足了。