日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

npm依赖管理java_探讨npm依赖管理之peerDependencies

發布時間:2024/9/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 npm依赖管理java_探讨npm依赖管理之peerDependencies 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

想必前端同學對npm的devDependencies和dependencies都比較熟悉,但是對peerDependencies可能就有點陌生,尤其是沒有寫過npm包插件的同學,比如之前使用grunt自動化工具的相關插件(如grunt-contrib-jasmine等)或者目前基于某個框架的ui組件庫等等,這些都是需要對peerDependencies有一定了解的。下面我們就來說說peerDependencies。

npm2中dependencies與peerDependencies區別

假設我們當前的項目是MyProject,項目中有一些依賴,比方其中有一個依賴包PackageA,該包的package.json文件指定了對PackageB的依賴:

{

"dependencies": {

"PackageB": "1.0.0"

}

}

如果我們在我們的MyProject項目中執行npm install PackageA, 我們會發現我們項目的目錄結構會是如下形式:

MyProject

|- node_modules

|- PackageA

|- node_modules

|- PackageB

那么在我們的項目中,我們能通過下面語句引入"PackageA":

var packageA = require('PackageA')

但是,如果你想在項目中直接引用PackageB:

var packageA = require('PackageA')

var packageB = require('PackageB')

這是不行的,即使PackageB被安裝過;因為Node只會在“MyProject/node_modules”目錄下查找PackageB,它不會在進入PackageA模塊下的node_modules下查找。

所以,為了解決這個問題,在MyProject項目package.json中我們必須直接聲明對PackageB的依賴并安裝。

但是,有時我們不用在當前項目中聲明對PackageB的依賴就可以直接引用,尤其是,PackageA是一個類似于grunt的插件,例如grunt-contrib-jshint。

為什么在項目中不用聲明就可以直接使用呢?這就不得不說說peerDependencies的作用了。

peerDependencies的引入

為了解決這種問題:

如果你安裝我,那么你最好也安裝X,Y和Z.

于是peerDependencies就被引入了。例如上面PackageA的package.json文件如果是下面這樣:

{

"peerDependencies": {

"PackageB": "1.0.0"

}

}

那么,它會告訴npm:如果某個package把我列為依賴的話,那么那個package也必需應該有對PackageB的依賴。

也就是說,如果你npm install PackageA,你將會得到下面的如下的目錄結構:

MyProject

|- node_modules

|- PackageA

|- PackageB

你可能注意到:

在npm2中,即使當前項目MyProject中沒有直接依賴PackageB,該PackageB包依然會安裝到當前項目的node_modules文件夾中。

下面的代碼現在可以正常工作了,因為兩個包在"MyProject/node_modules"中被安裝了:

var packageA = require('PackageA')

var packageB = require('PackageB')

總結一句話,peerDependencies的具體作用:

peerDependencies的目的是提示宿主環境去安裝滿足插件peerDependencies所指定依賴的包,然后在插件import或者require所依賴的包的時候,永遠都是引用宿主環境統一安裝的npm包,最終解決插件與所依賴包不一致的問題。

舉個例子,就拿目前基于react的ui組件庫ant-design@3.x來說,因該ui組件庫只是提供一套react組件庫,它要求宿主環境需要安裝指定的react版本。具體可以看它package.json中的配置:

"peerDependencies": {

"react": ">=16.0.0",

"react-dom": ">=16.0.0"

}

它要求宿主環境安裝react@>=16.0.0和react-dom@>=16.0.0的版本,而在每個antd組件的定義文件頂部:

import * as React from 'react';

import * as ReactDOM from 'react-dom';

組件中引入的react和react-dom包其實都是宿主環境提供的依賴包。

npm2和npm3中peerDependencies的區別

在npm2中,PackageA包中peerDependencies所指定的依賴會隨著npm install PackageA一起被強制安裝,所以不需要在宿主環境的package.json文件中指定對PackageA中peerDependencies內容的依賴。

但是在npm3中,peerDependencies的表現與npm2不同:

npm3中不會再要求peerDependencies所指定的依賴包被強制安裝,相反npm3會在安裝結束后檢查本次安裝是否正確,如果不正確會給用戶打印警告提示。

就拿上面的例子來說,如果我們npm install PackageA安裝PackageA時,你會得到一個警告提示說:

PackageB是一個需要的依賴,但是沒有被安裝。

這時,你需要手動的在MyProject項目的package.json文件指定PackageB的依賴。

另外,在npm3的項目中,可能存在一個問題就是你所依賴的一個package包更新了它peerDependencies的版本,那么你可能也需要在項目的package.json文件中手動更新到正確的版本。否則會出現類似下圖所示的警告信息:

參考

總結

以上是生活随笔為你收集整理的npm依赖管理java_探讨npm依赖管理之peerDependencies的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。