devDependencies dependencies 区别

222 阅读2分钟

之前对于这两者的区别一直理解的是 devDependencies是开发时依赖,dependencies是生产时依赖,今天理了一下,作为记录。

首先【devDependencies是开发时依赖,dependencies是生产时依赖】这种说话不太准确,对前端应用来说,其实从webpack打包过程来看,项目入口、依赖分析、loader解析...webpack在打包的时候并不会关心依赖是开发依赖还是生产依赖。

但如果是发布npm包的话,就要区分了。举个场景:比如要基于element-plus二次封装一个组件库,如果别人要用我们这个组件库,一定会安装vue和element-plus,那我们就不用把vue和element-plus等等作为npm包的依赖,否则组件库包一个依赖,本地项目又一个依赖,而是放到peer dependency中,意思就是 应用本地项目中的依赖。同时,在打包组件库项目时,我们需要把那些放在peer dependency中的依赖包给排除,以减小打包体积。

有关npm包的依赖,几种情况再对比一下: devpendencies中的包,指的是这个npm包本身在开发的时候的依赖; dependencies中的包,指的是npm包运行时所需要的依赖,会在用这个npm包本身的时候安装到它下边的node_modules(说的有点绕,看图)

npm包本身的依赖

image.png

用这个npm包时,pnpm i的时候会在这个包下面安装生产依赖。

image.png

注:peer dependency和本地的依赖可能版本不一致,安装的时候会有提醒的。

另外一种情况,node应用。因为node应用本身运行的时候就是运行时。或者可以这么理解。前端项目仅仅需要静态文件就可以运行,但是nodeJs应用在运行时还需要npm依赖来提供功能。 这里先留个坑,后续加上demo.