一文搞懂npm?install?意義
【當(dāng)我們敲 npm install 的時(shí)候會(huì)安裝哪些依賴,dependencies 和 devDependencies 都會(huì)安裝嗎?還是只安裝 dependencies ?】
【項(xiàng)目依賴包是放在 dependencies 和 devDependencies ?】
簡(jiǎn)單問兩個(gè)問題,勾起大家對(duì) npm install
,dependencies ,devDependencies 的回憶。
下面進(jìn)入正文
- npm install 也支持直接輸入 Github 代碼庫地址
$ npm install git://github.com/package/path.git $ npm install git://github.com/package/path.git#0.1.0
安裝之前,npm install 會(huì)先檢查,node_modules 目錄之中是否已經(jīng)存在指定模塊。如果存在,就不再重新安裝了,即使遠(yuǎn)程倉庫已經(jīng)有了一個(gè)新版本,也是如此。
如果你希望,一個(gè)模塊不管是否安裝過, npm 都要強(qiáng)制重新安裝,可以使用 -f
或 --force
參數(shù)。
$ npm install <packageName> --force
npm install 的時(shí)候會(huì)安裝哪個(gè)里面的依賴?dependencies 還是 devDependencies
【npm install
默認(rèn)會(huì)安裝 dependencies 字段和 devDependencies 字段中的所有模塊】。 如果軟件包具有 package-lock 或 shrinkwrap 文件,則依賴項(xiàng)的安裝將由此驅(qū)動(dòng),如果兩個(gè)文件都存在,則 npm-shrinkwrap.json 優(yōu)先。 請(qǐng)參閱 package-lock.json 和 npm-shrinkwrap。
【ok,那么也就是說,當(dāng)我們?cè)谀玫揭粋€(gè)項(xiàng)目的時(shí)候,使用 npm install
是會(huì)安裝 dependencies 和 devDependencies 里所有的依賴包的?!?/p>
那么是否意味著,我們?cè)诎惭b依賴包的時(shí)候,不需要過多的去糾結(jié)是使用 -S
還是 -D
呢 ?隨便安裝到 dependencies 或者 devDependencies 里都行,反正 npm install
的時(shí)候,都會(huì)安裝 dependencies 和 devDependencies 里面的依賴。
其實(shí)不然!
如果使用 --production 參數(shù),可以只安裝 dependencies 字段的模塊。
$ npm install --production # 或者 $ NODE_ENV=production npm install
【所以,我們做好 dependencies 和 devDependencies 的區(qū)分的話,在使用 npm install --production
的時(shí)候,還是有區(qū)別的?!?/p>
不過,感覺這個(gè) npm install --production
的使用場(chǎng)景不是很多。我好像沒怎么用,可能以后會(huì)用到吧。
內(nèi)心os:既然 npm install --production
我用不到,那我在安裝依賴包的時(shí)候,還是隨意吧,放到 dependencies 或者 devDependencies 都無所謂,反正 npm install
的時(shí)候會(huì)把 dependencies 和 devDependencies 里面的依賴包都安裝下來。哈哈~~,隨意使用 -S
或者 -D
咯~
錯(cuò)!
錯(cuò)??!
錯(cuò)?。?!
這樣想就錯(cuò)了。dependencies 和 devDependencies 還是有明顯區(qū)別的。我們接著來看。
我們?cè)诎惭b依賴包的時(shí)候,要如何區(qū)分是安裝到 dependencies 還是 devDependencies 中呢?
dependencies 依賴
這個(gè)可以說是我們 npm 核心一項(xiàng)內(nèi)容,依賴管理,這個(gè)對(duì)象里面的內(nèi)容就是我們這個(gè)項(xiàng)目所依賴的 js 模塊包。下面這段代碼表示我們依賴了 markdown-it
這個(gè)包,版本是 ^8.1.0
,代表最小依賴版本是 8.1.0
,如果這個(gè)包有更新,那么當(dāng)我們使用 npm install
命令的時(shí)候,npm 會(huì)幫我們下載最新的包。當(dāng)別人引用我們這個(gè)包的時(shí)候,包內(nèi)的依賴包也會(huì)被下載下來。
"dependencies": { "markdown-it": "^8.1.0" }
devDependencies 開發(fā)依賴
【在我們開發(fā)的時(shí)候會(huì)用到的一些包,只是在開發(fā)環(huán)境中需要用到,但是在別人引用我們包的時(shí)候,不會(huì)用到這些內(nèi)容,放在 devDependencies 的包,在別人引用的時(shí)候不會(huì)被 npm 下載】。
"devDependencies": { "autoprefixer": "^6.4.0",0", "babel-preset-es2015": "^6.0.0", "babel-preset-stage-2": "^6.0.0", "babel-register": "^6.0.0", "webpack": "^1.13.2", "webpack-dev-middleware": "^1.8.3", "webpack-hot-middleware": "^2.12.2", "webpack-merge": "^0.14.1", "highlightjs": "^9.8.0" }
當(dāng)你有了一個(gè)完整的 package.json 文件的時(shí)候,就可以讓人一眼看出來,這個(gè)模塊的基本信息,和這個(gè)模塊所需要依賴的包。我們可以通過 npm install 就可以很方便的下載好這個(gè)模塊所需要的包。
結(jié)論:當(dāng)你在開發(fā)一個(gè) npm 包的時(shí)候,還是要好好管理你的 dependencies 依賴 和 devDependencies 依賴。 之前有個(gè)同事寫了一個(gè) loading 組件,發(fā)到 npm 上面去了,他跟我說簡(jiǎn)單好用,我就用了。但是我發(fā)現(xiàn)他這么小的一個(gè)組件,為什么包這么大。一看,原來他寫這個(gè) npm 包的時(shí)候,所有的依賴都放到 dependencies 里面了(包括 gulp,browser-asyc,壓縮代碼的,express…等等一些他開發(fā)時(shí)用的工具)。
相關(guān)文章
淺談Koa2框架利用CORS完成跨域ajax請(qǐng)求
這篇文章主要介紹了淺談Koa2框架利用CORS完成跨域ajax請(qǐng)求,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03簡(jiǎn)單了解node npm cnpm的具體使用方法
這篇文章主要介紹了簡(jiǎn)單了解node npm cnpm的具體使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02Node.js 實(shí)現(xiàn)遠(yuǎn)程桌面監(jiān)控的方法步驟
這篇文章主要介紹了Node.js 實(shí)現(xiàn)遠(yuǎn)程桌面監(jiān)控的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Node.js API詳解之 module模塊用法實(shí)例分析
這篇文章主要介紹了Node.js API詳解之 module模塊用法,結(jié)合實(shí)例形式分析了Node.js API中module模塊基本功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-05-05Node 使用express-http-proxy 做api網(wǎng)關(guān)的實(shí)現(xiàn)
這篇文章主要介紹了Node 使用express-http-proxy 做api網(wǎng)關(guān)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Nodejs環(huán)境Eggjs加簽驗(yàn)簽示例代碼
這篇文章主要介紹了Nodejs環(huán)境Eggjs加簽驗(yàn)簽示例代碼,文章開頭給大家介紹了加簽和驗(yàn)簽的基本概念,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07