أهلاً بيك يا صديقي المطور في حجر الأساس لمعمارية الفرونت إند في ووردبريس الحديث: حزم JavaScript الرسمية (@wordpress/*) ومنظومة إعلان الاعتماديات (Dependency Extraction Architecture).
لما تبدأ تبني بلوكات أو إضافات معقدة في Gutenberg، أول حاجة بتعملها إنك بتفتح الـ Terminal وتكتب npm install. بتلاقي نفسك بتنزل حزم زي @wordpress/blocks، @wordpress/element، و @wordpress/components. لكن، هل سألت نفسك السؤال الجوهري ده: هو الكود ده لما بيتبنى بـ Webpack، هل React ومكتبات ووردبريس دي بتتحزم كلها جوة ملف الـ JS بتاع إضافتك؟ ولا ووردبريس بيتعامل معاها بطريقة تانية أذكى بمليار مرة؟
المأساة إن لو المطور مش فاهم الفلسفة دي، بيعمل كارثة معمارية اسمها “Bundle Bloat”؛ تلاقيه محزم 3 نسخ مختلفة من React و Redux جوة الإضافة بتاعته، وتفاجأ بظهور رسالة الخطأ المرعبة “Invalid hook call: Hooks can only be called inside the body of a function component” بسبب وجود نسختين من React في نفس الصفحة! الحل السحري اللي بنته ووردبريس هو حزمة @wordpress/scripts وإضافة استخراج الاعتماديات Dependency Extraction Webpack Plugin اللي بتولد ملفات .asset.php تلقائياً. في الدليل الشامل ده، هنفكك منظومة الحزم الرسمية، إزاي تبني بيئة تطوير بدون وجع دماغ، وإزاي تضمن إن ملفاتك حجمها لا يتعدى بضع كيلوبايتات مع دراسة حالة مصرية حقيقية بالعامية المصرية التقنية الأصيلة.
| المعيار المعماري | نظام استخراج الاعتماديات الرسمي (@wordpress/scripts) | التحزيم التقليدي الكامل (Bundled React & Packages) | روابط الـ CDN الخارجية المباشرة |
|---|---|---|---|
| حجم ملف الجافاسكريبت النهائي (Bundle Size) | ضئيل للغاية (10 إلى 50 كيلوبايت)؛ يحتوي على كودك المكتوب فقط! | ضخم جداً (من 1 إلى 5 ميجابايت لكل بلوك!) بسبب تضمين مكتبات React و Redux. | متوسط، لكنه يتطلب اتصالات شبكية إضافية تعطل تحميل الصفحة. |
| خطر تضارب نسخ React (Multiple React Instances) | منعدم تماماً (صفر)؛ كافة البلوكات تشترك في نسخة React واحدة محملة في النواة. | مرتفع جداً؛ تضارب مؤكد يكسر الخطافات (Hooks) ويوقف المحرر بالكامل. | مرتفع؛ قد تقوم نسخة الـ CDN بتجاوز نسخة ووردبريس وكسر التوافق. |
| إدارة الاعتماديات في السيرفر (PHP Enqueueing) | آلية 100% عبر ملف index.asset.php الذي يولد مصفوفة الاعتماديات بدقة. | يدوية وخطيرة؛ المطور مسؤول عن كتابة مصفوفة الاعتماديات وتحديث أرقام الإصدارات. | تتطلب كتابة وسوم <script> صلبة تتجاوز نظام طوابير ووردبريس. |
| التخزين المؤقت في متصفح الزائر (Browser Caching) | مثالي؛ مكتبات ووردبريس تخزن في كاش المتصفح لمرة واحدة وتخدم كل إضافات الموقع. | سيء جداً؛ الزائر يضطر لتحميل نفس المكتبات مكررة مع كل بلجن جديد. | جيد لملف الـ CDN ولكن دون أي تكامل مع بيئة ووردبريس الداخلية. |
| التحديثات الأمنية وتوافق النواة | تلقائية؛ عند تحديث ووردبريس تستفيد إضافتك من أحدث إصلاحات الأمان والأداء فوراً. | مجمدة؛ تظل إضافتك عالقة بالإصدار القديم الذي قمت بتحزيمه وقت البرمجة. | تتطلب تعديل روابط الـ CDN يدوياً في كل تحديث. |
كيف يعمل سحر استخراج الاعتماديات (Dependency Extraction)؟
عشان تفهم النقلة المعمارية دي، تعال نتتبع إيه اللي بيحصل لما تكتب في كودك:
import { useState } from '@wordpress/element';
import { Button } from '@wordpress/components';
import { useSelect } from '@wordpress/data';1. في مرحلة البناء (Webpack Build Step):
إضافة @wordpress/dependency-extraction-webpack-plugin (المدمجة تلقائياً داخل @wordpress/scripts) بتبص على كودك وتعمل حركتين عبقريتين:
-
استبدال الـ Imports بالمتغيرات العالمية (Externalization):
بدلاً من أن تقوم بوضع كود حزمة
@wordpress/elementداخل الملف المجمع، تقوم باستبدالها بالمتغير العالمي المتاح في المتصفحwindow.wp.element! ونفس الشيء معwindow.wp.componentsوwindow.wp.data. -
توليد ملف الأصول التلقائي (index.asset.php):
تقوم الإضافة بفحص كل الحزم التي استخدمتها، وتنشئ ملف PHP صغير بجوار ملف الجافاسكريبت يحتوي على مصفوفة الاعتماديات الرسمية وتجزئة الـ MD5 كـ رقم إصدار:
<?php return array( 'dependencies' => array( 'wp-components', 'wp-data', 'wp-element' ), 'version' => 'a4b8c9d0e1f234567890' );
2. في مرحلة التشغيل على السيرفر (PHP Enqueue Step):
في كود الـ PHP بتاع إضافتك، كل اللي بتعمله هو استدعاء السطر السحري ده:
<?php
$asset_file = include( plugin_dir_path( __FILE__ ) . 'build/index.asset.php' );
wp_register_script(
'my-custom-block-editor',
plugins_url( 'build/index.js', __FILE__ ),
$asset_file['dependencies'], // تمرير الاعتماديات آلياً بدون أي كتابة يدوية!
$asset_file['version']
);
?>
ووردبريس هيقرأ المصفوفة دي، ويتأكد إن سكربتات wp-element و wp-components تم تحميلها في الصفحة قبل السكربت بتاعك، وبدون ما تضطر تحفظ أسماء المقابض (Handles) يدوياً!
خريطة أهم حزم ووردبريس الرسمية (@wordpress/* Ecosystem)
نواة Gutenberg مقسمة لأكثر من 100 حزمة مستقلة منشورة على npm. إليك أهم الحزم التي يجب أن تكون في حقيبتك البرمجية:
1. حزم واجهة المستخدم والبلوكات (Block Development):
@wordpress/blocks: تسجيل وإدارة البلوكات (registerBlockType,createBlock).@wordpress/block-editor: المكونات الحصرية لمحرر المقالات (useBlockProps,RichText,InnerBlocks,InspectorControls).@wordpress/components: مكتبة مكونات الواجهة العامة (Button,Modal,PanelBody).@wordpress/element: طبقة التوافق مع React (توفرuseState,useEffect,createElement).
2. حزم إدارة البيانات والاتصال بالشبكة (Data & Networking):
@wordpress/data: مخزن البيانات المركزي (useSelect,useDispatch,createReduxStore).@wordpress/core-data: إدارة كيانات ووردبريس ومقالاته ومستخدميه.@wordpress/api-fetch: بديلfetchالرسمي المدمج؛ يدير الـ Nonces والـ Headers تلقائياً لمخاطبة الـ REST API بأمان.
3. حزم الأدوات والترجمة (Utilities & i18n):
@wordpress/i18n: دوال التدويل والترجمة (__,_x,_n,sprintf).@wordpress/url: معالجة الروابط وإضافة البارامترات (addQueryArgs,getQueryArg).@wordpress/hooks: نظام الـ Actions والـ Filters الشهير لووردبريس ولكن في بيئة الجافاسكريبت!
تطبيق عملي كامل: إعداد بيئة التطوير الإنتاجية بـ @wordpress/scripts
1. إعداد ملف package.json القياسي
{
"name": "enterprise-podcast-player",
"version": "1.0.0",
"description": "إضافة مشغل البودكاست المتقدم المبنية بحزم ووردبريس الرسمية.",
"scripts": {
"build": "wp-scripts build",
"start": "wp-scripts start",
"lint:js": "wp-scripts lint-js",
"lint:css": "wp-scripts lint-style",
"format": "wp-scripts format",
"test": "wp-scripts test-unit-js"
},
"devDependencies": {
"@wordpress/scripts": "^27.0.0"
},
"dependencies": {
"@wordpress/block-editor": "^12.0.0",
"@wordpress/blocks": "^12.0.0",
"@wordpress/components": "^25.0.0",
"@wordpress/data": "^9.0.0",
"@wordpress/element": "^5.0.0",
"@wordpress/i18n": "^4.0.0",
"@wordpress/api-fetch": "^6.0.0"
}
}شرح إعدادات package.json:
- لاحظ أنك لا تحتاج لتثبيت
webpackأوbabelأوeslintيدوياً! حزمة@wordpress/scriptsتأتي مجهزة بجميع أدوات البناء وتكوينات Webpack المثالية المعدة خصيصاً لووردبريس. - أمر
npm startيشغل وضع المراقبة الحية (Watch Mode) مع الـ Source Maps لسرعة التنقيح أثناء التطوير. - أمر
npm run buildيقوم بضغط وتصغير الكود (Minification) وتوليد ملفات.asset.phpالجاهزة للإنتاج.
2. ملف Webpack المخصص عند الحاجة: webpack.config.js
في 95% من المشاريع، لن تحتاج لإنشاء ملف webpack.config.js؛ لأن الإعدادات الافتراضية تكفي. ولكن إذا أردت إضافة مسارات مخصصة، يمكنك تمديد التكوين الافتراضي بأسلوب هندسي نظيف:
const defaultConfig = require( '@wordpress/scripts/config/webpack.config' );
module.exports = {
...defaultConfig,
entry: {
'index': './src/index.js',
'frontend': './src/frontend.js', // ملف جافاسكريبت مستقل للواجهة الأمامية
},
};3. كود تسجيل السكربتات في PHP: plugin-loader.php
<?php
/**
* التسجيل المعماري الآمن للسكربتات بالاعتماد على ملفات .asset.php
*/
function az_register_podcast_block_assets() {
$dir = plugin_dir_path( __FILE__ );
$url = plugin_dir_url( __FILE__ );
// المسار لملف الأصول المولد آلياً من Webpack
$asset_path = $dir . 'build/index.asset.php';
if ( ! file_exists( $asset_path ) ) {
return; // تجنب الأخطاء في بيئة التطوير قبل أول عملية Build
}
$asset_file = include( $asset_path );
// تسجيل سكربت المحرر مع تمرير الاعتماديات المستخرجة تلقائياً
wp_register_script(
'az-podcast-editor-script',
$url . 'build/index.js',
$asset_file['dependencies'],
$asset_file['version']
);
// تسجيل ملف التنسيقات
wp_register_style(
'az-podcast-editor-style',
$url . 'build/index.css',
[ 'wp-components' ],
$asset_file['version']
);
// ربط ملفات الترجمة القياسية
wp_set_script_translations( 'az-podcast-editor-script', 'az-podcast' );
}
add_action( 'init', 'az_register_podcast_block_assets' );
?>دراسة حالة واقعية: كارثة منصة البودكاست والبث الصوتي في المعادي والتجمع
خلفية المشروع وأبعاد الأزمة
شبكة إعلامية ومنصة بودكاست مصرية رائدة مقرها المعادي والتجمع الخامس، تبث لقاءات وبرامج صوتية متخصصة في ريادة الأعمال والتكنولوجيا. المنصة تعاقدت مع وكالة برمجية لبناء حزمة تضم 12 بلوكاً مخصصاً (مشغل بودكاست تفاعلي، قائمة حلقات، عارض موجات صوتية Waveform، ولوحة آراء المستمعين).
الأزمة التشخيصية (The Crisis)
المطورون في الوكالة لم يكونوا على دراية بحزمة @wordpress/scripts ولا بنظام استخراج الاعتماديات:
- قاموا بإنشاء تكوين Webpack تقليدي خام قام بحزم مكتبة React الكاملة، و ReactDOM، ومكتبة Redux داخل ملف الـ JavaScript الخاص بكل بلوك من البلوكات الـ 12 بشكل منفصل!
- حجم ملفات الجافاسكريبت التي يتم تحميلها في شاشة التحرير وصل إلى رقم قياسي مرعب: 34 ميجابايت!
- أدى ذلك لتصادم نسختين مختلفتين من React داخل نفس النافذة، وظهر الخطأ القاتل: “Invalid hook call: Hooks can only be called inside the body of a function component”.
- المحرر كان ينهار ويخرج الكاتب من الصفحة (Editor White Screen of Death) بمجرد محاولة إدراج مشغل البودكاست في مقال الحلقة الجديدة.
- تأخر نشر الحلقات الأسبوعية للبرنامج الرئيسي لمدة أسبوعين، مما تسبب في خسائر تسويقية وغضب الرعاة والمعلنين الرسميين.
الحل المعماري الجذري (The Architectural Solution)
تدخل استشاري حلول ووردبريس وتمت إعادة هيكلة بيئة البناء بالكامل:
- حذف ملفات تكوين Webpack و Babel اليدوية بالكامل، واستبدالها بحزمة @wordpress/scripts القياسية.
- تفعيل إضافة
DependencyExtractionWebpackPluginالتلقائية لاستخراج كافة حزم ووردبريس ومكتبة React كـ Externals تشير إلىwindow.wp.*. - ربط ملفات
index.asset.phpالمولدة بملف تحميل الإضافة في الـ PHP وتمرير مصفوفات الاعتماديات الحقيقية للنواة. - تقليص حجم كود الـ JavaScript الإجمالي للبلوكات الـ 12 مجتمعة من 34 ميجابايت إلى 180 كيلوبايت فقط!
جدول قياس مؤشرات الأداء والتحول الهيكلي (Metrics Table)
| مؤشر الأداء والبنية | أثناء الأزمة (التحزيم اليدوي الخام) | بعد التحول لـ @wordpress/scripts | نسبة التحسن والوفر المحقق |
|---|---|---|---|
| حجم ملفات الجافاسكريبت المحملة بالمحرر | 34.2 ميجابايت (كارثة تحميل) | 180 كيلوبايت فقط (خفيف كالريشة) | تخفيض حجم الكود بنسبة 99.47%! |
| أخطاء تضارب نسخ React (Invalid Hook Call) | تحدث مع كل إدراج بلوك (100% تعطل) | 0.00% (نسخة واحدة مشتركة ونقية) | القضاء التام على أخطاء الشاشة البيضاء |
| زمن فتح وتحميل محرر Gutenberg | 28 ثانية مع تجمد المتصفح | 1.2 ثانية فقط (فتح فوري) | تسريع استجابة المحرر بـ 23 ضعفاً |
| استقرار بيئة البناء والتطوير للفريق | تكوينات معقدة تنهار مع كل تحديث | أمر npm build واحد موحد ومستقر | وفر زمني وراحة تامة للمطورين |
الوصايا العشر لإدارة حزم JavaScript والاعتماديات في ووردبريس
- اعتمد على @wordpress/scripts كأداتك الرسمية: لا تضيع وقتك في ضبط Webpack و Babel من الصفر؛ الأداة الرسمية توفر كل ما تحتاجه بأعلى معايير الأمان.
- إياك وتحزيم React داخل ملفات الإضافة: دع React تأتي من نواة ووردبريس عبر
wp-elementلتفادي خطأ Multiple React Instances. - استخدم ملفات .asset.php دائماً في الـ PHP: لا تكتب مصفوفة الاعتماديات يدوياً في
wp_register_script؛ اعتمد على الملف المولد تلقائياً. - استخدم @wordpress/api-fetch بدلاً من fetch أو axios: هي الأداة الوحيدة التي تدير Nonces الأمان و Root URL تلقائياً في ووردبريس.
- التزم بـ @wordpress/i18n للترجمة: استخدم دوال
__()و_x()دائماً لتمكين تعريب واجهات البلوك بسهولة. - فعل ESLint و Prettier المدمجين: شغل أمر
npm run lint:jsقبل رفع الكود للتأكد من خلوه من الأخطاء القياسية. - استخدم Source Maps أثناء التطوير فقط: تأكد من تشغيل
npm run buildقبل نشر الإضافة للإنتاج لضغط الملفات وإزالة الـ Source Maps الثقيلة. - لا تعتمد على مكتبات NPM تكرر وظائف النواة: لا تنزل مكتبة أزرار أو نوافذ منبثقة خارجية؛ استخدم
@wordpress/componentsالمدمجة. - احرص على تطابق إصدارات الحزم: عند تثبيت حزم
@wordpress/*، احرص على استخدام إصدارات متوافقة تصدر عن نفس الدورة التحديثية. - وثق اعتمادات إضافتك في ملف readme.txt: اذكر إصدار ووردبريس الأدنى المطلوب لضمان توفر كافة الحزم المستخدمة في موقع العميل.
معمارية الأتمتة في خطوط الإنتاج المستمر (CI/CD Pipeline with @wordpress/scripts)
يا صديقي المطور، في البيئات المؤسسية وفرق العمل التي تضم أكثر من مطور، لا يجوز الاعتماد على قيام المطور بتشغيل npm run build على جهازه الشخصي ثم رفع الملفات المضغوطة يدوياً إلى Git! هذا السلوك يسبب ما يسمى بـ “Merge Conflicts” في ملفات الـ JS المبنية، ويؤدي إلى رفع كود غير مختبر قد يكسر بيئة الإنتاج.
الممارسة الهندسية المعتمدة هي بناء خط إنتاج مستمر عبر GitHub Actions يتولى فحص الكود، تشغيل اختبارات Jest، وتجميع الأصول آلياً عند كل Pull Request:
كود عملي: ملف سير عمل GitHub Actions لبناء أصول ووردبريس
# .github/workflows/build-and-test.yml
name: WordPress JS Quality & Build Pipeline
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
validate-and-build:
runs-on: ubuntu-latest
steps:
- name: فحص واسترجاع كود المستودع
uses: actions/checkout@v4
- name: إعداد بيئة Node.js الحديثة
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- name: تثبيت الاعتماديات بدقة
run: npm ci
- name: فحص جودة وتنسيق الكود (Linting)
run: npm run lint:js
- name: تشغيل اختبارات الوحدة الآلية (Jest Unit Tests)
run: npm run test
- name: بناء حزمة الإنتاج وتوليد ملفات asset.php
run: npm run build
- name: التحقق من وجود ملف الأصول index.asset.php
run: test -f build/index.asset.php || exit 1هذا الملف يضمن أن أي كود غير متوافق مع معايير ووردبريس، أو يفشل في اختبارات الـ Unit Tests، سيتم رفضه آلياً ولن يُسمح بدمجه في الفرع الرئيسي للمشروع إطلاقاً!
مستقبل الحزم: وحدات الجافاسكريبت الأصلية (ES Modules & Script Modules)
في الإصدارات الحديثة من ووردبريس (ووردبريس 6.5 فما فوق)، بدأت النواة في تبني ثورة جديدة تسمى Script Modules API بالاعتماد على ميزة الـ Import Maps القياسية في المتصفحات الحديثة.
ما هو الفارق بين النظام الكلاسيكي ونظام Script Modules؟
-
النظام الكلاسيكي (Scripts & window.wp.*):
يتم تحميل الملفات كـ وسوم
<script src="...">عادية، وتقوم كل حزمة بتسجيل نفسها ككائن عالمي داخلwindow.wp، ثم يقرأ سكربت إضافتك هذه المتغيرات العامة. -
النظام الثوري الجديد (Script Modules & @wordpress/interactivity):
يتم تسجيل السكربت كـ
type="module"في الـ HTML. ولا يحتاج المتصفح لمتغيرات عالمية، بل يقوم باستيراد الحزم مباشرة عبر متصفح الويب باستخدام عباراتimport { store } from "@wordpress/interactivity";أصلية وسريعة جداً في التحميل غير المتزامن (Asynchronous Module Loading)!
استخدامك لـ @wordpress/scripts يجعلك جاهزاً لهذا المستقبل؛ لأن الحزمة تدعم بناء كل من السكربتات التقليدية للوحة التحكم، ووحدات الـ Script Modules التفاعلية الحديثة للواجهة الأمامية بأمر بناء موحد دون الحاجة لإعادة كتابة بنيتك التحتية.
معمارية تنسيقات الـ SCSS والتصغير التلقائي (PostCSS Pipeline)
ميزة كبرى في @wordpress/scripts يتجاهلها الكثيرون هي دعمها الكامل لـ Sass / SCSS وضغط ملفات الـ CSS آلياً دون الحاجة لأي إضافة خارجية. بمجرد إنشاء ملف style.scss واستيراده داخل index.js:
import './editor.scss';
import './style.scss';يقوم المحرك بما يلي:
- ترجمة لغة SCSS إلى CSS قياسي.
- تطبيق إضافة Autoprefixer لإضافة بادئات المتصفحات (Vendor Prefixes) لضمان عمل التصميم على متصفحات سفاري وكروم القديمة.
- استخراج ملف
index.cssالخاص بالمحرر وملفstyle-index.cssالخاص بالواجهة الأمامية في مجلدbuildبشكل منفصل ومصغر (Minified) تماماً.
تشريح معمارية Babel وملف .browserslistrc في بيئة ووردبريس
يا صديقي المطور، عندما تقوم بكتابة كود JavaScript حديث يحتوي على أحدث صيغ ECMAScript (مثل: Optional Chaining user?.profile?.name، Nullish Coalescing a ?? b، أو مشغلات الـ Async/Await)، كيف تضمن أن هذا الكود سيعمل بكفاءة على متصفحات الشركات والمؤسسات دون أن ينكسر؟
الحل يكمن في حزمة @wordpress/babel-preset-default المدمجة داخل أدوات البناء الرسمية:
1. دور ملف .browserslistrc في ترشيد حجم الكود:
بشكل افتراضي، ترث حزمة @wordpress/scripts قائمة المتصفحات المعتمدة رسمياً لنواة ووردبريس (تغطي أكثر من 95% من المتصفحات النشطة عالمياً). إذا كنت تطور تطبيق إنترانت لشركة حكومية تستخدم إصداراً محدداً من متصفح Edge أو Chrome، يمكنك إضافة ملف .browserslistrc في جذر المشروع:
# .browserslistrc
last 2 Chrome versions
last 2 Firefox versions
last 2 Safari versions
> 1%
not deadيقوم Babel بقراءة هذا الملف أثناء عملية البناء ويقوم فقط بتحويل الصيغ التي لا تدعمها تلك المتصفحات، مما يوفر تضمين الـ Polyfills الثقيلة غير الضرورية ويقلص حجم ملف الـ JS النهائي بنسبة تصل إلى 25% إضافية.
2. التحويل الدلالي لعناصر الـ JSX:
في بيئة React الكلاسيكية، يترجم Babel كود الـ JSX إلى React.createElement(...). لكن في بيئة ووردبريس، يقوم الإعداد المسبق لـ Babel بتحويل الـ JSX تلقائياً إلى wp.element.createElement(...)! هذا التحويل الذكي هو الجسر الذي يعفي المطور من كتابة استيراد React في كل ملف، ويضمن أن كل عنصر JSX في إضافتك يتم التعامل معه كعنصر ووردبريس أصيل متكامل مع بيئة النواة دون أدنى تضارب.
مراقبة ميزانية الأداء وحجم الحزم البرمجية (Performance Budgeting)
في الشركات الكبرى، يتم ضبط معايير ميزانية الأداء (Performance Budgets) بحيث يُحظر تجاوز حجم ملف الجافاسكريبت النهائي للـ Block حاجز 60 كيلوبايت. إذا تخطت الحزمة هذا الحد، يطلق الـ CI/CD تحذيراً فورياً للمطور لفحص ما إذا كان قد قام باستيراد مكتبة خارجية ضخمة دون داعٍ، مما يضمن بقاء الموقع سريعاً وخفيفاً ويحافظ على تصنيفات Core Web Vitals في أعلى مراتب محركات البحث.
الأسئلة الشائعة حول حزم JavaScript وإدارة الاعتماديات (20 سؤالاً وجواباً تفصيلياً)
1. ما هي حزمة @wordpress/scripts وما فائدتها؟
هي حزمة أدوات رسمية تجمع تكوينات Webpack، Babel، ESLint، Jest، و Prettier مجهزة مسبقاً لبناء واختبار كود جافاسكريبت وبلوكات ووردبريس بأمر واحد دون إعدادات معقدة.
2. ما هو ملف index.asset.php ومن يقوم بتوليده؟
هو ملف PHP يتم توليده تلقائياً بواسطة إضافة استخراج الاعتماديات أثناء عملية الـ Build، ويحتوي على مصفوفة الحزم التي استخدمتها ورقم إصدار مشفر لتفادي كاش المتصفح.
3. لماذا يظهر خطأ “Invalid hook call” عند تحزيم React داخل الإضافة؟
لأن React تشترط وجود نسخة وحيدة منها في الذاكرة الحية؛ وعند تحزيم نسخة داخل إضافتك مع وجود نسخة أخرى محملة من ووردبريس، تتصادم النسختان وتنهار الـ Hooks.
4. كيف أبدأ مشروع بلوك جديد باستخدام الأدوات الرسمية؟
باستخدام الأمر الرسمي في الـ Terminal: npx @wordpress/create-block my-block-name الذي يبني هيكل المشروع كاملاً في ثوانٍ.
5. ما الفارق بين npm start و npm run build في @wordpress/scripts؟
الأمر npm start مخصص لبيئة التطوير مع مراقبة التغييرات وتوليد Source Maps، بينما npm run build يضغط الكود ويجهزه للإنتاج بأصغر حجم ممكن.
6. ما هي وظيفة حزمة @wordpress/api-fetch؟
هي حزمة متخصصة في إرسال طلبات REST API داخل ووردبريس، تتميز بحقن كود الحماية (X-WP-Nonce) تلقائياً وضبط مسارات الـ Endpoints دون كتابة الدومين كاملاً.
7. كيف أترجم النصوص داخل ملفات الجافاسكريبت؟
باستيراد دالة __ من @wordpress/i18n: __('مرحبا بك', 'text-domain')، وربط الترجمة في الـ PHP عبر wp_set_script_translations().
8. هل أحتاج لتثبيت React و ReactDOM في الـ dependencies لمشروع جوتنبرج؟
لا؛ ووردبريس توفر حزمة @wordpress/element التي تعمل كغلاف رسمي لـ React ويتم ربطها بنسخة النواة تلقائياً.
9. كيف أضيف ملف JavaScript إضافي للواجهة الأمامية في نفس المشروع؟
بإنشاء ملف webpack.config.js يمدد defaultConfig ويحدد عدة نقاط دخول (Multiple Entry Points) مثل frontend: './src/frontend.js'.
10. ما هي حزمة @wordpress/url ومتى نستخدمها؟
حزمة مساعدة خفيفة لإدارة الروابط في الجافاسكريبت، وتوفر دوال مثل addQueryArgs لإضافة متغيرات للرابط بأمان دون أخطاء في الرموز.
11. كيف أمنع المتصفح من استخدام نسخة قديمة من ملف الـ JS بعد التحديث؟
بتمرير $asset_file['version'] كمعامل رابع في دالة wp_enqueue_script؛ حيث يتغير هذا الرقم تلقائياً مع كل تعديل في الكود.
12. ما هي ميزة استخدام نظام Hooks في الجافاسكريبت عبر @wordpress/hooks؟
تتيح لك تطبيق فلسفة ووردبريس الشهيرة (add_action و add_filter) داخل كود الجافاسكريبت؛ مما يتيح لمطورين آخرين تعديل سلوك إضافتك وتوسيعها.
13. كيف أختبر كود الجافاسكريبت باستخدام @wordpress/scripts؟
بتشغيل الأمر npm test الذي يقوم بتشغيل بيئة Jest المجهزة مسبقاً لاختبار دوالك ومكوناتك في ثوانٍ.
14. هل يمكن استخدام TypeScript مع @wordpress/scripts؟
نعم؛ تدعم الحزمة لغة TypeScript بشكل أصلي بالكامل بمجرد تسمية الملفات بصيغة .ts أو .tsx وإضافة ملف tsconfig.json.
15. ما هو دور @wordpress/dom؟
حزمة توفر دوال مساعدة للتعامل الدقيق مع شجرة الـ DOM، مثل إدارة مؤشرات الفوكس (Focus Trapping) والتحقق من العناصر القابلة للنقر.
16. لماذا يُفضل وضع الحزم في devDependencies وليس dependencies العادية؟
لأن كود الحزم لا يُحزم داخل الملف النهائي بل يُستخرج كـ Externals، والأدوات تستخدم فقط أثناء عملية التطوير والبناء (Build Time).
17. كيف أقوم بتنسيق الأكواد تلقائياً قبل الالتزام في Git؟
بتشغيل أمر npm run format الذي يطبق معايير التنسيق الرسمية لمجتمع ووردبريس عبر Prettier.
18. ماذا يحدث إذا قمت باستيراد حزمة غير مدعومة كـ External في ووردبريس؟
ستقوم إضافة Webpack بتحزيم كودها الكامل داخل ملف إضافتك بشكل طبيعي، بينما تستخرج حزم @wordpress/* فقط كـ Externals.
19. كيف أتحقق من قائمة الاعتماديات التي تم استخراجها فعلياً؟
بفتح ملف build/index.asset.php الناتج بعد تشغيل أمر البناء والاطلاع على مصفوفة dependencies بداخله.
20. ما هي القاعدة الذهبية لإدارة أصول الجافاسكريبت في ووردبريس الحديث؟
“ابنِ كودك بـ @wordpress/scripts، واستخرج اعتماداتك بـ asset.php، ودع ووردبريس يتكفل بتوصيل الأصول بأقل حجم وأعلى أمان”.


اترك تعليقاً
يجب أنت تكون مسجل الدخول لتضيف تعليقاً.