package.json中resolutions的使用場景

文章目錄

    • 用途
    • 配置示例
    • 使用方法
    • 注意事項
    • 和peerDependencies有什么不同
      • peerDependencies
      • resolutions
    • 總結

在這里插入圖片描述

?創作者:全棧弄潮兒
🏡 個人主頁: 全棧弄潮兒的個人主頁
🏙? 個人社區,歡迎你的加入:全棧弄潮兒的個人社區
📙 專欄地址,歡迎訂閱:前端架構師之路

在 package.json 中,resolutions 字段是 Yarn 特有的功能,用于強制特定的依賴版本解決方案。這在解決依賴沖突或確保項目中的所有包都使用相同版本的依賴時非常有用。

用途

  • 強制使用特定版本的依賴:

當項目的某些依賴包存在版本沖突時,resolutions 可以強制所有依賴包使用特定的版本。

  • 解決依賴沖突:

在某些情況下,不同的依賴包可能會依賴于同一個庫的不同版本,導致沖突。通過 resolutions,可以指定使用哪個版本,從而解決沖突。

  • 安全修復:

如果某個依賴包的某個版本存在安全漏洞,可以通過 resolutions 強制使用安全版本,確保項目的安全性。
使用場景

  • 版本沖突:

假設項目中有兩個包 A 和 B,其中 A 依賴于 lodash@^3.0.0,而 B 依賴于 lodash@^4.0.0。為了確保項目中只使用 lodash 的某個版本,可以使用 resolutions。
統一依賴版本:

為了項目的一致性和可維護性,可能希望所有的包都使用同一個版本的依賴。例如,強制所有包使用 react@17.0.0。

  • 臨時解決方案:

在等待依賴包維護者發布兼容版本之前,resolutions 可以作為一種臨時解決方案。

配置示例

假設我們有一個項目需要強制使用 react 的 17.0.0 版本,可以在 package.json 中添加如下配置:

{"dependencies": {"react": "^17.0.0","some-package": "^1.0.0"},"resolutions": {"react": "17.0.0"}
}

在上面的配置中,無論 some-package 依賴哪個版本的 react,最終都會使用 17.0.0 版本。

使用方法

  • 創建或修改 package.json:

  • 在項目的根目錄下,打開 package.json 文件。
    添加 resolutions 字段:

  • 在 package.json 中添加 resolutions 字段,并指定需要強制解決的依賴版本。
    重新安裝依賴:

  • 使用 Yarn 重新安裝依賴,確保 resolutions 字段生效。

yarn install

注意事項

resolutions 只在 Yarn 工作區中生效,npm 不支持此功能。
使用 resolutions 可能會導致一些意外的行為,因為強制使用的依賴版本可能與某些包不兼容。因此,使用時需要特別小心,并進行充分的測試。
通過以上方式,可以有效地管理和解決項目中的依賴版本問題,確保項目的穩定性和一致性。

和peerDependencies有什么不同

resolutions 和 peerDependencies 都是 package.json 中管理依賴的功能,但它們的用途和行為有很大不同。

peerDependencies

peerDependencies 用于指定一個包所依賴的、應該由最終用戶安裝的包版本。它主要用于庫開發者,確保其庫和用戶項目中的某個特定版本的依賴兼容。

  • 用途
    插件生態系統:當一個庫是另一個庫的插件時,比如 React 組件庫依賴于 React。
    確保版本一致性:確保最終應用中使用的依賴版本與庫開發者測試的版本一致。
  • 行為
    peerDependencies 不會自動安裝指定的包,但會發出警告,如果最終用戶沒有安裝這些依賴,或者安裝的版本不匹配。
  • 配置示例
{"name": "my-library","version": "1.0.0","peerDependencies": {"react": "^17.0.0"}
}

在這個示例中,my-library 需要 react 的版本是 17.0.0 及其以上的版本。用戶在安裝 my-library 時,必須確保他們的項目中已經安裝了 react,否則會收到警告。

resolutions

resolutions 是 Yarn 特有的功能,用于強制所有依賴樹中的某個特定依賴包版本。它主要用于解決依賴沖突或指定項目中使用的某個特定版本的依賴。

  • 用途
  1. 強制使用特定版本:當有多個依賴包依賴于不同版本的同一個庫時,可以使用 resolutions 強制它們使用相同的版本。
  2. 解決依賴沖突:通過指定依賴包的版本,來解決包之間的版本沖突問題。
  3. 臨時解決方案:在等待上游包修復版本問題時,可以通過 resolutions 暫時解決問題。
  • 行為
    resolutions 會覆蓋項目中所有符合條件的依賴包版本,使其強制使用指定的版本。

  • 配置示例

{"dependencies": {"react": "^17.0.0","some-package": "^1.0.0"},"resolutions": {"react": "17.0.0"}
}

在這個示例中,無論 some-package 依賴哪個版本的 react,最終都會使用 17.0.0 版本。

總結

  • peerDependencies 是為了確保庫與項目中已經安裝的特定版本的依賴兼容;resolutions 是為了強制項目中使用特定版本的依賴,解決版本沖突。
  • peerDependencies 不會自動安裝依賴,只是給出警告;resolutions 會覆蓋項目中的依賴版本,強制使用指定的版本。
  • peerDependencies 適用于庫開發者,確保庫與用戶項目中的依賴版本兼容;resolutions 適用于項目維護者,解決依賴版本沖突或強制使用特定版本的依賴。
  • 有時,項目中可能需要同時使用 peerDependencies 和 resolutions 來管理依賴。例如,在一個插件庫中使用 peerDependencies 指定兼容的主庫版本,在項目中使用 resolutions 強制解決版本沖突。

?堅持原創,求關注😄,點贊👍,收藏??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24018.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24018.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

git【工具軟件】分布式版本控制工具軟件

一、Git 的介紹 git軟件的作用:管理軟件開發項目中的源代碼文件。 常用功能: 倉庫管理、文件管理、分支管理、標簽管理、遠程操作 功能指令: add,commit,log,branch,tag,remote…

Ubuntu Linux LTS 24.04 AMD64 桌面版安裝記錄

下載iso aria2c -x 4 -s 12 "https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/24.04/ubuntu-24.04-desktop-amd64.iso" "https://mirrors.163.com/ubuntu-releases/24.04/ubuntu-24.04-desktop-amd64.iso" "https://mirrors.zju.edu.cn/ubuntu…

[pyradiomics][python]pyradiomics所有whl文件下載地址匯總

源碼地址:https://github.com/AIM-Harvard/pyradiomics pyradiomics是一個開源的Python軟件包,專門用于從醫學影像中提取高通量的定量特征,這些特征被稱為影像組學(Radiomics)特征。以下是關于pyradiomics的詳細介紹: 一、基本概…

華為端云一體化開發 (起步1.0)(HarmonyOS學習第七課)

官方文獻: 為豐富HarmonyOS對云端開發的支持、實現端云聯動,DevEco Studio推出了云開發功能,開發者在創建工程時選擇云開發模板,即可在DevEco Studio內同時完成HarmonyOS應用/元服務的端側與云側開發,體驗端云一體化協…

大數據面試題第二期*6

題1、Namenode掛了怎么辦? 方法一:將SecondaryNameNode中數據拷貝到namenode存儲數據的目錄。 方法二:使用importCheckpoint選項啟動namenode守護進程,從而將SecondaryNameNode中數據拷貝到namenode目錄中。 題2、Hadoop 的namenode 宕機怎么…

論文代碼解讀STPGNN

1.前言 本次代碼文章來自于《2024-AAAI-Spatio-Temporal Pivotal Graph Neural Networks for Traffic Flow Forecasting》,基本模型結構如下圖所示: 文章講解視頻鏈接 代碼開源鏈接 接下來就開始代碼解讀了。 2.代碼解讀 class nconv(nn.Module):de…

NDIS Filter開發-網絡數據的傳輸

和NIC小端口驅動不同的是,無需考慮網絡數據具體是如何傳輸的,只需要針對NBL進行處理即可。Filter驅動程序可以啟動發送請求和接收指示,或“過濾”其他驅動程序的請求和指示。Filter模塊堆疊在微型端口適配器上。 驅動程序堆棧中的Filter模塊…

谷粒商城實戰(033 業務-秒殺功能4-高并發問題解決方案sentinel 1)

Java項目《谷粒商城》架構師級Java項目實戰,對標阿里P6-P7,全網最強 總時長 104:45:00 共408P 此文章包含第326p-第p331的內容 關注的問題 sentinel(哨兵) sentinel來實現熔斷、降級、限流等操作 騰訊開源的tendis&#xff0c…

ctfshow web

【nl】難了 <?php show_source(__FILE__); error_reporting(0); if(strlen($_GET[1])<4){echo shell_exec($_GET[1]); } else{echo "hack!!!"; } ?> //by Firebasky //by Firebasky ?1>nl //先寫個文件 ?1*>b //這樣子會把所有文件名寫在b里…

JSON 無法序列化

JSON 無法序列化通常出現在嘗試將某些類型的數據轉換為 JSON 字符串時&#xff0c;這些數據類型可能包含不可序列化的內容。 JSON 序列化器通常無法處理特定類型的數據&#xff0c;例如日期時間對象、自定義類實例等。在將數據轉換為 JSON 字符串之前&#xff0c;確保所有數據都…

clickhouse學習筆記(三)常見表引擎

目錄 一、 MergeTree系列引擎 1、MergeTree 數據TTL &#xff08;1&#xff09; 列級別 TTL &#xff08;2&#xff09; 表級別 TTL 存儲策略 2、ReplacingMergeTree 3、CollapsingMergeTree 4、VersionedCollapsingMergeTree 5、SummingMergeTree 6、AggregatingMe…

「動態規劃」如何求地下城游戲中,最低初始健康點數是多少?

174. 地下城游戲https://leetcode.cn/problems/dungeon-game/description/ 惡魔們抓住了公主并將她關在了地下城dungeon的右下角。地下城是由m x n個房間組成的二維網格。我們英勇的騎士最初被安置在左上角的房間里&#xff0c;他必須穿過地下城并通過對抗惡魔來拯救公主。騎士…

【Text2SQL 論文】C3:使用 ChatGPT 實現 zero-shot Text2SQL

論文&#xff1a;C3: Zero-shot Text-to-SQL with ChatGPT ???? arXiv:2307.07306&#xff0c;浙大 Code&#xff1a;C3SQL | GitHub 一、論文速讀 使用 ChatGPT 來解決 Text2SQL 任務時&#xff0c;few-shots ICL 的 setting 需要輸入大量的 tokens&#xff0c;這有點昂貴…

基于GLM生成SQL,基于MOSS生成SQL,其中什么是GLM 什么是MOSS

GLM 和 MOSS 是兩種不同的模型或系統&#xff0c;通常用在自然語言處理 (NLP) 和生成任務中&#xff0c;如生成 SQL 查詢。讓我們逐個解釋它們的含義和用途&#xff1a; GLM (Generalized Language Model) GLM 是一種通用語言模型&#xff0c;設計用于處理和生成自然語言。以…

MacOS M系列芯片一鍵配置多個不同版本的JDK

第一步&#xff1a;下載JDK。 官網下載地址&#xff1a;Java Archive | Oracle 選擇自己想要下載的版本&#xff0c;一般來說下載一個jdk8和一個jdk11就夠用了。 M系列芯片選擇這兩個&#xff0c;第一個是壓縮包&#xff0c;第二個是dmg可以安裝的。 第二步&#xff1a;編輯…

eclipse插件開發(二)RCP第三方庫的引入方式

RCP第三方庫的引入 最近在RCP開發過程中遇到JSON串與對象互轉的問題&#xff0c;如何像spring開發模式一樣引入第三方庫呢&#xff1f;eclipse插件開發中用到p2庫&#xff0c;但也支持maven庫的引入。關鍵在于.target這個關鍵文件。 .target 文件用于定義一個目標平臺&#x…

民主測評要做些什么?

民主測評&#xff0c;作為一種重要的民主管理工具&#xff0c;旨在通過廣泛征求群眾意見&#xff0c;對特定對象或事項進行客觀、公正的評價。它不僅是推動民主參與、民主監督的重要手段&#xff0c;也是提升治理效能、促進社會和諧的有效途徑。以下將詳細介紹民主測評的主要過…

常見的布局方法及優缺點

頁面布局常用的方法有浮動、定位、flex、grid網格布局、柵格系統布局 浮動&#xff1a; 優點&#xff1a;兼容性好。 缺點&#xff1a;浮動會脫離標準文檔流&#xff0c;因此要清除浮動。我們解決好這個問題即可。 絕對定位 優點&#xff1a;快捷。 缺點&#xff1a;導致子…

如何以非交互方式將參數傳遞給交互式腳本

文章目錄 問題回答1. 使用 Here Document2. 使用 echo 管道傳遞3. 使用文件描述符4. 使用 expect 工具 參考 問題 我有一個 Bash 腳本&#xff0c;它使用 read 命令以交互方式讀取命令參數&#xff0c;例如 yes/no 選項。是否有一種方法可以在非交互式腳本中調用這個腳本&…

vue用vite配置代理解決跨域問題(target、rewrite和changeOrigin的使用場景)

Vite的target、rewrite和changeOrigin的使用場景 1. target 使用場景&#xff1a;target 屬性在 Vite 的 vite.config.ts 或 vite.config.js 文件的 server.proxy 配置中指定&#xff0c;用于設置代理服務器應該將請求轉發到的目標地址。這通常是一個后端服務的API接口地址。…