詳解npm與package.json之間的聯(lián)系
正文
在nodejs編寫的腳手架項(xiàng)目中,npm是不可缺少的包管理工具,當(dāng)使用npm初始化時(shí),會(huì)生成package.json文件來對(duì)項(xiàng)目進(jìn)行整體的管理和描述
以下是新建的練習(xí)項(xiàng)目中package.json文件,初始化項(xiàng)目之后,安裝了axios
配置信息
以上每個(gè)配置信息分別對(duì)應(yīng)的含義如下
(1)name * 項(xiàng)目名稱
(2)version * 當(dāng)前版本號(hào)
(3)description 是描述信息
(4)main: 'index.js' 表示項(xiàng)目入口
(5)script 用于配置腳本信息 start/stop/test/restart 時(shí), npm run start中的run可以省略
(6)author 作者 (發(fā)布時(shí)用到)
(7)license 開源協(xié)議 (發(fā)布時(shí)用到)
(8)dependencies 依賴 開發(fā)環(huán)境生產(chǎn)環(huán)境都需要
(9)devDependencies 開發(fā)時(shí)依賴的庫(kù), 生產(chǎn)環(huán)境不需要使用
package-lock.json文件
以上項(xiàng)目通過 npm install axios 為項(xiàng)目添加了axios,所以在dependencies下添加了aixos,安裝的時(shí)候除了在node_modules會(huì)增加對(duì)應(yīng)的依賴外,在package-lock.json會(huì)指明axios具體的版本以及axios內(nèi)部的依賴,可以看到package-lock.json文件中,axios版本為0.21.1
但,有一點(diǎn)很奇怪,明明我只安裝了 axios,為什么 package-lock.json 的dependencies 中還有一個(gè) "follow-redirects",我們找到 node_modules 中安裝的包文件,發(fā)現(xiàn)確實(shí)有axios和follow-redirects,打開axios的package.json文件,可以看到在axios的生產(chǎn)依賴 dependencies 中添加了 "follow-redirects",所以在安裝 axios 的時(shí)候,自動(dòng)幫我們安裝了它所依賴的包,而 devDependencies 中依賴的包都沒有安裝,這也驗(yàn)證了一點(diǎn),devDependencies只會(huì)被用于開發(fā)中,生產(chǎn)當(dāng)中是不會(huì)安裝的
執(zhí)行 npm install
當(dāng)我們拿到一個(gè)新項(xiàng)目的時(shí)候,通常是沒有node_modules文件夾的,我們需要自行通過 npm install 來安裝所有的依賴,當(dāng)執(zhí)行 npm install 的時(shí)候具體進(jìn)行了哪些操作呢?
如圖所示,當(dāng)項(xiàng)目中存在package.json文件執(zhí)行 npm install 的時(shí)候,首先會(huì)判斷是否存在 package-lock.json 文件,沒有 lock 文件的話,會(huì)根據(jù) package.json 文件建立依賴關(guān)系,然后去存儲(chǔ) npm 各種工具的 registry 庫(kù)中查找依賴并獲取壓縮包,此時(shí)會(huì)將壓縮包緩存下來,然后將壓縮包添加到 node_modules中,添加到 node_modules 后會(huì)生成 package-lock.json 中記錄下載的版本和依賴關(guān)系。
如果存在 package-lock.json 文件,直接判斷packge.json 所需依賴中與lock文件中依賴是否一致,不一致再重新建立依賴關(guān)系,一致的時(shí)候去緩存中查找緩存文件,沒找到緩存文件就自行去 registry 庫(kù)中下載壓縮包。
以上就是詳解npm與package.json之間的聯(lián)系的詳細(xì)內(nèi)容,更多關(guān)于npm與package.json的聯(lián)系的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- JS生態(tài)系統(tǒng)加速探索Draft-js?emoji插件功能及使用探索
- JS生態(tài)系統(tǒng)加速Tailwind?CSS工作原理探究
- JS生態(tài)系統(tǒng)加速桶裝文件使用探索
- JS?生態(tài)系統(tǒng)加速Polyfill函數(shù)使用實(shí)例探索
- Node.js包管理器代理工具Verdaccio輕松創(chuàng)建管理本地npm包倉(cāng)庫(kù)
- websocket心跳重連實(shí)現(xiàn)探索(npm:websocket-heartbeat-js)
- JS生態(tài)系統(tǒng)加速npm腳本優(yōu)化及性能分析探索
相關(guān)文章
詳解基于node.js的腳手架工具開發(fā)經(jīng)歷
這篇文章主要介紹了詳解基于node.js的腳手架工具開發(fā)經(jīng)歷,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01node.js中RPC(遠(yuǎn)程過程調(diào)用)的實(shí)現(xiàn)原理介紹
這篇文章主要介紹了node.js中RPC(遠(yuǎn)程過程調(diào)用)的實(shí)現(xiàn)原理介紹,本文基于一個(gè)簡(jiǎn)單的RPC庫(kù)nodejs light_rpc實(shí)現(xiàn),需要的朋友可以參考下2014-12-12NodeJs使用Mysql模塊實(shí)現(xiàn)事務(wù)處理實(shí)例
本篇文章主要介紹了NodeJs使用Mysql模塊實(shí)現(xiàn)事務(wù)處理 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05了不起的node.js讀書筆記之node的學(xué)習(xí)總結(jié)
這篇文章主要介紹了了不起的node.js讀書筆記之node的學(xué)習(xí)總結(jié),需要的朋友可以參考下2014-12-12