مرحبا يا هبر!
تحتوي حزمة الويب على العديد من الإضافات المفيدة التي لا يعرفها الكثيرون ولا يستخدمونها في مشاريعهم. تحت الخفض ، جمعت 5 من هؤلاء ، يمكنهم تبسيط حياتك إلى حد كبير!

1. الملفات غير المستخدمة webpack المساعد
في المشروعات الأمامية الكبيرة ، هناك دائمًا العديد من الوحدات التي يسهل عليك ضياعها. إذا لم تقم بفحص المشروع بحثًا عن الوحدات النمطية غير المستخدمة ، فسوف يتراكم عاجلاً أم آجلاً الملفات غير المرغوب فيها غير المستخدمة في أي مكان.
للتعرف على الملفات غير المستخدمة في مشروع ما ، أضف البرنامج المساعد غير المستخدم-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 
المراجع:
→ 
جيثب→ 
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`. 
يمكن أيضًا حل هذه المشكلة باستخدام البرنامج المساعد 
للاستيراد / عدم حل eslint.
يوجد في typescript خيار مماثل للعمل - forceConsistentCasingInFileNames. لكنها تتصرف بشكل مختلف بعض الشيء: فهي تتحقق من أن استيراد الوحدة النمطية من أماكن مختلفة لا يختلف في الحالة ، ولا يتم التحقق من صحة السجل.
المراجع:
→ 
جيثب→ 
NPM3. Inspectpack
في مشروعك ، قد ينشأ موقف بأنك وباستخدام حزمك تستخدم إصدارات مختلفة من نفس المكتبة. ثم ستظهر حزم متعددة في الحزمة ، والتي يمكن إصلاحها بسهولة عن طريق تحديد نفس الإصدارات.
سيساعدك نظام 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 نسخ مختارة
بورغوندي tslib نسخ مختارة Parsed size: 121.03 KB Gzipped size: 27.16 KB 
بفضل inspectpack ، تم العثور على المشكلة: لقد أزلت tslib@1.9.0 من التبعيات في package.json ، وتم تثبيت التبعية tslib@^1.9.3 مرة واحدة على المستوى الأعلى ، وبدأت الحزم تزن أقل من 26 كيلو بايت:

 Parsed size: 94.5 KB Gzipped size: 26.5 KB 
 يتم توفير وظائف مماثلة من خلال 
مكررة-package-checker-webpack-plugin . ولكن هناك مشكلة واحدة - فهي 
لا تظهر عدة مرات لإصدار واحد من المكتبة ، أي المشكلة في المثال تحت المفسد ، حيث توجد عدة إصدارات مماثلة من tslib ، وقال انه لا يمكن العثور عليها.
المراجع:
→ 
جيثب→ 
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 - no- التعميم - الواردات ل tslint حل مشكلة مماثلة. ومع ذلك ، لا تتمتع هذه الأخيرة بالقدرة على تجاهل استيراد الأنواع ، والواجهات ، والفئات التي تستخدم فقط للكتابة - سيتعين عليك في كثير من الأحيان كتابة tslint: تعطيل.
المراجع:
→ 
جيثب→ 
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: لقد قمت بإزالة العديد من الإعدادات التي لم يكن لها أي تأثير تقريبًا على حجم الملفات الناتجة ، وقمت بتسريعها بضع ثوانٍ.
المراجع:
→ 
جيثب→ 
NPM