Halo, Habr!
Webpack memiliki banyak plugin berguna yang banyak yang tidak tahu dan tidak digunakan dalam proyek mereka. Di bawah potongan, saya mengumpulkan 5 ini, mereka dapat sangat menyederhanakan hidup Anda!

1. File webpack plugin yang tidak digunakan
Dalam proyek-proyek besar front-end, selalu ada banyak modul yang mudah tersesat. Jika Anda tidak memeriksa proyek untuk modul yang tidak digunakan, maka cepat atau lambat proyek akan mengakumulasi file sampah yang tidak digunakan di mana pun.
Untuk mengetahui tentang file yang tidak digunakan dalam suatu proyek, tambahkan plugin file-webpack yang tidak digunakan ke konfigurasi Anda:
npm i unused-files-webpack-plugin
const { UnusedFilesWebpackPlugin } = require('unused-files-webpack-plugin'); module.exports = { plugins: [ new UnusedFilesWebpackPlugin(), ], };
Setelah instalasi, Anda akan menerima peringatan tentang file yang tidak digunakan:
src/ ├── index.js └── someFile.js ( )
WARNING in UnusedFilesWebpackPlugin found some unused files: src/someFile.js
Referensi:
→
Github→
NPM2. Plugin jalur sensitif case webpack
Selama pengembangan pada OSX, seringkali mungkin untuk membingungkan huruf kecil dan huruf besar di jalur ketika mengimpor modul. Perakitan akan berkumpul di poppy, tetapi pada sistem case-sensitive lainnya, ia akan jatuh.
Jika Anda ingin menghilangkan masalah ini, Anda perlu meletakkan case-sensitive-paths-webpack-plugin:
npm i case-sensitive-paths-webpack-plugin
const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); module.exports = { plugins: [ new CaseSensitivePathsPlugin(), ], };
Sekarang saat mengimpor modul dengan case yang salah, Anda akan selalu mendapatkan kesalahan:
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`.
Masalah ini juga dapat diselesaikan dengan menggunakan plugin eslint
impor / tidak-tidak terselesaikan .
Dalam naskah, ada opsi serupa untuk bekerja - forceConsistentCasingInFileNames. Tetapi berperilaku sedikit berbeda: memeriksa bahwa mengimpor modul dari tempat yang berbeda tidak berbeda dalam kasus, kebenaran register tidak dicentang.
Referensi:
→
Github→
NPM3. Periksa paket
Dalam proyek Anda, situasi mungkin muncul bahwa Anda dan paket Anda menggunakan versi berbeda dari perpustakaan yang sama. Kemudian beberapa bundel paket akan muncul dalam bundel, yang dapat dengan mudah diperbaiki dengan menentukan versi yang sama.
Inspectpack akan membantu Anda menemukan situasi ini segera:
npm i inspectpack
const { DuplicatesPlugin } = require('inspectpack/plugin'); module.exports = { plugins: [ new DuplicatesPlugin(), ], };
Jika Anda menginstal plugin, maka peringatan akan muncul ketika salinan paket muncul:
{ "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.
Contoh dunia nyataDi semua proyek saya, saya menggunakan
penjaga untuk melacak kesalahan .
SDK javascript- nya dibagi menjadi beberapa paket, yang masing-masing memiliki ketergantungan pada tslib@^1.9.3.
Dalam salah satu proyek, tslib@1.9.0 dinyatakan secara tidak sengaja dalam dependensi, karena tslib satu versi diinstal secara lokal untuk setiap paket. Paket penjaga tampak seperti ini:
Salinan tslib Burgundy dipilih Parsed size: 121.03 KB Gzipped size: 27.16 KB
Berkat inspectpack, masalahnya ditemukan: Saya menghapus tslib@1.9.0 dari dependensi di package.json, dependensi tslib@^1.9.3 pada sentry dipasang satu kali di tingkat atas, dan paket mulai menimbang 26 KB lebih sedikit:

Parsed size: 94.5 KB Gzipped size: 26.5 KB
Fungsionalitas serupa disediakan oleh
duplikat-paket-pemeriksa-webpack-plugin . Tetapi ada satu masalah dengan itu -
tidak menunjukkan beberapa kemunculan satu versi perpustakaan, yaitu masalah dalam contoh di bawah spoiler, di mana ada beberapa versi identik tslib, dia tidak dapat menemukan.
Referensi:
→
Github→
NPM4. Plugin ketergantungan sirkular
Selama pengembangan, kadang-kadang ada masalah dengan menyelesaikan dependensi - dua modul saling mengimpor dan ketergantungan melingkar diperoleh. Ini dapat terjadi secara implisit, melalui rantai modul lain. Dalam kasus yang jarang terjadi, dependensi siklik adalah normal, tetapi kemungkinan besar ini menunjukkan bahwa ada masalah dalam arsitektur proyek.
Untuk segera melihat dependensi melingkar dan menghapusnya, tambahkan edaran-dependensi-plugin:
npm i circular-dependency-plugin
const CircularDependencyPlugin = require('circular-dependency-plugin'); module.exports = { plugins: [ new CircularDependencyPlugin(), ], };
Sekarang, ketika ketergantungan melingkar muncul, Anda akan menerima peringatan:
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
Aturan
import / no-cycle untuk eslint dan
tslint-no-circular-import untuk tslint menyelesaikan masalah yang sama. Yang terakhir, bagaimanapun, tidak memiliki kemampuan untuk mengabaikan impor jenis, antarmuka, dan kelas yang hanya digunakan untuk mengetik - Anda harus sering menulis tslint: disable.
Referensi:
→
Github→
NPM5. Mengukur kecepatan plugin webpack
Dalam proyek besar yang terdiri dari beberapa ratus file, perakitan dapat memakan waktu hingga beberapa menit.
Kecepatan-ukur-webpack-plugin akan membantu mengukur setiap langkah pembuatan dan menemukan masalah:
npm i speed-measure-webpack-plugin
const SpeedMeasurePlugin = require("speed-measure-webpack-plugin"); const smp = new SpeedMeasurePlugin(); module.exports = smp.wrap({ });
Output build akan menambahkan informasi tentang total waktu build, waktu eksekusi setiap plugin dan setiap rantai pemuat:
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 /* ... */
Dia membantu saya menemukan masalah dengan kecepatan minifikasi TerserPlugin: Saya menghapus beberapa pengaturan yang hampir tidak berpengaruh pada ukuran file yang dihasilkan, dan mempercepatnya dengan beberapa detik.
Referensi:
→
Github→
NPM