国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

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

開發 前端
它們是怎么解決這個問題的呢?npm、yarn?為了解決依賴關系過長時,導致的目錄結構過深,采用了扁平化?,也就是所有依賴都被拍平到node_modules目錄下。這樣的好處就是,不再有層級過深的問題。

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心。

幽靈依賴?

前幾天在公司的技術分享會上,我總是聽到大佬們在提起一個名詞——幽靈依賴,起初我沒有太在意,以為這個不太重要,所以就沒怎么去了解這個名詞。

直到我在做項目pnpm遷移的時候,我突然很想知道它跟幽靈依賴到底有什么關系呢?

其實在了解什么關系之前,我應該去了解一下什么是幽靈依賴,我們接著聊?。?!

什么是幽靈依賴?

比如我現在,我在開發一個項目A,項目A中我裝了npm-lsx這個包,而這個npm-lsx的包依賴了npm-test,咱們來看看這兩處packages.json

依賴關系是:A <- npm-lsx <- npm-test

// 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規則

如果按照node_modules的規則的話,那么目錄的結構應該是這樣的

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

但是如果依賴關系很長的話,那么會導致目錄深度非常深,所以我們常用的npm、yarn解決了這個問題

npm、yarn

它們是怎么解決這個問題的呢?npm、yarn為了解決依賴關系過長時,導致的目錄結構過深,采用了扁平化,也就是所有依賴都被拍平到node_modules目錄下。這樣的好處就是,不再有層級過深的問題。

現在目錄結構變成這樣了

// A/node_modules

node_modules
├── npm-lsx 
├── npm-test

幽靈依賴

接著上面的示例,繼續聊,請看下面的代碼

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

lsx()
test()

你們覺得這段代碼有問題嗎?其實運行起來是沒問題的。但是問題來了,我們項目中居然能直接引用npm-test這個包?。?!

我們都知道依賴關系是:

A <- npm-lsx <- npm-test

按理說,A是不能直接引用npm-test的,因為沒有直接依賴關系啊?。?!但是因為前面說了,npm、yarn會將依賴拍平在A的node_modules中,這導致了A可以直接require('npm-test')

我們稱這個npm-test為幽靈依賴?。?!

幽靈依賴的壞處?

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

已知你現在代碼是這樣

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

lsx()
test()

某天npm-lsx升級了!它不再依賴npm-test了!那么此時A的node-modules中變了!

// 以前
node_modules
├── npm-lsx 
├── npm-test

// 現在
node_modules
├── npm-lsx

那么你的代碼會報錯!

const lsx = require('npm-lsx')
const test = require('npm-test') // 沒有

lsx()
test() // 報錯?。?!

其實這個情況還好,因為這種情況在打包上線過程中就會報錯依賴找不到了,所以不太會造成線上的報錯崩潰

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

我現在有兩個項目A和B

A中的node_modules目錄為,現階段npm-test的版本為1.0.0

// A/node_modules

node_modules
├── npm-lsx 
├── npm-test 版本號:1.0.0

A中某個文件的代碼為

const test = require('npm-test')

test()

B中某個文件的代碼為

const test = require('npm-test')

test()

當有一天npm-lsx所依賴的npm-test升級了!版本升級為了2.0.0

// A/node_modules

node_modules
├── npm-lsx 
├── npm-test 版本號:2.0.0

此時test的用法也變了~而因為A項目已經回歸過了,所以他知道,也改了對應的代碼

const test = require('npm-test')

test.run() // 修改代碼

而B項目就沒那么好運了,它并沒有進行回歸,所以并沒有去改代碼?。。?!

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

test() // 直接報錯

這就慘了,B項目在打包階段并不會因為依賴不到npm-test而報錯,所以它會順利上線。。然后,等到了線上運行起來,直接報錯!??!這是非常嚴重的的事故!

責任編輯:武曉燕 來源: 前端之神
相關推薦

2016-10-28 15:01:35

Cookie前端實踐

2022-11-21 18:02:04

前端測試

2020-07-14 14:59:00

控制反轉依賴注入容器

2025-04-07 02:30:00

Cursor前端

2012-07-19 15:54:14

2020-06-14 09:04:00

前端云計算無服務器

2024-07-02 09:03:48

2019-01-03 09:45:20

Go 前端 Web

2025-02-04 11:33:19

2015-10-23 11:15:32

前端性能優化

2020-03-13 13:45:41

前端面試Web

2017-02-24 14:18:50

前端HTTP緩存

2023-12-21 21:39:44

2024-10-28 09:38:15

2015-10-12 16:37:39

前端編碼雙向編譯

2023-10-27 10:16:17

前端項目Rust

2024-06-14 08:36:57

2025-07-11 00:48:00

2024-05-10 06:59:06

2019-09-18 18:12:57

前端javascriptvue.js
點贊
收藏

51CTO技術棧公眾號

91欧美在线视频| 天天插天天狠天天透| 国产精品一区二区三区观看| 色老头在线观看| 亚洲欧美日韩久久| 一本色道久久综合亚洲精品婷婷| 久久精品国产亚洲blacked| 欧美一区二区三区四区在线观看| 99爱视频在线观看| 成人一区在线观看| 国产精品美女诱惑| 免费成人av| 久久久国产一区二区| 18在线观看的| 日韩欧美在线视频| 成年人福利视频| 久久免费美女视频| 久久久国产精华液999999| 欧美日韩精品一本二本三本| 欧美亚洲一级片| 亚洲最大的免费视频网站| 亚洲国产精品久久久久秋霞不卡| 国产在线一二三| 精品国产1区2区| 免费av片风间由美在线| 久久久久久久网| 亚洲熟妇av日韩熟妇在线| 国模娜娜一区二区三区| av成人综合| 精品视频免费在线| 日韩av资源站| 性欧美大战久久久久久久久| av手机免费观看| 亚洲三级免费观看| 成人片在线播放| 亚洲国产成人午夜在线一区| 国产av天堂无码一区二区三区| 韩国欧美国产一区| 亚洲春色在线| 美女www一区二区| 亚洲视频在线二区| 日韩和欧美的一区| 日本精品国语自产拍在线观看| 亚洲免费大片| 久久久久网址| 美女视频一区免费观看| 欧美日韩电影一区二区三区| 亚洲欧洲一区二区天堂久久| 精品人伦一区二区三区| 在线欧美亚洲| 日韩视频精品| 国产一区二区按摩在线观看| 精品视频在线观看一区二区| 白白色 亚洲乱淫| 精品免费国产一区二区| 欧美国产日产图区| 九色视频网站| 欧美色欧美亚洲高清在线视频| 青青久在线视频| 91精品国产一区二区| 97caopor国产在线视频| 精品盗摄一区二区三区| 18+激情视频在线| 日韩av资源在线播放| free性欧美| 丝袜亚洲另类欧美| 国产原创一区| 性色av一区二区三区| 国产精品国码视频| 国产极品粉嫩福利姬萌白酱| 国产原创av在线| 国产一区不卡在线观看| 中文字幕一区二区三区日韩精品| 欧美日韩免费在线| 久久激情电影| 18禁男女爽爽爽午夜网站免费| 26uuu久久噜噜噜噜| 天天躁日日躁成人字幕aⅴ| 国产日韩欧美电影在线观看| 亚洲毛片av| 天堂社区 天堂综合网 天堂资源最新版| 蜜臀久久久99精品久久久久久| 一区二区精品在线观看| 91丝袜国产在线播放| 国产乱妇乱子| 日韩一区二区三区在线视频| 九九热这里有精品| 九色porny丨入口在线| 伊人久久免费视频| 一区中文字幕| 91在线观看网站| 经典一区二区三区| 男生操女生视频网站| 欧美日韩久久久久久| 四虎视频在线精品免费网址| 国产精品青草久久久久福利99| 噜噜噜久久亚洲精品国产品小说| 日日橹狠狠爱欧美超碰| 在线观看av不卡| 成人亚洲精品| 国产99re66在线视频| 韩国视频一区二区| 羞羞免费视频| 精品久久久久久最新网址| 操欧美女人视频| 欧洲亚洲一区二区| 中文成人综合网| 欧美卡一卡二| 国产99视频精品免视看7| 日本不卡在线视频| 天天噜天天色| 国产一区二区三区18| 综合日韩在线| av黄色在线网站| 欧美日韩国产一级| 成人搞黄视频| 免费看日b视频| 欧美性大战久久久久久久蜜臀| 久久的色偷偷| 香蕉精品视频在线| 在线看一区二区| 久久成人高清| 国产精品69页| 日韩电影在线观看中文字幕| 天天综合网网欲色| 亚洲国产精品毛片av不卡在线| 精品精品国产高清a毛片牛牛| 欧美亚洲激情| 色片在线免费观看| 日韩激情av在线播放| 亚洲精品二区三区| eeuss影院95999部| 夜夜嗨av一区二区三区四区| 影音先锋成人在线电影| 91制片厂毛片| 一区二区三区视频免费在线观看| 性欧美xxxx大乳国产app| 女人被爽到呻吟gif动态图下载| 日韩国产中文字幕| av不卡在线| 可以在线观看的av| 庆余年2免费日韩剧观看大牛| 久久久久久久久久电影| 悠悠资源网亚洲青| 日韩欧美一区二区三区四区 | 欧美电影免费观看网站| 肥熟一91porny丨九色丨| 一级日本不卡的影视| 美女午夜精品| 亚洲一二三区av| 久久国产精品免费视频 | a毛片在线观看| 444亚洲人体| 欧美日韩在线影院| 久久91精品| 91超碰中文字幕久久精品| 成人午夜电影免费在线观看| 国产精品二区二区三区| 国产精品白丝jk喷水视频一区 | 亚洲超碰97人人做人人爱| 激情综合自拍| 亚洲黄色成人| 精品成人一区二区三区免费视频| 青青久久av北条麻妃黑人| 国产精品第13页| 伊人成综合网伊人222| 成片免费观看视频| 国产精品普通话| 午夜精品成人在线| 欧美在线高清| 思思99re6国产在线播放| 国严精品久久久久久亚洲影视| 欧美主播一区二区三区美女| 伊人久久成人| 欧美精品videossex少妇| 午夜欧美一区二区三区免费观看| 亚洲精品在线三区| 国产成人综合网站| 久久爱www.| 色久视频在线观看| av激情久久| 日韩欧美的一区| 成人一道本在线| theporn国产在线精品| 黑人巨大精品欧美一区二区奶水| 91亚洲永久免费精品| 欧美一级日韩免费不卡| 蜜臀久久久久久久| 天堂综合在线播放| 国产女呦网站| 韩国成人av| 亚洲欧美日韩图片| 国产清纯在线一区二区www| 精品久久久久久久| 婷婷在线视频| 无罩大乳的熟妇正在播放| 国产精品久久久久久久久久久久久久| 欧美日韩中文字幕| 国产一区二区网址| 神马久久一区二区三区|