Target
يستطيع webpack أن يُصرّف لعدّة بيئات أو targets. ولفهم المقصود بـ target تفصيلاً، اقرأ صفحة مفهوم الـ targets.
target
string [string] false
يأمر هذا الخيار webpack بتوليد شيفرة runtime مناسبة لبيئة بعينها. ولاحظ أنّ شيفرة runtime في webpack ليست هي شيفرة المستخدم التي تكتبها أنت، فإن كنت تريد استهداف بيئات معيّنة فعليك أن تُحوِّل شيفرتك بمُحوِّل كـ Babel. فإن كانت شيفرتك المصدرية فيها arrow functions وأردت تنفيذ الحزمة في بيئات ES5، فلن يُحوِّلها webpack تلقائياً لمجرّد أنّك ضبطت target.
القيمة الافتراضية هي 'browserslist'، أو 'web' حين لا يُعثر على تخصيص browserslist.
string
تُدعَم القيم النصّية الآتية عبر WebpackOptionsApply:
| الخيار | الوصف |
|---|---|
async-node[[X].Y] | تصريف للاستعمال في بيئة شبيهة بـ Node.js (تستعمل fs و vm لتحميل الـ chunks بشكل غير متزامن). |
electron[[X].Y]-main | تصريف لـ Electron خاصّ بالعملية الرئيسية (main process). |
electron[[X].Y]-renderer | تصريف لـ Electron خاصّ بعملية العرض (renderer process)، ويُوفِّر هدفاً يستعمل JsonpTemplatePlugin و FunctionModulePlugin لبيئات المتصفّح، و NodeTargetPlugin و ExternalsPlugin لوحدات CommonJS ووحدات Electron المدمجة. |
electron[[X].Y]-preload | تصريف لـ Electron خاصّ بعملية العرض، ويُوفِّر هدفاً يستعمل NodeTemplatePlugin مع ضبط asyncChunkLoading على true، و FunctionModulePlugin لبيئات المتصفّح، و NodeTargetPlugin و ExternalsPlugin لوحدات CommonJS ووحدات Electron المدمجة. |
node[[X].Y] | تصريف للاستعمال في بيئة شبيهة بـ Node.js (تستعمل require الخاصة بـ Node.js لتحميل الـ chunks). |
node-webkit[[X].Y] | تصريف للاستعمال في WebKit، ويستعمل JSONP لتحميل الـ chunks. ويُتيح استيراد وحدات Node.js المدمجة و nw.gui (تجريبي). |
nwjs[[X].Y] | مثل node-webkit تماماً. |
web | تصريف للاستعمال في بيئة شبيهة بالمتصفّح (الافتراضي). |
webworker | تصريف بوصفه WebWorker. |
universal | تصريف حزمة واحدة تتكيف في وقت التشغيل مع المتصفح وweb worker وNode.js وElectron وNW.js. تكون المخرجات دائمًا ECMAScript modules. متاح منذ webpack 5.108.0. |
bun | تصريف لـ Bun. تكون المخرجات ECMAScript modules، وتُعامل وحدات bun:* ووحدات Node.js المدمجة بوصفها externals. متاح منذ webpack 5.108.0. |
deno[[X].Y] | تصريف لـ Deno. تكون المخرجات ECMAScript modules، وتُحل وحدات Node.js المدمجة باستخدام بادئة node: المطلوبة، بينما تبقى بروتوكولات الاستيراد الخاصة بـ Deno (npm: وjsr: وnode: وhttp(s)://) خارج الحزمة. متاح منذ webpack 5.108.0. |
esX | تصريف لإصدار ECMAScript المُحدَّد. أمثلة: es5، es2020. |
browserslist | استنتاج المنصّة وميزات ES من تخصيص browserslist (افتراضي إن كان تخصيص browserslist متاحاً). |
فمثلاً، حين يكون target مضبوطاً على "electron-main"، يُضيف webpack عدّة متغيّرات خاصّة بـ electron.
ويمكن اختياراً تحديد إصدار من node أو electron، وهو ما يُعبَّر عنه بـ [[X].Y] في الجدول أعلاه.
webpack.config.js
export default {
// ...
target: "node12.18",
};وهذا يُعين على تحديد ميزات ES التي قد تُستعمَل في توليد شيفرة runtime (إذ تُغلَّف جميع الـ chunks والوحدات داخل شيفرة runtime).
browserslist
إن كان للمشروع تخصيص browserslist، فإنّ webpack سيُوظِّفه في:
- تحديد ميزات ES التي قد تُستعمَل في توليد شيفرة runtime.
- استنتاج بيئة العمل (مثلاً:
last 2 node versionsتكافئtarget: "node"مع بعض إعداداتoutput.environment).
القيم المدعومة لـ browserslist:
browserslist— استعمل تخصيص browserslist والبيئة المحلولين تلقائياً (من أقربpackage.jsonأو من متغيّر البيئةBROWSERSLIST، انظر توثيق browserslist للتفاصيل).browserslist:modern— استعمل بيئةmodernمن تخصيص browserslist المحلول تلقائياً.browserslist:last 2 versions— استعمل استعلام browserslist صريحاً (وسيُتجاهَل ملفّ التخصيص).browserslist:/path/to/config— حدِّد ملفّ تخصيص browserslist صراحةً.browserslist:/path/to/config:modern— حدِّد ملفّ تخصيص browserslist وبيئةً صراحةً.
universal
5.108.0+إعداد مسبق واحد يجمع منصات web وweb worker وnode وelectron وnwjs، ويترك مؤشر كل منصة محايدًا كي تتكيف الحزمة في وقت التشغيل بدل التقيد ببيئة واحدة. وهو بديل مختصر لكتابة target: ["web", "node"] يدويًا، وتكون مخرجاته دائمًا ECMAScript modules. القيمة الافتراضية لـ experiments.outputModule مع هذا الهدف هي true.
webpack.config.js
export default {
// ...
target: "universal",
};ملاحظات حول عمليات البناء الشاملة:
- يحل
new Worker(new URL(...))مُنشئWorkerمنworker_threadsفي Node، ومنWorkerالعام في الويب. - تدعم مخرجات ESM عناصر
commonjsوnode-commonjsالخارجية، وتُحمّل عبرcreateRequireمنprocess.getBuiltinModule. أما العناصر الخارجية من نوعglobalفتستخدمglobalThisككائن عام. - يعمل CSS في Node لأغراض التصيير من جهة الخادم؛ إذ تُجمع الأنماط المحقونة عبر
styleوالـchunks المحمّلة عبرlinkفيglobalThis["__webpack_css__" + output.uniqueName]ليقرأها مضيف SSR.
bun
5.108.0+يُصرِّف هذا الهدف الشيفرة لـBun. تخرج الحزمة بصيغة ECMAScript modules، وتكون القيمة الافتراضية لـexperiments.outputModule هي true. كما يعامل وحدات bun:* الخاصة بـBun ووحدات Node.js المدمجة التي يوفرها بوصفها externals بدل تضمينها في الحزمة.
webpack.config.js
export default {
// ...
target: "bun",
};deno
5.108.0+يُصرِّف هذا الهدف الشيفرة لـDeno. تخرج الحزمة بصيغة ECMAScript modules، وتكون القيمة الافتراضية لـexperiments.outputModule هي true. تُحل وحدات Node.js المدمجة باستخدام بادئة node: التي يتطلبها Deno، وتبقى بروتوكولات الاستيراد الخاصة بـDeno (npm: وjsr: وnode: وعناوين http(s)://) خارج الحزمة ليتولى runtime تحميلها. ويمكن تحديد إصدار، مثل deno2 أو deno1.40.
webpack.config.js
export default {
// ...
target: "deno", // أو "deno2" و"deno1.40" وغيرها
};[string]
حين تُمرَّر عدّة أهداف، فلن يُستعمَل إلا المشترك بين الميزات:
webpack.config.js
export default {
// ...
target: ["web", "es5"],
};سيُولِّد webpack شيفرة runtime لمنصّة الويب، ولن يستعمل سوى ميزات ES5.
يمكنك أيضاً الجمع بين أهداف المنصات لبناء كود universal يعمل في عدة بيئات:
webpack.config.js
export default {
// ...
target: ["web", "node"],
};سيُولِّد webpack شيفرة runtime تعمل في بيئتي المتصفح وNode.js.
false
اضبط target على false إن لم تكفِ احتياجاتك أيّ من الأهداف المعرَّفة مُسبقاً، ولن يُطبَّق عندئذٍ أيّ plugin.
webpack.config.js
export default {
// ...
target: false,
};أو يمكنك تطبيق ما تشاء من plugins بنفسك:
webpack.config.js
import webpack from "webpack";
export default {
// ...
target: false,
plugins: [
new webpack.web.JsonpTemplatePlugin(options.output),
new webpack.LoaderTargetPlugin("web"),
],
};وإن لم تُقدَّم أيّ معلومات عن الهدف أو عن ميزات البيئة، فستُستعمَل ES2015.



