Npm 使用“peerDependence”和“devDependence”的最佳做法`
我正在编写一个react组件库,不想捆绑react,所以我将LIB添加到peerDependencies而不是dependencies 此外,为了防止那些关于缺少对等依赖项的愚蠢警告,我在devdependency部分添加了相同的lib 这不是干的,但是固定的警告对我来说比干的package.json更重要 所以问题是:有没有一种方法可以实现这一点,或者我是否真的遵循了2020年5月的最佳实践Npm 使用“peerDependence”和“devDependence”的最佳做法`,npm,package.json,Npm,Package.json,我正在编写一个react组件库,不想捆绑react,所以我将LIB添加到peerDependencies而不是dependencies 此外,为了防止那些关于缺少对等依赖项的愚蠢警告,我在devdependency部分添加了相同的lib 这不是干的,但是固定的警告对我来说比干的package.json更重要 所以问题是:有没有一种方法可以实现这一点,或者我是否真的遵循了2020年5月的最佳实践 对于npm>=v7,npm宣布自动安装对等依赖软件包 因此,如果DEP已在peerDependenci
对于npm>=v7,npm宣布自动安装对等依赖软件包 因此,如果DEP已在peerDependencies部分中列出,只需从devDependencies中删除它们,如下所示:
{
"peerDependencies": {
"react": "^16.9.0",
"react-dom": "^16.9.0",
"tslib": "^1.11.0",
},
"devDependencies": {
"@types/react": "^16.9.0",
"typescript": "^3.8.0"
},
"dependencies": {
// nothing here
}
}
对于npm<7,请遵循@gcastros的答案
-
另见:
对于npm>=v7,npm宣布自动安装对等依赖软件包 因此,如果DEP已在peerDependencies部分中列出,只需从devDependencies中删除它们,如下所示:
{
"peerDependencies": {
"react": "^16.9.0",
"react-dom": "^16.9.0",
"tslib": "^1.11.0",
},
"devDependencies": {
"@types/react": "^16.9.0",
"typescript": "^3.8.0"
},
"dependencies": {
// nothing here
}
}
对于npm<7,请遵循@gcastros的答案
-
另见:
我不确定您使用什么创建捆绑包,但如果您使用的是Webpack或Rollup,您可以定义捆绑包中不包含的外部内容 在您看来,peerDependencies中的所有内容都将进入依赖项,在webpack或rollup的配置中,您将定义如下所示的外部: { ... 外部:['react','react doe','tslib'], }
我不确定您使用什么来创建捆绑包,但如果您使用Webpack或Rollup,您可以定义不包含在捆绑包中的外部内容 在您看来,peerDependencies中的所有内容都将进入依赖项,在webpack或rollup的配置中,您将定义如下所示的外部: { ... 外部:['react','react doe','tslib'], }
你的意思是,传输捆绑阶段实际上并不关心依赖项是对等的、开发的还是正常的吗?@helt他们关心。如果它是一个对等依赖项,它不会包含在捆绑包中,但正如您在问题中所说的,您还必须将它们包含在开发依赖项中。当包在一个地方更新而不是在另一个地方更新时,这就增加了版本不匹配的可能性。我明白了,使用外部程序更安全。使用externals,我至少会保存重复的版本定义,这比以前更加枯燥:你的意思是,传输捆绑阶段实际上并不关心依赖项是对等的、开发的还是正常的吗?他们关心。如果它是一个对等依赖项,它不会包含在捆绑包中,但正如您在问题中所说的,您还必须将它们包含在开发依赖项中。当包在一个地方更新而不是在另一个地方更新时,这就增加了版本不匹配的可能性。我明白了,使用外部程序更安全。使用externals时,我至少会保存重复的版本定义,这比以前更加枯燥: