npm依赖管理peerDependencies

前端精髓

共 1273字,需浏览 3分钟

 ·

2021-08-12 18:17


npm中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的依赖就可以直接引用,为什么在项目中不用声明就可以直接使用呢?这就不得不说说peerDependencies的作用了。


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


{    "peerDependencies": {        "PackageB": "1.0.0"    }}


那么,它会告诉npm:如果某个package把我列为依赖的话,那么那个package也必需应该有对PackageB的依赖。


也就是说,如果你 npm install PackageA,你将会得到下面的如下的目录结构:


MyProject|- node_modules   |- PackageA   |- PackageB


总结一句话,peerDependencies的具体作用:


peerDependencies的目的是提示宿主环境去安装满足插件peerDependencies所指定依赖的包,然后在插件import或者require所依赖的包的时候,永远都是引用宿主环境统一安装的npm包,最终解决插件与所依赖包不一致的问题。


浏览 32
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报