Devtool
يتحكم هذا الخيار في إمكانية وكيفية إنشاء Source Maps.
استخدم SourceMapDevToolPlugin للحصول على تخصيص أكثر دقة. راجع Rule.extractSourceMap للتعامل مع Source Maps الموجودة.
devtool
string = 'eval' Array<{ type: "all" | "javascript" | "css", use: string }> false
اختر النمط source mapping لتحسين عملية التصحيح. يمكن أن تؤثر هذه القيم على سرعة build وrebuild بشكل كبير.
5.105.0+يمكنك أيضًا توفير array من الكائنات لتخصيص أنماط مختلفة لـ Source Map لأنواع asset مختلفة:
webpack.config.js
export default {
// ...
devtool: [
{ type: "javascript", use: "source-map" },
{ type: "css", use: "inline-source-map" },
],
};يحدد الحقل type نوع asset الذي يجب أن يتلقى القيمة devtool:
"all"- ينطبق على جميع أنواع asset (JavaScript وCSS)"javascript"- ينطبق فقط على ملفات JavaScript"css"- ينطبق فقط على ملفات CSS
عند استخدام array، ستتم معالجة كل entry بالترتيب. إذا قمت بتوفير قيمة string، فسيتم التعامل معها على أنها { type: "all", use: "your-string-value" }.
| devtool | performance | الإنتاج | الجودة | تعليق |
|---|---|---|---|---|
| (لا شيء) | build: الأسرع rebuild: الأسرع | نعم | bundle | الاختيار الموصى به لإصدارات الإنتاج بحد أقصى performance. |
eval | build: سريع rebuild: الأسرع | no | ولدت | يُوصى باختيار التطوير بحد أقصى performance. |
eval-cheap-source-map | build: ok rebuild: سريع | no | تحولت | خيار المقايضة للتنمية يبني. |
eval-cheap-module-source-map | build: بطيء rebuild: سريع | no | الخطوط الأصلية | خيار المقايضة للتنمية يبني. |
eval-source-map | build: الأبطأ rebuild: حسنًا | no | original | الاختيار الموصى به للتطوير يبني بجودة عالية Source Maps. |
cheap-source-map | build: ok rebuild: بطيء | no | تحولت | - |
cheap-module-source-map | build: بطيء rebuild: بطيء | no | الخطوط الأصلية | - |
source-map | build: الأبطأ rebuild: الأبطأ | نعم | original | الاختيار الموصى به للإنتاج يبني بجودة عالية Source Maps. |
inline-cheap-source-map | build: ok rebuild: بطيء | no | تحولت | - |
inline-cheap-module-source-map | build: بطيء rebuild: بطيء | no | الخطوط الأصلية | - |
inline-source-map | build: الأبطأ rebuild: الأبطأ | no | original | الاختيار المحتمل عند نشر ملف واحد |
eval-nosources-cheap-source-map | build: ok rebuild: سريع | no | تحولت | كود المصدر غير متضمن |
eval-nosources-cheap-module-source-map | build: بطيء rebuild: سريع | no | الخطوط الأصلية | كود المصدر غير متضمن |
eval-nosources-source-map | build: الأبطأ rebuild: حسنًا | no | original | كود المصدر غير متضمن |
inline-nosources-cheap-source-map | build: ok rebuild: بطيء | no | تحولت | كود المصدر غير متضمن |
inline-nosources-cheap-module-source-map | build: بطيء rebuild: بطيء | no | الخطوط الأصلية | كود المصدر غير متضمن |
inline-nosources-source-map | build: الأبطأ rebuild: الأبطأ | no | original | كود المصدر غير متضمن |
nosources-cheap-source-map | build: ok rebuild: بطيء | no | تحولت | كود المصدر غير متضمن |
nosources-cheap-module-source-map | build: بطيء rebuild: بطيء | no | الخطوط الأصلية | كود المصدر غير متضمن |
nosources-source-map | build: الأبطأ rebuild: الأبطأ | نعم | original | كود المصدر غير متضمن |
hidden-nosources-cheap-source-map | build: ok rebuild: بطيء | no | تحولت | لا يوجد مرجع، كود المصدر غير مدرج |
hidden-nosources-cheap-module-source-map | build: بطيء rebuild: بطيء | no | الخطوط الأصلية | لا يوجد مرجع، كود المصدر غير مدرج |
hidden-nosources-source-map | build: الأبطأ rebuild: الأبطأ | نعم | original | لا يوجد مرجع، كود المصدر غير مدرج |
hidden-cheap-source-map | build: ok rebuild: بطيء | no | تحولت | لا مرجع |
hidden-cheap-module-source-map | build: بطيء rebuild: بطيء | no | الخطوط الأصلية | لا مرجع |
hidden-source-map | build: الأبطأ rebuild: الأبطأ | نعم | original | لا مرجع. الاختيار المحتمل عند استخدام Source Map فقط لأغراض الإبلاغ عن الأخطاء. |
| الاختصار | شرح |
|---|---|
| performance: build | كيف يتأثر performance الخاص بـ build الأولي بإعداد devtool؟ |
| performance: rebuild | كيف يتأثر performance الخاص بـ build المتزايد بإعداد devtool؟ قد تؤدي أدوات التطوير البطيئة إلى تقليل حلقة تعليقات التطوير في وضع watch. يختلف المقياس مقارنةً بـ build performance، حيث يتوقع المرء أن تكون عمليات إعادة البناء أسرع من عمليات الإنشاء. |
| الإنتاج | هل يعقل استخدام هذا devtool لبناء الإنتاج؟ عادةً ما يكون no عندما يكون لـ devtool تأثير سلبي على تجربة المستخدم. |
| الجودة: المجمعة | سترى كل التعليمات البرمجية التي تم إنشاؤها لـ chunk في كتلة واحدة من التعليمات البرمجية. هذا هو ملف output الخام بدون أي دعم لتطوير الأدوات |
| الجودة: ولدت | سترى الكود الذي تم إنشاؤه، ولكن يتم عرض كل module كملف تعليمات برمجية منفصل في أدوات التطوير browser. |
| الجودة: تحولت | ستشاهد التعليمات البرمجية التي تم إنشاؤها بعد المعالجة المسبقة بواسطة loaders ولكن قبل تحويلات webpack الإضافية. سيتم تعيين خطوط المصدر فقط وسيتم تجاهل معلومات العمود بشكل متكرر. لم يتم إنشاؤها. يؤدي هذا إلى منع تعيين نقاط التوقف في منتصف الأسطر التي لا تعمل مع المصغر. |
| الجودة: الخطوط الأصلية | سترى الكود الأصلي الذي كتبته، بافتراض أن كل loaders يدعم Source Mapping. سيتم تعيين خطوط المصدر فقط وسيتم تجاهل معلومات العمود بشكل متكرر. لم يتم إنشاؤها. يؤدي هذا إلى منع تعيين نقاط التوقف في منتصف الأسطر التي لا تعمل مع المصغر. |
| الجودة: أصلية | سترى الكود الأصلي الذي كتبته، بافتراض أن كل loaders يدعم Source Mapping. |
eval-* إضافة | أنشئ Source Map لكل module وأرفقه عبر التقييم. موصى به للتطوير، بسبب تحسين rebuild performance. لاحظ أن هناك مشكلة في Windows Defender، والتي تسبب تباطؤًا كبيرًا بسبب فحص الفيروسات. |
inline-* إضافة | قم بتضمين Source Map في الملف الأصلي بدلاً من إنشاء ملف منفصل. |
hidden-* إضافة | لم تتم إضافة أي إشارة إلى Source Map. عندما لا يتم نشر Source Map، ولكن لا يزال يتعين إنشاؤها، مثلاً لأغراض الإبلاغ عن الأخطاء. |
nosources-* إضافة | لم يتم تضمين كود المصدر في Source Map. يمكن أن يكون هذا مفيدًا عندما يجب الرجوع إلى الملفات الأصلية (تلزم خيارات تخصيص إضافية). |
بعض هذه القيم مناسبة للتطوير وبعضها مناسب للإنتاج. للتطوير، تحتاج عادةً إلى Source Maps سريع بتكلفة bundle الحجم، ولكن بالنسبة للإنتاج، فأنت تريد Source Maps منفصلة دقيقة وتدعم التقليل.
الصفات
bundled code - ترى كل التعليمات البرمجية التي تم إنشاؤها كنقطة كبيرة من التعليمات البرمجية. لا ترى modules منفصلة عن بعضها البعض.
generated code - ترى كل module منفصلاً عن بعضها البعض، ومزودًا بتعليقات توضيحية بأسماء module. ترى الكود الذي تم إنشاؤه بواسطة webpack. مثال: بدلاً من import {test} from "module"; test(); ترى شيئًا مثل var module__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(42); module__WEBPACK_IMPORTED_MODULE_1__.a();.
transformed code - ترى كل module منفصلاً عن بعضها البعض، ومزودًا بتعليقات توضيحية بأسماء module. ترى الكود قبل أن يقوم webpack بتحويله، ولكن بعد loaders ينقله. مثال: بدلاً من import {test} from "module"; class A extends test {} ترى شيئًا مثل import {test} from "module"; var A = function(_test) { ... }(test);
original source - ترى كل module منفصلاً عن بعضها البعض، ومزودًا بتعليقات توضيحية بأسماء module. ترى الكود قبل الترجمة، كما قمت بتأليفه. هذا يعتمد على دعم Loader.
without source content - لم يتم تضمين محتويات المصادر في Source Maps. يحاول browsers عادةً تحميل المصدر من web server أو نظام الملفات. يجب عليك التأكد من تعيين output.devtoolModuleFilenameTemplate بشكل صحيح لمطابقة عناوين URL المصدر.
(lines only) - يتم تبسيط Source Maps تبسيطها إلى تعيين واحد لكل سطر. يعني هذا عادةً تعيينًا واحدًا لكل عبارة (على افتراض أنك تقوم بتأليفها بهذه الطريقة). يمنعك هذا من تصحيح أخطاء التنفيذ على مستوى العبارة ومن نقاط توقف الإعدادات على أعمدة السطر. الدمج مع التصغير غير ممكن لأن أدوات التصغير عادةً ما تصدر سطرًا واحدًا فقط.
التنمية
الخيارات التالية مثالية للتطوير:
eval - يتم تنفيذ كل module باستخدام eval() و//# sourceURL. هذا سريع جدًا. العيب الرئيسي هو أنه لا يعرض أرقام الأسطر بشكل صحيح حيث يتم تعيينه للكود المنقول بدلاً من الكود الأصلي (لا يوجد Source Maps من loaders).
eval-source-map - يتم تنفيذ كل module باستخدام eval() ويتم إضافة Source Map كـ Data URL إلى eval(). في البداية كان بطيئًا، لكنه يوفر سرعة rebuild سريعة وينتج ملفات حقيقية. يتم تعيين أرقام الأسطر بشكل صحيح حيث يتم تعيينها إلى الكود الأصلي. إنها تنتج أفضل جودة Source Maps للتطوير.
eval-cheap-source-map - على غرار eval-source-map، يتم تنفيذ كل module باستخدام eval(). إنه "رخيص" لأنه لا يحتوي على تعيينات للأعمدة، بل يقوم فقط بتعيين أرقام الأسطر. إنه يتجاهل Source Maps من loaders ويعرض فقط الكود المنقول المشابه لـ eval devtool.
eval-cheap-module-source-map - يشبه eval-cheap-source-map، ومع ذلك، في هذه الحالة تتم معالجة Source Maps من loaders للحصول على نتائج أفضل. ومع ذلك، تم تبسيط Loader Source Maps إلى تعيين واحد لكل سطر.
حالات خاصة
الخيارات التالية ليست مثالية للتطوير أو الإنتاج. فهي ضرورية لبعض الحالات الخاصة، مثلاً لبعض أدوات الطرف الثالث.
inline-source-map - تتم إضافة Source Map كـ Data URL إلى bundle.
cheap-source-map - Source Map بدون تعيينات الأعمدة التي تتجاهل loader Source Maps.
inline-cheap-source-map - يشبه cheap-source-map ولكن تتم إضافة Source Map كـ Data URL إلى bundle.
cheap-module-source-map - Source Map بدون تعيينات أعمدة تعمل على تبسيط loader Source Maps إلى تعيين واحد لكل سطر.
inline-cheap-module-source-map - يشبه cheap-module-source-map ولكن تتم إضافة Source Map كـ Data URL إلى bundle.
الإنتاج
تُستخدم هذه الخيارات عادةً في الإنتاج:
(none) (احذف الخيار devtool أو اضبط devtool: false) - لا ينبعث Source Map. هذا خيار جيد للبدء به.
source-map - يتم إصدار Source Map كامل كملف منفصل. فهو يضيف تعليقًا مرجعيًا إلى bundle حتى تعرف أدوات التطوير مكان العثور عليه.
hidden-source-map - مثل source-map، لكنه لا يضيف تعليقًا مرجعيًا إلى bundle. يكون ذلك مفيدًا إذا كنت تريد فقط أن يقوم Source Maps بتعيين تتبعات مكدس الأخطاء من تقارير الأخطاء، ولكنك لا تريد كشف Source Map لأدوات تطوير browser.
nosources-source-map - يتم إنشاء Source Map بدون sourcesContent بداخله. يمكن استخدامه لتعيين آثار المكدس على client دون الكشف عن كافة التعليمات البرمجية المصدر. يمكنك نشر الملف Source Map على web server.



