dependencies、devDependencies和peerDependencies区别

1,517 阅读2分钟

dependencies、devDependencies区别

他们之间的区别我看了很多篇文章,却也真是没看懂,于是自己写了一个npm包,才发现其中原理。

首先:

说起他们之间的区别,要区分项目和npm包两种方向。

项目

我们在执行npm install的时候,会同时安装devDependencies和dependencies中的依赖到node_modules。

这个时候,把依赖放在devDependencies或者dependencies中,本质上没啥区别。

npm包

如果我们的项目会被当作npm包的方式引入别人的项目,这个时候,就需要注意了。

我们需要把只有在本地开发才会用到的包(webpack、eslint、babel等)放在devDependencies中,把程序运行时会用到的包(antd react等)放在dependencies中。

为什么?

因为在项目中安装npm包的时候,会安装dependencies中的所有依赖,而不会安装devDependencies中的依赖。

目的当然是为了能让打包后的程序正常运行、又不占用项目体积喽。

注意:

npm包安装时,npm7.x以上的情况下:
如果npm包所需包版本和主应用包版本不冲突的情况下,会使用主应用的包,而不是自己在node_modules中再安装一次。

如若冲突,则会在npm包自己内部的node_modules中再安装一次。

现总结如下:

npm包:安装npm包的时候。只会安装dependencies中的依赖,不会安装devDependencies中的依赖。

项目:npm install项目的时候,会同时安装devDependencies和dependencies中的依赖。

peerDependencies

我们上面说了dependencies、devDependencies的区别,那peerDependencies又是什么呢?

我们一般只在npm包中使用peerDependencies这个关键词。

这里我们只探讨peerDependencies和dependencies的区别:

有人说,peerDependencies默认不会安装,找不到包会警告提示。dependencies会默认安装。

是npm7.x以后,peerDependencies也会在找不到包的情况下默认安装了!!!

所以,总结了以下两点不同:

1.peerDependencies和dependencies使用场景不同。

peerDependencies用在描述与同伴的依赖性,即保证npm包和宿主程序都使用同一种包的情况下,保证不会产生冲突。

所以我们经常看到这种写法,可以最大限度的保证插件和宿主共用一套环境了

{ 
    "peerDependencies": 
        { 
            "react": ">=16.12.0", 
            "react-dom": ">=16.12.0" 
        }
}


dependencies用来描述除环境之外的生产环境需要用到的其他包。

2.peerDependencies中的包可以与external结合,以此来保证最终打包到dist的文件不包含peerDependencies中的包含的包。


来减少打包体积。