*
Webpack 插件, 当您的捆绑包含多个版本的同一软件包时警告 .

此软件包是经过修改的叉 达伦斯塞里是因为 重复包装-检查器-网络包装-插件。 。 。 .
为什么?
由于软件包版本不同,一个单一的软件包可能会被多次纳入Webpack捆绑. 这种情况可能会在没有任何警告的情况下发生,导致你的捆绑中出现多出血并可能导致难以找到的虫子.
此插件将提醒您注意此大小, 以最小化捆绑大小并避免意外重复包造成的错误 .
动机 : https://github.com/webpack/webpack/issues/385 互联网档案馆的存檔,存档日期2014-12-05 财务报告和审定财务报表 页:1。 。 。 .
安装
npm install @cerner/duplicate-package-checker-webpack-plugin --save-dev
配置
将插件添加到您的网络包配置 :
var DuplicatePackageCheckerPlugin = require("@cerner/duplicate-package-checker-webpack-plugin");
module.exports = {
plugins: [new DuplicatePackageCheckerPlugin()]
};
您也可以通过一个带有可配置选项的对象:
new DuplicatePackageCheckerPlugin({
// Also show module that is requiring each duplicate package (default: false)
verbose: true,
// Emit errors instead of warnings (default: false)
emitError: true,
// Show help message if duplicate packages are found (default: true)
showHelp: false,
// Warn also if major versions differ (default: true)
strict: false,
/**
* Exclude instances of packages from the results.
* If all instances of a package are excluded, or all instances except one,
* then the package is no longer considered duplicated and won't be emitted as a warning/error.
* @param {Object} instance
* @param {string} instance.name The name of the package
* @param {string} instance.version The version of the package
* @param {string} instance.path Absolute path to the package
* @param {?string} instance.issuer Absolute path to the module that requested the package
* @returns {boolean} true to exclude the instance, false otherwise
*/
exclude: instance => instance.name === "fbjs",
// Emit errors (regardless of emitError value) when the specified packages are duplicated (default: [])
alwaysEmitErrorsFor: ['react', 'react-router'],
});
严格模式
严格模式警告多个不同软件包 主要 版本(例如: v1.0.0 对 v2.0.0)存在于捆绑中.
具有不同主要版本的软件包引入了后向不相容的更改,或者需要干预第三方软件包,或者需要不安全的工作变通(例如用单一版本解决不同软件包主要版本的依赖性).
建议保持严格的模式,因为这可以提高你的可见度,并有助于解决和确定潜在的问题.
节点版本支持
这个软件包是使用节点10到节点14开发并测试的. 使用"节点16"或"节点16"以上的消费者建议自己冒险使用"节点",因为这些版本由于缺乏彻底测试而没有得到官方支持.
解析捆绑中的重复包
你可以用多种方法来解决捆绑中的重复包, 正确的解决方案主要取决于你正在使用的工具以及每个特定的情况.
网络软件包 resolve.alias
添加条目 resolve.alias 它将配置Webpack,将任何软件包引用到一个指定的路径.
例如,如果 Lodash 在您的捆绑中被复制, 那么下面的配置将使得所有 Lodash 的导入都总是引用 Lodash 实例 ./node_modules/lodash。 。 。 .
alias: {
lodash: path.resolve(__dirname, 'node_modules/lodash'),
}
注意:不同主要版本的异地包可能会打破你的应用. 只有当您确定所有需要的版本都兼容时才能使用, 至少是在您的应用程序上下文中
雅伦 install --flat
Yarn 允许 固定设施 (单位:千美元)yarn install --flat),只允许安装每个软件包的一个版本.
亚伦决议
如果你想对你的依赖性版本进行更多的控制 不想使用 yarn install --flat线条支持 "选择性版本分辨率" 它允许您强制执行每个依赖的特定版本.
软件包.json
{
"dependencies": {
"lodash": "4.17.0",
"old-package-with-old-lodash": "*"
},
"resolutions": {
"old-package-with-old-lodash/lodash": "4.17.0"
}
}
国家预防机制 Dedupe
如果你使用国家防范机制而不是Yarn, 你可以尝试运行 npm dedupe. 国家预防机制 可能 即使一个版本满足了每个版本,仍保留同一软件包的多个版本 铸造 包括所有家属.
弹出你的依赖关系
如果您的项目正在使用一个旧版本的软件包,而一个依赖正在使用该软件包的更新版本,请考虑更新您的项目,以使用更新版本.
文件问题!
如果您的项目有依赖性并且正在使用过时版本的软件包,则提交一个问题,并通知作者更新依赖性. 让我们帮助我们的项目绿色 和我们的应用安全, 表演和无臭虫!