使用 `peerDependency` 和 `devDependency` 的最佳实践
Best practices for using `peerDependency`and `devDependency`
我正在编写一个 React 组件库,不想捆绑 React,所以我将库添加到 peerDependencies
而不是 dependencies
。
此外,为了防止那些关于缺少 peerDependencies 的愚蠢警告,我将相同的库添加到 devDependencies
部分。
那不是 DRY,但固定警告对我来说比 DRY package.json 更重要。
所以问题是:是否有 DRYer 方法可以实现这一点,或者我是否真的遵循了 2020 年 5 月的最佳实践?
{
"peerDependencies": {
"react": "^16.9.0",
"react-dom": "^16.9.0",
"tslib": "^1.11.0",
},
"devDependencies": {
"@types/react": "^16.9.0",
"react": "^16.9.0",
"react-dom": "^16.9.0",
"typescript": "^3.8.0"
},
"dependencies": {
// nothing here
}
}
对于 npm >= v7,npm 宣布自动安装 peerDependency
个包。
因此,只需从 devDependencies 中删除 dep,如果它们已经列在 peerDependencies 部分中,如下所示:
{
"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 的回答。
--
另请参阅:
https://github.com/npm/rfcs/blob/latest/accepted/0025-install-peer-deps.md
https://blog.npmjs.org/post/617484925547986944/npm-v7-series-introduction
我不确定您使用什么来创建捆绑包,但如果您使用的是 Webpack 或 Rollup,则可以定义不包含在捆绑包中的外部组件。
在您的照顾下,您在 peerDependencies
中拥有的所有内容都将进入 dependencies
,并且在 webpack 或 rollup 的配置中,您将按如下方式定义外部:
{
...
externals: ['react', 'react-doe', 'tslib'],
}
我正在编写一个 React 组件库,不想捆绑 React,所以我将库添加到 peerDependencies
而不是 dependencies
。
此外,为了防止那些关于缺少 peerDependencies 的愚蠢警告,我将相同的库添加到 devDependencies
部分。
那不是 DRY,但固定警告对我来说比 DRY package.json 更重要。
所以问题是:是否有 DRYer 方法可以实现这一点,或者我是否真的遵循了 2020 年 5 月的最佳实践?
{
"peerDependencies": {
"react": "^16.9.0",
"react-dom": "^16.9.0",
"tslib": "^1.11.0",
},
"devDependencies": {
"@types/react": "^16.9.0",
"react": "^16.9.0",
"react-dom": "^16.9.0",
"typescript": "^3.8.0"
},
"dependencies": {
// nothing here
}
}
对于 npm >= v7,npm 宣布自动安装 peerDependency
个包。
因此,只需从 devDependencies 中删除 dep,如果它们已经列在 peerDependencies 部分中,如下所示:
{
"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 的回答。
--
另请参阅: https://github.com/npm/rfcs/blob/latest/accepted/0025-install-peer-deps.md https://blog.npmjs.org/post/617484925547986944/npm-v7-series-introduction
我不确定您使用什么来创建捆绑包,但如果您使用的是 Webpack 或 Rollup,则可以定义不包含在捆绑包中的外部组件。
在您的照顾下,您在 peerDependencies
中拥有的所有内容都将进入 dependencies
,并且在 webpack 或 rollup 的配置中,您将按如下方式定义外部:
{
...
externals: ['react', 'react-doe', 'tslib'],
}