最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從零揭秘npm install的黑科技

 更新時(shí)間:2023年05月29日 11:45:52   作者:??????????????????  
通過(guò)npm package manager來(lái)安裝和管理包是我們最為常見(jiàn)的方式之一,本文將從淺入深地帶大家剖析一下npm install的執(zhí)行過(guò)程,感興趣的可以學(xué)習(xí)一下

作為一名前端開(kāi)發(fā)人員,每天我們都要使用到許多的第三方包。而通過(guò)npm package manager來(lái)安裝和管理這些包是我們最為常見(jiàn)的方式之一。但是,你是否知道當(dāng)我們使用npm install安裝一個(gè)包時(shí),發(fā)生了哪些事情呢?接下來(lái),本文將從淺入深地剖析npm install的執(zhí)行過(guò)程。

淺談npm install

什么是npm

npm,即Node.js Package Manager,是一個(gè)用于 Node.js 的包管理器。通過(guò)該軟件包管理器,開(kāi)發(fā)者可以下載別人編寫(xiě)的代碼包以及發(fā)布自己編寫(xiě)的代碼包,并在項(xiàng)目中引用和使用這些包。

npm包是什么

npm包實(shí)際上就是可以被復(fù)用的Node.js模塊。這些模塊可以是由其他開(kāi)發(fā)者創(chuàng)建的,也可以是我們自己個(gè)人創(chuàng)建并且上傳到npm上的。

npm install是做什么的

通過(guò)npm install,我們可以將一個(gè)或多個(gè)npm包安裝到當(dāng)前項(xiàng)目中。這樣,在項(xiàng)目中就可以直接使用這些包,而不必?fù)?dān)心依賴關(guān)系等問(wèn)題。

npm install的內(nèi)部執(zhí)行過(guò)程

話不多說(shuō),現(xiàn)在讓我們一起來(lái)看看npm install的內(nèi)部執(zhí)行過(guò)程吧。

第一步:讀取package.json文件

首先,npm會(huì)讀取當(dāng)前項(xiàng)目中的package.json文件,該文件含有了所有相關(guān)的依賴和開(kāi)發(fā)者信息。在package.json文件中,可以指定使用哪個(gè)版本的某個(gè)包。

第二步:創(chuàng)建node_modules文件夾

接下來(lái),在package.json所在的目錄下,npm會(huì)自動(dòng)創(chuàng)建一個(gè)名為node_modules的文件夾。

第三步:下載依賴項(xiàng)

當(dāng)以上兩個(gè)步驟完成后,npm就開(kāi)始執(zhí)行真正的安裝操作了。這時(shí),它會(huì)根據(jù)package.json中定義的依賴信息,從npm registry上下載所有依賴項(xiàng),并將它們放置到node_modules目錄下。

值得注意的是,如果項(xiàng)目中的依賴項(xiàng)已經(jīng)存在于本地緩存中,則npm會(huì)直接從本地緩存中拷貝這些依賴對(duì)象,而不是重新從registry上下載。這樣做的好處是可以提高安裝速度,同時(shí)避免重復(fù)下載相同版本的依賴包。

例如,我們使用以下命令來(lái)安裝jQuery:

$ npm install jquery --save-dev

那么,npm就會(huì)檢查package.json文件中所列出的依賴項(xiàng),并將jQuery 3.4.1版本下載并安裝到本地的node_modules/jquery目錄下。

第四步:解決依賴項(xiàng)

通過(guò)上述步驟,我們成功下載并安裝了我們使用到的依賴包。不過(guò),我們的項(xiàng)目中還可能存在其他依賴項(xiàng),這些依賴項(xiàng)也需要被安裝到node_modules目錄下。

具體來(lái)說(shuō),當(dāng)npm發(fā)現(xiàn)項(xiàng)目中某個(gè)包依賴于另一個(gè)包時(shí),它會(huì)檢查該依賴包是否已經(jīng)在本地緩存中。如果是,則會(huì)將該依賴項(xiàng)拷貝到該包的node_modules目錄下;如果不是,則從npm registry上下載該包,并將其安裝到本地緩存里。

例如,當(dāng)前項(xiàng)目中使用了lodashunderscore.string兩個(gè)包。其中,在package.json中,lodash是直接被定義為項(xiàng)目的一個(gè)依賴,而underscore.string是被定義為lodash的一個(gè)依賴。那么,在執(zhí)行npm install時(shí),會(huì)按以下順序進(jìn)行依賴項(xiàng)的解決:

  • 首先,npm會(huì)安裝lodash包,并將其拷貝到node_modules/lodash中。
  • 接著,當(dāng)npm看到在package.json文件中定義了underscore.string的依賴項(xiàng)時(shí),它會(huì)檢查lodash是否已經(jīng)被安裝。此時(shí),由于lodash已經(jīng)被安裝在了node_modules/lodash目錄下,因此npm會(huì)繼續(xù)安裝并將underscore.string打包到node_modules/lodash/node_modules/underscore.string路徑下。

第五步:執(zhí)行preinstall腳本

在所有的依賴項(xiàng)被成功安裝后,npm可能會(huì)在默認(rèn)情況下運(yùn)行預(yù)安裝鉤子(preinstall hook)腳本,以確保所有依賴關(guān)系都已經(jīng)被正確地安裝。

如果有任何錯(cuò)誤發(fā)生,npm將會(huì)在這個(gè)階段拋出異常,并停止執(zhí)行npm install命令。

第六步:執(zhí)行postinstall腳本

當(dāng)所有依賴關(guān)系已經(jīng)被處理完畢后,npm可根據(jù)需要運(yùn)行一個(gè)或多個(gè)后安裝鉤子(postinstall hook)腳本,以執(zhí)行任何定制化的項(xiàng)目初始化、配置或是構(gòu)建任務(wù)等操作。

第七步:生成Lockfile

最后,npm會(huì)在項(xiàng)目根目錄下生成一個(gè)package-lock.json文件,該文件用于鎖定該項(xiàng)目中所有依賴項(xiàng)的版本號(hào)。該文件可以幫助其他開(kāi)發(fā)者在不同的主機(jī)或環(huán)境中重新創(chuàng)建和復(fù)制該項(xiàng)目時(shí),確保使用的依賴項(xiàng)版本與原本一致。

總結(jié)

事實(shí)上,npm install過(guò)程中涉及的步驟還有很多。但是,在掌握了基本的執(zhí)行流程后,我們至少能對(duì)整個(gè)npm包安裝過(guò)程有一個(gè)較為清晰的認(rèn)識(shí),方便我們針對(duì)具體場(chǎng)景進(jìn)行問(wèn)題的分析和解決。

npm深層次的工作原理遠(yuǎn)遠(yuǎn)超出于我們所期望的那么復(fù)雜。不過(guò),通過(guò)以上的講解,相信大家都已經(jīng)對(duì)npm包管理器有了一個(gè)初步的認(rèn)識(shí)了。

最后附上小提示:熟記一些基本的npm命令可以幫助你更加高效地進(jìn)行代碼開(kāi)發(fā),提高你的工作效率。

到此這篇關(guān)于從零揭秘npm install的黑科技的文章就介紹到這了,更多相關(guān)npm install內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用Nodejs實(shí)現(xiàn)在終端中炒股的實(shí)現(xiàn)

    用Nodejs實(shí)現(xiàn)在終端中炒股的實(shí)現(xiàn)

    這篇文章主要介紹了用Nodejs實(shí)現(xiàn)在終端中炒股的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 150行Node.js實(shí)現(xiàn)的dns代理工具

    150行Node.js實(shí)現(xiàn)的dns代理工具

    這篇文章主要介紹了150行Node.js實(shí)現(xiàn)的dns代理工具,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Node.js用Socket.IO做聊天軟件的實(shí)現(xiàn)示例

    Node.js用Socket.IO做聊天軟件的實(shí)現(xiàn)示例

    本文主要介紹了Node.js用Socket.IO做聊天軟件的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 如何降低node版本,怎樣實(shí)現(xiàn)降低node版本

    如何降低node版本,怎樣實(shí)現(xiàn)降低node版本

    這篇文章主要介紹了如何降低node版本,怎樣降低node版本問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • nodejs搭建本地http服務(wù)器教程

    nodejs搭建本地http服務(wù)器教程

    本篇文章主要介紹了nodejs搭建本地http服務(wù)器教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • 解決node.js安裝包失敗的幾種方法

    解決node.js安裝包失敗的幾種方法

    nodejs安裝包失敗的原因可能有很多,下面這篇文章給大家整理三種方法來(lái)解決,大家可以試一試或許可以解決你的問(wèn)題,下面來(lái)一起看一看。
    2016-09-09
  • Node中使用http-proxy-middleware實(shí)現(xiàn)代理跨域的方法步驟

    Node中使用http-proxy-middleware實(shí)現(xiàn)代理跨域的方法步驟

    本文主要介紹了Node中使用http-proxy-middleware實(shí)現(xiàn)代理跨域的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Node.js  REPL (交互式解釋器)實(shí)例詳解

    Node.js REPL (交互式解釋器)實(shí)例詳解

    這篇文章主要介紹了Node.js REPL (交互式解釋器)實(shí)例詳解的相關(guān)資料,Node.js REPL(Read Eval Print Loop:交互式解釋器) 表示一個(gè)電腦的環(huán)境,類(lèi)似 Window 系統(tǒng)的終端,我們可以在終端中輸入命令,并接收系統(tǒng)的響應(yīng),需要的朋友可以參考下
    2017-08-08
  • node.js中cluster的使用教程

    node.js中cluster的使用教程

    這篇文章主要介紹了node.js中cluster的使用教程,分別介紹使用NODE中cluster利用多核CPU、通過(guò)消息傳遞來(lái)監(jiān)控工作進(jìn)程狀態(tài)以及終止進(jìn)程等功能,給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來(lái)一起看看吧
    2017-06-06
  • vscode 調(diào)試 node.js的方法步驟

    vscode 調(diào)試 node.js的方法步驟

    這篇文章主要介紹了vscode 調(diào)試 node.js的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論

永安市| 蓝田县| 兰溪市| 温宿县| 龙井市| 通道| 眉山市| 兰溪市| 鄯善县| 景东| 涟水县| 南部县| 延庆县| 朝阳区| 永定县| 石狮市| 荣昌县| 射洪县| 长沙县| 聊城市| 阿坝| 澄城县| 柯坪县| 武汉市| 泉州市| 曲周县| 金阳县| 凤山县| 突泉县| 乳源| 洛阳市| 桦甸市| 浪卡子县| 丹凤县| 瑞安市| 体育| 咸阳市| 长兴县| 江西省| 尼玛县| 大名县|