dependencies
dependencies 表示该项目在运行时所需要用到的依赖项。
如果你开发的项目依赖于某个包来运行,那么你就可以选择将你所依赖的包添加到
dependencies中。install时该依赖将会被下载,并可在项目的代码中使用当你开发一个项目需要用到一个
A包时,假设A包的dependencies中存在如下定义{"dependencies": {"B": "*"}}
devDependencies
devDependencies 表示在开发时所需要用到的或依赖的包。
如果你的项目在开发中依赖某个包,但是在运行时不依赖,则可以将该包添加到
devDependencies。install时该依赖将会被下载,可以在代码中使用,不要在项目要上线的代码中使用。install时依赖包中的devDependencies将会被忽略,不会被安装。
peerDependencies
peerDependencies 主要用于依赖包中,表示安装该包时还需要安装哪些包,乍一看非常类似 dependencies,不过场景和行为都存在一定差异。
peerDependencies主要用于依赖包中,在项目中不起作用。install时peerDependencies不会被安装,开发时一般会配合devDependencies来实现开发和发包时的版本解耦。install时peerDependencies不会安装,但是包管理器会检查项目的依赖与peerDependencies是否匹配,如果版本不匹配或未安装,将会弹出警告。
optionalDependencies
optionalDependencies 用于定义可选依赖项,和 dependencies 非常类似,主要的差别在于:在 optionalDependencies 中的依赖包安装报错甚至找不到时不会影响到包管理器的安装行为。
install时会被安装,但是安装失败时不会中断安装行为,程序依旧可以正常运行。项目中使用时应该通过判定该包是否存在来决定所需要执行的代码。install时会被安装,但是安装失败时不会中断安装行为,程序依旧可以正常运行。
bundleDependencies/bundledDependencies
bundleDependencies 是一个较为特殊的依赖项定义,不同于其它依赖项定义,他的数据结构是一个数组,需要配合 dependencies 使用。
bundleDependencies在项目中不起作用,在项目作为包发布时通过npm pack,将会把bundleDependencies中的依赖包的本地代码和该项目包一起打包成一个文件。install时通过url指定pack打包好的文件,将会将文件中打包的依赖解压到包目录,而不会去根据dependencies中的定义去安装bundleDependencies中的包。