مرحبا يا هبر!
تحتوي حزمة الويب على العديد من الإضافات المفيدة التي لا يعرفها الكثيرون ولا يستخدمونها في مشاريعهم. تحت الخفض ، جمعت 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 نسخ مختارة 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