欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

npm?install報錯unable?to?resolve?dependency?tree的解決辦法

 更新時間:2023年05月29日 14:25:54   作者:HUAI-  
在開發(fā)過程中經(jīng)常會使用npm安裝依賴包來加速開發(fā),但是在執(zhí)行npm install命令時,有時會遇到各種錯誤,下面這篇文章主要給大家介紹了關(guān)于npm?install報錯unable?to?resolve?dependency?tree的解決辦法,需要的朋友可以參考下

一、問題背景

npm install安裝項目依賴時報錯

PS D:\test> npm install
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving: vue-admin-template@4.2.1
npm ERR! Found: webpack@5.74.0
npm ERR! node_modules/webpack
npm ERR!   dev webpack@"^5.11.0" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer webpack@"^3.1.0" from extract-text-webpack-plugin@3.0.2
npm ERR! node_modules/extract-text-webpack-plugin
npm ERR!   extract-text-webpack-plugin@"^3.0.2" from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR!
npm ERR! See D:\Program\nodejs\node_cache\eresolve-report.txt for a full report.
npm ERR! A complete log of this run can be found in:
npm ERR!     D:\Program\nodejs\node_cache\_logs\2022-08-23T01_38_42_815Z-debug.log
PS D:\test> npm install --legacy-peer-deps

解決:npm install --legacy-peer-deps

其實提示上有:npm ERR! Fix the upstream dependency conflict, or retry npm ERR! this command with --force, or --legacy-peer-deps

二、什么是peerDependency?

  在日常使用命令npm install / npm install XX下載依賴的操作中,如果你使用的是 npm v7 以上的版本,那么應(yīng)該經(jīng)常會遇到無法解析依賴樹的問題(依賴沖突),就如我在上面遇到的那樣報錯

  但是每當(dāng)遇到這種情況的時候,我用命令npm install --legacy-peer-deps就可以順利進(jìn)行下載操作。

1、這是為什么呢?帶著好奇心,我去研究學(xué)習(xí)了一番npm install xxxx --legacy-peer-deps命令是什么?為什么可以解決下載時候產(chǎn)生的依賴沖突呢?

  我們?nèi)粘T谇岸隧椖块_發(fā)過程中,見到最多的一定是package.json文件里的devDependencies(用于在開發(fā)環(huán)境下依賴的模塊)和dependencies(無論開發(fā)環(huán)境還是生產(chǎn)環(huán)境都需要的依賴模塊)這兩個字段

  那么命令--legacy-peer-dep里的peerDependency是什么依賴呢?根據(jù)geeksforgeeks網(wǎng)站里的定義:

Peer Dependencies: In package.json file, there is an object called as peerDependencies and it consists of all the packages that are exactly required in the project or to the person who is downloading and the version numbers should also be the same. That is the reason they were named as peerDependencies. The best example is ‘react’ which is common in every project to run similarly.

  翻譯一下就是說,在package.json文件中,存在一個叫做peerDependencies(對等依賴關(guān)系)的對象,它包含了項目里需要的所有的包或者用戶正在下載的版本號相同的所有的包(很繞,但意思就是對等依賴關(guān)系指定我們的包與某個特定版本的npm包兼容);對等依賴關(guān)系最好的例子就是React,一個聲明式的創(chuàng)建用戶界面的JS庫。

2、那么我們?yōu)槭裁葱枰獙Φ纫蕾囮P(guān)系呢?

  假設(shè)我們現(xiàn)在有一個Hello工程,已經(jīng)在其根目錄下的package.json文件中的dependencies字段里聲明了packageA作為依賴,而其下面有兩個項目app_A和app_B,它們也依賴packageA。如果我們用dependencies而不是peerDepenedencies來聲明,那么npm install安裝完項目之后的依賴結(jié)構(gòu)如下圖所示:

 從上圖可以看出,packageA依賴包被安裝了3次,造成了2次安裝冗余。

  而如果采用peerDepenedency來下載,就可以避免這個核心依賴庫被重復(fù)下載的問題。還是上面那個場景,我們在項目app_A和app_B的package.json文件里的peerDependencies字段聲明一下核心依賴庫packageA,然后在根目錄的package.json文件里的dependencies字段也聲明一下packageA。

接著再執(zhí)行npm install,生成的依賴結(jié)構(gòu)就會如下圖所示:

如上圖所示,packageA就只會被安裝一次??梢钥吹竭@時候生成的依賴圖是扁平的,packageA 也只會被安裝一次。

  因此我們總結(jié)下在插件使用dependencies聲明依賴庫的特點:

  • 如果用戶顯式依賴了核心庫,則可以忽略各插件的peerDependencies聲明;
  • 如果用戶沒有顯式依賴核心庫,則按照插件peerDependencies中聲明的版本將庫安裝到項目根目錄中;
  • 當(dāng)用戶依賴的版本、各插件依賴的版本之間不相互兼容,會報錯讓用戶自行修復(fù)。

  npm 從版本v7開始,install就默認(rèn)以peerDependencies的方式去下載了:

1.如果用戶在根目錄的package.json文件里顯式依賴了核心庫,那么各個子項目里的peerDepenedencies聲明就可以忽略

2.如果用戶沒有顯式依賴核心庫,那么就按照子項目的peerDepenedencies中聲明的版本將依賴安裝到項目根目錄里

  而方式2就會導(dǎo)致一個問題:用戶依賴的包版本與各個子項目依賴的包版本相互不兼容,那么就會報錯(無法解析依賴樹的問題(依賴沖突))讓用戶自行去修復(fù),因而導(dǎo)致安裝過程的中斷。(因為是從npm v7引入的,因此npm v3-v6就不會發(fā)生這個錯誤)

3、npm install xxxx --legacy-peer-deps命令是什么?為什么可以解決下載時候產(chǎn)生的依賴沖突呢?

  npm install xxxx --legacy-peer-deps命令與其說是告訴npm要去干什么,不如說是告訴npm不要去干什么。

  legacy的意思:遺產(chǎn)/(軟件或硬件)已過時但因使用范圍廣而難以替代的;而npm install xxxx --legacy-peer-deps命令用于繞過peerDependency里依賴的自動安裝;它告訴npm忽略項目中引入的各個依賴模塊之間依賴相同但版本不同的問題,以npm v3-v6的方式去繼續(xù)執(zhí)行安裝操作

  所以其實該命令并沒有真的解決沖突,而是忽略了沖突,以“過時”(v3-v6)的方式進(jìn)行下載操作

4、--legacy-peer-deps命令作用

  在NPM v7中,現(xiàn)在默認(rèn)安裝peerDependencies。在很多情況下,這會導(dǎo)致版本沖突,從而中斷安裝過程

  --legacy-peer-deps標(biāo)志是在v7中引入的,目的是繞過peerDependency自動安裝;它告訴 NPM 忽略項目中引入的各個modules之間的相同modules但不同版本的問題并繼續(xù)安裝,保證各個引入的依賴之間對自身所使用的不同版本modules共存

總結(jié)

到此這篇關(guān)于npm install報錯unable to resolve dependency tree解決的文章就介紹到這了,更多相關(guān)報錯unable to resolve dependency tree內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Node.js構(gòu)建微服務(wù)的方法

    使用Node.js構(gòu)建微服務(wù)的方法

    這篇文章主要介紹了使用Node.js構(gòu)建微服務(wù),將介紹微服務(wù)架構(gòu)、優(yōu)勢以及如何使用Node.js開發(fā)微服務(wù),需要的朋友可以參考下
    2022-08-08
  • Node.JS用純JavaScript生成圖片或滑塊式驗證碼功能

    Node.JS用純JavaScript生成圖片或滑塊式驗證碼功能

    有一些Node.JS圖片生成類庫,比如node-captcha等的類庫,需要c/c++程序生成圖片??缙脚_部署不是很方便。這里介紹幾個用純JS實現(xiàn)的圖片驗證碼生成模塊,需要的朋友可以參考下
    2019-09-09
  • NodeJS服務(wù)器實現(xiàn)gzip壓縮的示例代碼

    NodeJS服務(wù)器實現(xiàn)gzip壓縮的示例代碼

    這篇文章主要介紹了NodeJS服務(wù)器實現(xiàn)gzip壓縮的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • npm更新命令更新最新版本的實現(xiàn)方式

    npm更新命令更新最新版本的實現(xiàn)方式

    這篇文章主要介紹了npm更新命令更新最新版本的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Node.js Express 框架 POST方法詳解

    Node.js Express 框架 POST方法詳解

    這篇文章主要介紹了Node.js Express 框架 POST方法詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • node.js中的querystring.escape方法使用說明

    node.js中的querystring.escape方法使用說明

    這篇文章主要介紹了node.js中的querystring.escape方法使用說明,本文介紹了querystring.escape的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 詳解nodejs express下使用redis管理session

    詳解nodejs express下使用redis管理session

    本篇文章主要介紹了詳解nodejs express下使用redis管理session ,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • 詳解如何在NodeJS應(yīng)用程序中處理多個API請求

    詳解如何在NodeJS應(yīng)用程序中處理多個API請求

    NodeJS默認(rèn)是異步的,這意味著它已經(jīng)能夠同時處理多個請求,但它只適用于I/O操作,如HTTP請求、文件系統(tǒng)操作、數(shù)據(jù)庫查詢、實時聊天應(yīng)用等,在處理CPU密集型任務(wù)時,可能需要很長時間,這就是為什么NodeJS提供了一些我們將在下面介紹的特定包
    2023-12-12
  • 運行Node.js的IIS擴展iisnode安裝配置筆記

    運行Node.js的IIS擴展iisnode安裝配置筆記

    這篇文章主要介紹了運行Node.js的IIS擴展iisnode安裝配置筆記,iisnode的擴展可以把Node.js程序托管到IIS,托管之后也意味著可以使用IIS里面的各種功能,需要的朋友可以參考下
    2015-03-03
  • node內(nèi)存泄漏排查與修復(fù)過程

    node內(nèi)存泄漏排查與修復(fù)過程

    之前開發(fā)了一個node接口,該接口使用canvas繪制產(chǎn)品圖提供給java端使用,在運行了一段時間后發(fā)現(xiàn)了內(nèi)存泄漏問題,本文淺記下修復(fù)過程,文章通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06

最新評論