成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Npm 的內部原理以及鏡像私服部署

存儲
眾所周知,前端發展到現在已經形成了完整的體系,除了框架的提高效率外,還有一系列的工程化操作。前端工程化離不開npm或yarn等管理工具,通過script串聯起各個職能部分,讓獨立的環節自動運轉起來。

[[435868]]

眾所周知,前端發展到現在已經形成了完整的體系,除了框架的提高效率外,還有一系列的工程化操作。前端工程化離不開npm或yarn等管理工具,通過script串聯起各個職能部分,讓獨立的環節自動運轉起來。我們知道無論是npm還是yarn等管理工具的體積都是比較大的,那么實際使用過程中就會出現幾個疑問:

  • 刪除node_modules和lockfiles文件,再重新install,這樣操作是否會存在風險呢?
  • 把所有依賴都安裝在dependencies中,不區分devDependencies會有什么問題呢?
  • 應用依賴了公共庫A和公共庫B,同時A依賴了B,那么B會被多次進行安裝或重復打包嗎?
  • 一個項目中,既有人用npm,又有人使用了yarn,這會引發什么問題呢?
  • 我們是否應該將lockfiles文件push到項目倉庫中?

1.npm的內部機制和核心原理

我們知道npm的核心目標就是給你和你的團隊、你的公司帶來最好的開源庫和依賴。我們知道在使用npm進行項目啟動最重要的環節就是安裝相關包和依賴,而在安裝過程中出現相關問題,最好的解決方法就是刪除node_modules,重新進行npm install。

npm的安裝機制優先安裝依賴包到當前項目目錄,使得各個項目依賴的包形成體系,可以減輕包的兼容性壓力,但是缺點是同一個依賴包可能在電腦上安裝多次。但是supervisor和gulp等可以使用全局安裝模式,方便注冊path環境變量,可以直接使用supervisor、gulp等命令。

當構建依賴樹時,不管是當前依賴還是依賴的子依賴時,都應該按照扁平化原則優先將其放置node_modules根目錄。在此過程 中,遇到相同模塊就判斷已放置在依賴樹中的版本是否兼容此模塊,符合則跳過,不符合則在當前node_modules目錄下放置該模塊。

前端工程中,依賴嵌套依賴,如果每個依賴包都從網絡中獲取安裝,那么就增加了時間成本,如果node_modules安裝包通過緩存進行獲取,就提升了安裝效率。對于一個依賴包的同一個版本進行本地化緩存,是當前依賴包管理工具的一個常見設計,可以通過命令npm config get cache進行獲取緩存。當我們打開本地緩存_cache文件時,npm緩存有三個目錄:

  • content-v2 二進制文件
  • index-v5 content-v2里文件索引
  • tmp 臨時文件

2.npm緩存機制

那么這些緩存是如何存儲并被利用的呢?

當npm install執行時,通過pacote把相應的包解壓到對應的node_modules下面

pacote依賴npm-registry-fetch來下載包,在給定的路徑下根據IETF RFC 7234生成緩存數據

在每次安裝資源時,根據package-lock.json中存儲的integrity、version、name信息生成一個唯一的key

如果發現有緩存資源,就會找到tar包的hash,再次通過pacote把對應的二進制文件解壓到對應的項目node_modules下面

注意:緩存策略是從npm v5版本開始的,在npm v5版本前每個緩存的模塊在~/.npm文件夾中以模塊名的形式直接存儲,存儲結構是:{cache}/{name}/{version}

3.如何驗證組件的可行性

自定義npm init命令:npm init命令調用shell腳本輸出一個初始化的package.json文件。

倘若在開發組件庫時,某個組件開發完成后,如何驗證該組件能在實際業務項目中正常運行呢?可以在組件庫開發中,設計examples目錄或者一個playground啟動一個開發服務,以驗證組件的運行情況。此外,還可以手動復制粘貼組件并打包產出到業務項目的node_modules中進行驗證。

如何高效率在本地調試以驗證包的可用性?使用npm link,將模塊鏈接到對應的業務項目中運行。npm link的本質就是軟鏈接,主要做了兩件事情:

為目標npm模塊(npm-package 1)創建軟鏈接,將其鏈接到全局node模塊安裝路徑/usr/local/lib/node_modules/中

為目標npm模塊(npm-package 1)的可執行bin文件創建軟鏈接,將其鏈接到全局node命令安裝路徑/usr/local/bin/中

簡而言之,npm lick能夠在工程中解決依賴包在任何一個真實項目中進行調試的問題,并且操作起來更加方便快捷。

4.npx的作用

在傳統項目中使用eslint插件,需要先在命令行進行npm install eslint save-dev,然后再在項目進行命令行調用:

  1. ./node_modules/.bin/eslint --init 
  2.  
  3. ./node_modules/.bin/eslint yourfile.js 

而使用npx操作就非常便捷,只需要:

  1. npx eslint --init 
  2.  
  3. npx eslint yourfile.js 

之所以npx如此之便捷,是因為:

可以直接執行node_modules/.bin文件夾下的文件

可以自動去node_modules/.bin路徑和環境變量$PATH里面檢查命令是否存在

nox在執行模塊時會優先安裝依賴,但是在安裝執行后便刪除次依賴,這就避免了全局安裝模塊帶來的問題。

5.npm多源鏡像和企業級部署私服原理

例如:npm中的源(registry)對應地址是https://registry.npmjs.org/,我們在開發中常用nrm(npm的鏡像源管理工具)進行源的切換和管理。為什么官方源有那么安全,公司還要自己進行部署內部使用的鏡像源?原因有兩點:

部署鏡像后,可以確保高速、穩定的npm服務,使得發布私有模塊更加安全

審核機制,保障私服上的npm模塊質量和安全

如果我們要部署一個私有npm鏡像,有三個工具分別是:

npm的配置優先級:

6.參考 

《前端基礎設施建設與架構30講》

 

責任編輯:武曉燕 來源: 前端萬有引力
相關推薦

2015-02-11 11:12:00

Hadoop云部署IaaS

2023-06-07 15:25:19

Kafka版本日志

2021-08-11 07:02:21

npm包管理器工具

2023-09-18 23:37:50

Kubernetes架構

2024-01-10 09:48:52

Docker工具

2009-09-14 10:35:15

Linq內部執行原理

2023-10-08 07:45:34

Npm解析服務前端

2024-01-23 10:23:41

2020-03-12 11:29:51

JavaScript瀏覽器語言

2020-03-05 16:47:51

Git內部儲存

2023-03-01 10:37:51

2009-08-05 18:49:11

XmlSerializ

2018-06-05 08:36:47

內部部署云存儲

2023-09-27 12:22:50

Kafka架構

2011-10-08 14:09:27

JavaScript

2023-05-30 09:07:06

CPU性能火焰圖

2023-12-07 12:45:58

進程共享數據

2023-08-08 00:06:31

2010-10-09 08:50:16

2021-07-29 11:46:27

NAS存儲NAS服務器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品一区二区网址 | 精品一区二区久久 | 国产99久久 | h小视频| 欧美精品一区在线 | 91视频免费在观看 | 国产精品性做久久久久久 | 91精品国产91久久综合桃花 | 又黑又粗又长的欧美一区 | 国产美女网站 | 免费一区二区三区 | 日韩在线观看 | 日日操操操 | 精品在线一区 | 天天玩天天操天天干 | 欧美一区二区三区在线观看 | 精彩视频一区二区三区 | 国产一级在线 | 日日操夜夜操天天操 | 欧美人妇做爰xxxⅹ性高电影 | 99久久精品国产一区二区三区 | 国产亚洲精品久久久久动 | 久久久久成人精品亚洲国产 | 日韩中出 | 久久久久久久av | 久久久不卡网国产精品一区 | 一区二区三区国产 | 香蕉久久av | 国产精品视频999 | 国产一区免费视频 | 天天曰夜夜操 | 欧美日韩亚洲一区 | 久久综合久久自在自线精品自 | 亚洲一区二区在线免费观看 | 欧美视频三级 | 国产婷婷色综合av蜜臀av | 一级片网址 | 狠狠综合久久av一区二区小说 | 久久久久久国产精品免费免费 | 最近最新中文字幕 | 欧美久久视频 |