Npm 使用“peerDependence”和“devDependence”的最佳做法`

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

我正在编写一个react组件库,不想捆绑react,所以我将LIB添加到peerDependencies而不是dependencies

此外,为了防止那些关于缺少对等依赖项的愚蠢警告,我在devdependency部分添加了相同的lib

这不是干的,但是固定的警告对我来说比干的package.json更重要

所以问题是:有没有一种方法可以实现这一点,或者我是否真的遵循了2020年5月的最佳实践


对于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时,我至少会保存重复的版本定义,这比以前更加枯燥: