哈Ha!
该webpack有许多有用的插件,许多插件都不知道并且在其项目中不使用。 在削减下,我收集了其中的5个,它们可以大大简化您的生活!

1.未使用的文件webpack插件
在大型前端项目中,总是有很多模块很容易丢失。 如果您不检查项目中是否有未使用的模块,则迟早它会累积任何地方未使用的垃圾文件。
要了解项目中未使用的文件,请将unused-files-webpack-plugin添加到您的配置中:
npm i unused-files-webpack-plugin
const { UnusedFilesWebpackPlugin } = require('unused-files-webpack-plugin'); module.exports = { plugins: [ new UnusedFilesWebpackPlugin(), ], };
安装后,您将收到有关任何未使用文件的警告:
src/ ├── index.js └── someFile.js ( )
WARNING in UnusedFilesWebpackPlugin found some unused files: src/someFile.js
参考文献:
→
Github→
NPM2.区分大小写的路径webpack插件
在OSX上进行开发期间,导入模块时,通常可能会混淆路径中的小写字母和大写字母。 该程序集将在罂粟上进行组装,但在其他区分大小写的系统上,它将掉落。
如果要解决此问题,则需要放入区分大小写的路径-webpack-plugin:
npm i case-sensitive-paths-webpack-plugin
const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); module.exports = { plugins: [ new CaseSensitivePathsPlugin(), ], };
现在,如果使用错误的大小写导入模块,则始终会出现错误:
import someFile from './SOMEFILE';
export default () => { console.log('Hello!'); };
ERROR in index.js Module not found: Error: [CaseSensitivePathsPlugin] `SOMEFILE.js` does not match the corresponding path on disk `someFile.js`.
也可以使用
import / no-unresolved eslint插件解决此问题。
在打字稿中,有一个类似的工作选项-forceConsistentCasingInFileNames。 但是她的行为略有不同:她检查从不同位置导入模块的情况是否相同,以防检查寄存器的正确性。
参考文献:
→
Github→
NPM3.检查包
在您的项目中,可能会出现以下情况:您和您的程序包使用同一库的不同版本。 然后,软件包的几个捆绑包将出现在捆绑包中,可以通过指定相同的版本来轻松修复。
Inspectpack将帮助您立即找到这种情况:
npm i inspectpack
const { DuplicatesPlugin } = require('inspectpack/plugin'); module.exports = { plugins: [ new DuplicatesPlugin(), ], };
如果安装了插件,则在出现软件包副本时将弹出警告:
{ "name": "my-app", "dependencies": { "lodash": "4.1.0", "one": "1.2.3" } }
{ "name": "one", "dependencies": { "lodash": "3.0.0" } }
import _ from 'lodash'; import 'one';
WARNING in Duplicate Sources / Packages - Duplicates found! ️ * Duplicates: Found 2 similar files across 2 code sources (both identical + similar) accounting for 703 bundled bytes. * Packages: Found 1 packages with 2 resolved, 2 installed, and 2 depended versions.
现实世界的例子在我所有的项目中,我都使用
哨兵来跟踪错误 。 它的
javascript SDK分为几个软件包,每个软件包都依赖于tslib@^1.9.3。
在其中一个项目中,tslib @ 1.9.0在依赖项中声明为错误,因为每个软件包在本地都安装了一个版本的tslib。 哨兵数据包如下所示:
勃艮第的tslib副本突出显示 Parsed size: 121.03 KB Gzipped size: 27.16 KB
多亏了inspectpack,发现了问题:我从package.json中的依赖项中删除了tslib@1.9.0,在顶层安装了tslib@^1.9.3对哨兵的依赖性,并且数据包的重量开始减少了26 KB:

Parsed size: 94.5 KB Gzipped size: 26.5 KB
复制包检查器Webpack插件提供了类似的功能。 但是它有一个问题-它
没有显示该库一个版本的多次出现,即 在剧透下的示例中存在问题,那里有tslib的多个相同版本,他找不到。
参考文献:
→
Github→
NPM4.循环依赖插件
在开发过程中,有时存在解决依赖关系的问题-两个模块相互导入并获得循环依赖关系。 这可以通过一系列其他模块隐式地发生。 在极少数情况下,循环依赖关系是正常的,但是很可能这表明项目体系结构中存在问题。
要立即查看循环依赖关系并将其删除,请添加循环依赖插件:
npm i circular-dependency-plugin
const CircularDependencyPlugin = require('circular-dependency-plugin'); module.exports = { plugins: [ new CircularDependencyPlugin(), ], };
现在,当出现循环依赖项时,您将收到警告:
import second from './second'
import first from './first'
WARNING in Circular dependency detected: first.js -> second.js -> first.js WARNING in Circular dependency detected: second.js -> first.js -> second.js
eslint的
导入/不循环规则和
tslint的tslint-no-circular-imports解决了类似的问题。 但是,后者不能忽略仅用于键入的类型,接口和类的导入-您通常必须编写tslint:disable。
参考文献:
→
Github→
NPM5.速度测量webpack插件
在包含数百个文件的大型项目中,组装可能需要花费几分钟。
Speed-measure-webpack-plugin将帮助测量每个构建步骤并发现问题:
npm i speed-measure-webpack-plugin
const SpeedMeasurePlugin = require("speed-measure-webpack-plugin"); const smp = new SpeedMeasurePlugin(); module.exports = smp.wrap({ });
构建输出将添加有关总构建时间,每个插件和每个加载程序链的执行时间的信息:
SMP General output time took 48.97 secs SMP - Plugins TerserPlugin took 19.6 secs OptimizeCssAssetsWebpackPlugin took 2.65 secs MiniCssExtractPlugin took 0.261 secs VueLoaderPlugin took 0.216 secs /* ... */ SMP - Loaders mini-css-extract-plugin, and css-loader, and postcss-loader took 21.81 secs module count = 33 cache-loader, and babel-loader, and ts-loader, and tslint-loader took 21.63 secs module count = 240 /* ... */
他帮助我找到了TerserPlugin缩小速度的问题:我删除了几项设置,这些设置几乎对最终文件的大小没有影响,并加快了几秒钟。
参考文献:
→
Github→
NPM