日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

在前端中,什么是幽靈依賴?

來源: 責(zé)編: 時間:2024-04-22 09:15:59 200觀看
導(dǎo)讀前言大家好,我是林三心,用最通俗易懂的話講最難的知識點(diǎn)是我的座右銘,基礎(chǔ)是進(jìn)階的前提是我的初心。幽靈依賴?前幾天在公司的技術(shù)分享會上,我總是聽到大佬們在提起一個名詞——幽靈依賴,起初我沒有太在意,以為這個不太重要,所

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點(diǎn)是我的座右銘,基礎(chǔ)是進(jìn)階的前提是我的初心。Tj128資訊網(wǎng)——每日最新資訊28at.com

幽靈依賴?

前幾天在公司的技術(shù)分享會上,我總是聽到大佬們在提起一個名詞——幽靈依賴,起初我沒有太在意,以為這個不太重要,所以就沒怎么去了解這個名詞。Tj128資訊網(wǎng)——每日最新資訊28at.com

直到我在做項目pnpm遷移的時候,我突然很想知道它跟幽靈依賴到底有什么關(guān)系呢?Tj128資訊網(wǎng)——每日最新資訊28at.com

其實(shí)在了解什么關(guān)系之前,我應(yīng)該去了解一下什么是幽靈依賴,我們接著聊!!!Tj128資訊網(wǎng)——每日最新資訊28at.com

什么是幽靈依賴?

比如我現(xiàn)在,我在開發(fā)一個項目A,項目A中我裝了npm-lsx這個包,而這個npm-lsx的包依賴了npm-test,咱們來看看這兩處packages.jsonTj128資訊網(wǎng)——每日最新資訊28at.com

依賴關(guān)系是:A <- npm-lsx <- npm-testTj128資訊網(wǎng)——每日最新資訊28at.com

// A/packages.json{  "name": "A",  "dependencies": {    "npm-lsx": "^1.0.0"  }}// A/node_modules/npm-lsx/packages.json{  "name": "npm-lsx",  "dependencies": {    "npm-test": "^1.0.0"  }}

node_modules規(guī)則

如果按照node_modules的規(guī)則的話,那么目錄的結(jié)構(gòu)應(yīng)該是這樣的Tj128資訊網(wǎng)——每日最新資訊28at.com

node_modules├── npm-lsx |   └── node_modules|       └── npm-test

但是如果依賴關(guān)系很長的話,那么會導(dǎo)致目錄深度非常深,所以我們常用的npm、yarn解決了這個問題Tj128資訊網(wǎng)——每日最新資訊28at.com

npm、yarn

它們是怎么解決這個問題的呢?npm、yarn為了解決依賴關(guān)系過長時,導(dǎo)致的目錄結(jié)構(gòu)過深,采用了扁平化,也就是所有依賴都被拍平到node_modules目錄下。這樣的好處就是,不再有層級過深的問題。Tj128資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在目錄結(jié)構(gòu)變成這樣了Tj128資訊網(wǎng)——每日最新資訊28at.com

// A/node_modulesnode_modules├── npm-lsx ├── npm-test

幽靈依賴

接著上面的示例,繼續(xù)聊,請看下面的代碼Tj128資訊網(wǎng)——每日最新資訊28at.com

const lsx = require('npm-lsx')const test = require('npm-test')lsx()test()

你們覺得這段代碼有問題嗎?其實(shí)運(yùn)行起來是沒問題的。但是問題來了,我們項目中居然能直接引用npm-test這個包!!!Tj128資訊網(wǎng)——每日最新資訊28at.com

我們都知道依賴關(guān)系是:Tj128資訊網(wǎng)——每日最新資訊28at.com

A <- npm-lsx <- npm-testTj128資訊網(wǎng)——每日最新資訊28at.com

按理說,A是不能直接引用npm-test的,因?yàn)闆]有直接依賴關(guān)系啊!!!但是因?yàn)榍懊嬲f了,npm、yarn會將依賴拍平在A的node_modules中,這導(dǎo)致了A可以直接require('npm-test')Tj128資訊網(wǎng)——每日最新資訊28at.com

我們稱這個npm-test為幽靈依賴!!!Tj128資訊網(wǎng)——每日最新資訊28at.com

幽靈依賴的壞處?

某天 npm-lsx 不依賴 npm-test 了

已知你現(xiàn)在代碼是這樣Tj128資訊網(wǎng)——每日最新資訊28at.com

const lsx = require('npm-lsx')const test = require('npm-test')lsx()test()

某天npm-lsx升級了!它不再依賴npm-test了!那么此時A的node-modules中變了!Tj128資訊網(wǎng)——每日最新資訊28at.com

// 以前node_modules├── npm-lsx ├── npm-test// 現(xiàn)在node_modules├── npm-lsx

那么你的代碼會報錯!Tj128資訊網(wǎng)——每日最新資訊28at.com

const lsx = require('npm-lsx')const test = require('npm-test') // 沒有l(wèi)sx()test() // 報錯!!!

其實(shí)這個情況還好,因?yàn)檫@種情況在打包上線過程中就會報錯依賴找不到了,所以不太會造成線上的報錯崩潰Tj128資訊網(wǎng)——每日最新資訊28at.com

多項目引用同一個幽靈依賴

我現(xiàn)在有兩個項目A和BTj128資訊網(wǎng)——每日最新資訊28at.com

A中的node_modules目錄為,現(xiàn)階段npm-test的版本為1.0.0Tj128資訊網(wǎng)——每日最新資訊28at.com

// A/node_modulesnode_modules├── npm-lsx ├── npm-test 版本號:1.0.0

A中某個文件的代碼為Tj128資訊網(wǎng)——每日最新資訊28at.com

const test = require('npm-test')test()

B中某個文件的代碼為Tj128資訊網(wǎng)——每日最新資訊28at.com

const test = require('npm-test')test()

當(dāng)有一天npm-lsx所依賴的npm-test升級了!版本升級為了2.0.0Tj128資訊網(wǎng)——每日最新資訊28at.com

// A/node_modulesnode_modules├── npm-lsx ├── npm-test 版本號:2.0.0

此時test的用法也變了~而因?yàn)锳項目已經(jīng)回歸過了,所以他知道,也改了對應(yīng)的代碼Tj128資訊網(wǎng)——每日最新資訊28at.com

const test = require('npm-test')test.run() // 修改代碼

而B項目就沒那么好運(yùn)了,它并沒有進(jìn)行回歸,所以并沒有去改代碼!!!!Tj128資訊網(wǎng)——每日最新資訊28at.com

const test = require('npm-test') // 有test() // 直接報錯

這就慘了,B項目在打包階段并不會因?yàn)橐蕾嚥坏絥pm-test而報錯,所以它會順利上線。。然后,等到了線上運(yùn)行起來,直接報錯!!!這是非常嚴(yán)重的的事故!Tj128資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-84468-0.html在前端中,什么是幽靈依賴?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 頻繁切換v-show,不頻繁使用v-if?面試的時候可別再這么說了!

下一篇: 美團(tuán)一面:什么是CAS?有什么優(yōu)缺點(diǎn)?我說我知道AtomicInteger

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 對標(biāo)蘋果的靈動島 華為帶來實(shí)況窗功能

    繼蘋果的靈動島之后,華為也在今天正式推出了“實(shí)況窗”功能。據(jù)今天鴻蒙OS 4.0的現(xiàn)場演示顯示,華為的實(shí)況窗可以更高效的展現(xiàn)出實(shí)時通知,比如鎖屏上就能看到外賣、打車、銀行
  • 三言兩語說透設(shè)計模式的藝術(shù)-單例模式

    寫在前面單例模式是一種常用的軟件設(shè)計模式,它所創(chuàng)建的對象只有一個實(shí)例,且該實(shí)例易于被外界訪問。單例對象由于只有一個實(shí)例,所以它可以方便地被系統(tǒng)中的其他對象共享,從而減少
  • 多線程開發(fā)帶來的問題與解決方法

    使用多線程主要會帶來以下幾個問題:(一)線程安全問題  線程安全問題指的是在某一線程從開始訪問到結(jié)束訪問某一數(shù)據(jù)期間,該數(shù)據(jù)被其他的線程所修改,那么對于當(dāng)前線程而言,該線程
  • JavaScript學(xué)習(xí) -AES加密算法

    引言在當(dāng)今數(shù)字化時代,前端應(yīng)用程序扮演著重要角色,用戶的敏感數(shù)據(jù)經(jīng)常在前端進(jìn)行加密和解密操作。然而,這樣的操作在網(wǎng)絡(luò)傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數(shù)據(jù)
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內(nèi)容創(chuàng)建項目,添加 Spring Web 依賴項,并單擊“生成”按鈕下載 .zip 文件,為下一步做準(zhǔn)備。請在進(jìn)入步驟2之前進(jìn)行解壓。圖
  • 這款新興工具平臺,讓你的電腦效率翻倍

    隨著信息技術(shù)的發(fā)展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個瓶頸。于是各種工具應(yīng)運(yùn)而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • 消費(fèi)結(jié)構(gòu)調(diào)整丨巨頭低價博弈,拼多多還卷得動嗎?

    來源:征探財經(jīng)作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來越明顯。曾經(jīng)主攻中高端與品質(zhì)的淘寶天貓、京東重拾&ldquo;低價&rdquo;口號。而過去與他們錯位競爭的拼多多,靠
  • 疑似小米14外觀設(shè)計圖曝光:后置相機(jī)模組變化不大

    下半年的大幕已經(jīng)開啟,而誰將成為下半年手機(jī)圈的主角就成為了大家關(guān)注的焦點(diǎn),其中被傳有望拿下新一代驍龍8 Gen3旗艦芯片的小米14系列更是備受大家矚
  • 超閉合精工鉸鏈 徹底消滅縫隙 三星Galaxy Z Flip5與Galaxy Z Fold5發(fā)布

    2023年7月26日,三星電子正式發(fā)布了Galaxy Z Flip5與Galaxy Z Fold5。三星新一代折疊屏手機(jī)采用超閉合精工鉸鏈,讓折疊后的縫隙不再可見。同時,配合處
Top 主站蜘蛛池模板: 宁德市| 肃宁县| 金坛市| 南京市| 保康县| 宜章县| 清远市| 珠海市| 溧水县| 苗栗县| 鄱阳县| 湟源县| 建宁县| 西吉县| 商丘市| 永济市| 南靖县| 咸阳市| 长春市| 安溪县| 华安县| 阿鲁科尔沁旗| 温州市| 武山县| 合作市| 天等县| 刚察县| 芦山县| 大悟县| 山东省| 常熟市| 孙吴县| 阜康市| 天峻县| 广东省| 永定县| 宜兰市| 永康市| 石家庄市| 安康市| 克山县|