الفرق بين المراجعتين لصفحة: «Laravel/mix»
لا ملخص تعديل |
رؤيا-بنعطية (نقاش | مساهمات) ط استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}' |
||
(8 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: ترجمة الأصول (Laravel Mix) }}</noinclude> | <noinclude>{{DISPLAYTITLE: ترجمة الأصول (Laravel Mix) }}</noinclude> | ||
== مقدمة == | |||
== | يوفّر Laravel Mix واجهة برمجية (API) واضحة لتعريف خطوات بناء <code>Webpack</code> للتطبيق باستعمال العديد من المعالجات المسبقة (pre-processors) للغتي [[CSS]] و [[JavaScript|Javascript]]. باستخدام سلسلة بسيطة من استدعاءات التوابع، يمكن تعريف مسار معالجة الأصول (assets) في التطبيق. فمثلًا:<syntaxhighlight lang="php"> | ||
يوفّر Laravel Mix واجهة برمجية (API) واضحة لتعريف خطوات بناء Webpack للتطبيق باستعمال العديد من المعالجات المسبقة (pre-processors) للغتي CSS و Javascript. باستخدام سلسلة بسيطة من استدعاءات التوابع، يمكن تعريف مسار معالجة الأصول (assets) في التطبيق. فمثلًا:<syntaxhighlight lang="php"> | |||
mix.js('resources/assets/js/app.js', 'public/js') | mix.js('resources/assets/js/app.js', 'public/js') | ||
.sass('resources/assets/sass/app.scss', 'public/css'); | .sass('resources/assets/sass/app.scss', 'public/css'); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
إن أصبحت مرتبكا و مشوشا حول البدء مع Webpack وترجمة الأصول، فسوف تحب Laravel Mix. لكنك لست مطالبًا باستعمالها لبناء تطبيقك. طبعًا لك حرية اختيار أي مسار لمعالجة الأصول تريده، أو أن لا تستعمل أيًا منها على الإطلاق. | إن أصبحت مرتبكا و مشوشا حول البدء مع [[Webpack]] وترجمة الأصول، فسوف تحب Laravel Mix. لكنك لست مطالبًا باستعمالها لبناء تطبيقك. طبعًا لك حرية اختيار أي مسار لمعالجة الأصول تريده، أو أن لا تستعمل أيًا منها على الإطلاق. | ||
== التثبيت والتجهيز == | == التثبيت والتجهيز == | ||
=== تثبيت Node === | === تثبيت Node === | ||
قبل البدء باستخدام Mix، يجب أولًا التأكد من أنّ Node.js و npm مثبّتة بطريقة صحيحة<syntaxhighlight lang="php"> | قبل البدء باستخدام Mix، يجب أولًا التأكد من أنّ [[Node.js]] و [[npm]] مثبّتة بطريقة صحيحة<syntaxhighlight lang="php"> | ||
node -v | node -v | ||
npm -v | npm -v | ||
</syntaxhighlight> | </syntaxhighlight> | ||
في العادة، يتضمّن Laravel Homestead كل ما تحتاج له. لكن إن لم تكن تستعمل | في العادة، يتضمّن [[Laravel/homestead|Laravel Homestead]] كل ما تحتاج له. لكن إن لم تكن تستعمل [[Vagrant]]، فيمكنك استعمال آخر إصدارات [[Node.js]] و [[npm]] بسهولة من صفحة تنزيلها. | ||
=== Laravel Mix === | === Laravel Mix === | ||
الخطوة الوحيدة المتبقية هي تثبيت Laravel Mix. في تطبيق Laravel جديدة، ستجد الملف package.json في الملف الرئيسي للتطبيق. يتضمن الملف package.json كل ما تحتاج له للبداية. يمكنك أن تعدّه مثل composer.json لكن لاعتماديات Node بدل PHP. يمكنك تثبيت الاعتماديات المذكورة في هذا الملف عبر الأمر | الخطوة الوحيدة المتبقية هي تثبيت Laravel Mix. في تطبيق Laravel جديدة، ستجد الملف <code>package.json</code> في الملف الرئيسي للتطبيق. يتضمن الملف <code>package.json</code> كل ما تحتاج له للبداية. يمكنك أن تعدّه مثل <code>composer.json</code> لكن لاعتماديات Node بدل PHP. يمكنك تثبيت الاعتماديات المذكورة في هذا الملف عبر الأمر:<syntaxhighlight lang="text"> | ||
npm install | npm install | ||
</syntaxhighlight> | |||
== تشغيل Mix == | == تشغيل Mix == | ||
Mix هي طبقة ضبط فوق Webpack .لتشغيل مهمّات Mix، يجب فقط تنفيذ أحد سكربتات npm الموجودة في الملف package.json:<syntaxhighlight lang="php"> | Mix هي طبقة ضبط فوق [[Webpack]] .لتشغيل مهمّات Mix، يجب فقط تنفيذ أحد سكربتات [[npm]] الموجودة في الملف <code>package.json</code>:<syntaxhighlight lang="php"> | ||
// تشغيل المهام | // تشغيل المهام | ||
سطر 38: | سطر 35: | ||
=== مراقبة تغيرات الأصول === | === مراقبة تغيرات الأصول === | ||
سيواصل الأمر npm run watch العمل في الطرفية ويراقب كل تغيّر في الملفات. سيعيد Webpack تلقائيًا ترجمة الأصول كّلما طرأ تغيير: | سيواصل الأمر <code>npm run watch</code> العمل في الطرفية ويراقب كل تغيّر في الملفات. سيعيد [[Webpack]] تلقائيًا ترجمة الأصول كّلما طرأ تغيير:<syntaxhighlight lang="text"> | ||
npm run watch | npm run watch | ||
قد تلاحظ أن Webpack لا يقوم بالتحديث في بعض البيئات عند تغيّر الملفات. في هذه الحالة يمكن استعمال الأمر:<syntaxhighlight lang="php"> | </syntaxhighlight> | ||
قد تلاحظ أن [[Webpack]] لا يقوم بالتحديث في بعض البيئات عند تغيّر الملفات. في هذه الحالة يمكن استعمال الأمر:<syntaxhighlight lang="php"> | |||
npm run watch-poll | npm run watch-poll | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== التعامل مع صفحات الأنماط == | == التعامل مع صفحات الأنماط == | ||
الملف webpack.mix.js هو نقطة البداية لترجمة الأصول. يمكنك عدّه طبقةَ ضبطٍ بسيطةً حول Webpack. يمكن سَلسلة (chain) مهمّات Mix معًا لتحديد كيفية ترجمة الأصول بدقّة. | الملف <code>webpack.mix.js</code> هو نقطة البداية لترجمة الأصول. يمكنك عدّه طبقةَ ضبطٍ بسيطةً حول [[Webpack]]. يمكن سَلسلة (chain) مهمّات Mix معًا لتحديد كيفية ترجمة الأصول بدقّة. | ||
=== Less === | === Less === | ||
يمكن استعمال التابع [http://lesscss.org/ Less] لترجمة Less إلى CSS. لنترجم الملف الأولي app.less إلى الملف public/css/app.css:<syntaxhighlight lang="php"> | يمكن استعمال التابع [http://lesscss.org/ Less] لترجمة Less إلى CSS. لنترجم الملف الأولي <code>app.less</code> إلى الملف <code>public/css/app.css</code>:<syntaxhighlight lang="php"> | ||
mix.less('resources/assets/less/app.less', 'public/css'); | mix.less('resources/assets/less/app.less', 'public/css'); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
تُستعمل النداءات المتكرّرة للتابع Less لترجمة أكثر من ملف واحد:<syntaxhighlight lang="php"> | تُستعمل النداءات المتكرّرة للتابع <code>Less</code> لترجمة أكثر من ملف واحد:<syntaxhighlight lang="php"> | ||
mix.less('resources/assets/less/app.less', 'public/css') | mix.less('resources/assets/less/app.less', 'public/css') | ||
سطر 58: | سطر 56: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
لتجاوز ضبط Less المبدئي، فيمكنك تمرير معامل ثالث للتابع ()mix.less:<syntaxhighlight lang="php"> | لتجاوز ضبط Less المبدئي، فيمكنك تمرير معامل ثالث للتابع <code>()mix.less</code>:<syntaxhighlight lang="php"> | ||
mix.less('resources/assets/less/app.less', 'public/css', { | mix.less('resources/assets/less/app.less', 'public/css', { | ||
سطر 66: | سطر 64: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Sass === | === Sass === | ||
يسمح التابع [ | يسمح التابع <code>Sass</code> بترجمة [[Sass]] إلى [[CSS]]. يمكن استعمال التابع كالآتي:<syntaxhighlight lang="php"> | ||
mix.sass('resources/assets/sass/app.scss', 'public/css'); | mix.sass('resources/assets/sass/app.scss', 'public/css'); | ||
</syntaxhighlight>كما بالنسبة للتابع | </syntaxhighlight>كما بالنسبة للتابع <code>Less</code>، يمكن استعمال النداءات المتعددة لترجمة ملفات [[Sass]] عديدة دفعة واحدة لملفات [[CSS]] وتغيير مكان الملفات الناتجة<syntaxhighlight lang="php"> | ||
mix.sass('resources/assets/sass/app.sass', 'public/css') | mix.sass('resources/assets/sass/app.sass', 'public/css') | ||
.sass('resources/assets/sass/admin.sass', 'public/css/admin'); | .sass('resources/assets/sass/admin.sass', 'public/css/admin'); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Stylus === | === <code>Stylus</code> === | ||
بطريقة مشابهة لنظيراتها Less و | بطريقة مشابهة لنظيراتها <code>Less</code> و <code>Sass</code>، تسمح الدالة <code>Stylus</code> بترجمة [[ٍStylus]] إلى [[CSS]]:<syntaxhighlight lang="php"> | ||
mix.stylus('resources/assets/stylus/app.styl', 'public/css'); | mix.stylus('resources/assets/stylus/app.styl', 'public/css'); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
يمكن أيضا تثبيت إضافات Stylus مثل [https://github.com/jescalan/rupture Rupture]. أولا ثبت الإضافة عبر npm:<syntaxhighlight lang="php"> | يمكن أيضا تثبيت إضافات <code>Stylus</code> مثل [https://github.com/jescalan/rupture Rupture]. أولا ثبت الإضافة عبر [[npm]]:<syntaxhighlight lang="php"> | ||
npm install rupture | npm install rupture | ||
</syntaxhighlight> | </syntaxhighlight> | ||
ثمّ ضمِّن الإضافة باستعمال ()mix.stylus:<syntaxhighlight lang="php"> | ثمّ ضمِّن الإضافة باستعمال <code>()mix.stylus</code>:<syntaxhighlight lang="php"> | ||
mix.stylus('resources/assets/stylus/app.styl', 'public/css', { | mix.stylus('resources/assets/stylus/app.styl', 'public/css', { | ||
سطر 90: | سطر 88: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== PostCSS === | === PostCSS === | ||
PostCSS هي أداة قوية لتحويل | PostCSS هي أداة قوية لتحويل [[CSS]]، وهي مضَمّنَة في Laravel Mix. في العادة، يستعمل Mix الإضافة [https://github.com/postcss/autoprefixer Autoprefixer] ليعطي تلقائيًا السابقات الضرورية لخاصيات [[CSS|CSS3]]. لكن لك الحرية لاختيار أي إضافات يحتاج لها التطبيق. ثبت أولًا الإضافة عبر <code>npm</code> ثمّ أشر إليها في الملف <code>webpack.mix.js</code><syntaxhighlight lang="php"> | ||
mix.sass('resources/assets/sass/app.scss', 'public/css') | mix.sass('resources/assets/sass/app.scss', 'public/css') | ||
سطر 100: | سطر 98: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== شيفرات CSS العادية === | === شيفرات CSS العادية === | ||
إن أردت دمج عدّة ملفات CSS عادية في ملف واحد، فيمكنك استعمال التابع style:<syntaxhighlight lang="php"> | إن أردت دمج عدّة ملفات [[CSS]] عادية في ملف واحد، فيمكنك استعمال التابع <code>style</code>:<syntaxhighlight lang="php"> | ||
mix.styles([ | mix.styles([ | ||
سطر 110: | سطر 108: | ||
=== معالجة مسارات العناوين URL === | === معالجة مسارات العناوين URL === | ||
لأن Laravel Mix مبني فوق | لأن Laravel Mix مبني فوق [[Webpack]]، من المهم فهم بعض مفاهيم [[Webpack]]. بالنسبة لترجمة [[CSS]]، سيعيد [[Webpack]] كتابة وتحسين أي نداء لعنوان <code>()url</code> في النمط. في حين قد يبدو هذا غريبًا، إلّا أنها خاصية قوية ومفيدة. تخيّل أنك تريد ترجمة [[Sass]] يحتوي مسارًا نسبيًا لصورة:<syntaxhighlight lang="php"> | ||
example { | example { | ||
سطر 118: | سطر 116: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
لن تتم إعادة كتابة المسارات المطلقة. مثلا url('/images/thing.png') و url('<nowiki>http://example.com/images/thing.png')</nowiki> لن تتم إعادة كتابتها. | لن تتم إعادة كتابة المسارات المطلقة. مثلا <code>url('/images/thing.png')</code> و <code>url('<nowiki>http://example.com/images/thing.png')</nowiki></code> لن تتم إعادة كتابتها. | ||
افتراضيا، سيجد كل من Laravel Mix و Webpack الملف example. | افتراضيا، سيجد كل من Laravel Mix و [[Webpack]] الملف <code>example.png</code>، يصنعان نسخة في مجلد <code>public/images</code>، ثمّ يعيدان كتابة <code>()url</code> في صفحة الأنماط الناتجة. فتبدو شيفرة [[CSS]] المترجَمة كالآتي:<syntaxhighlight lang="php"> | ||
example { | example { | ||
سطر 128: | سطر 126: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
على الرغم من أن هذه الخاصية مفيدة جدا، في بعض الأحيان تكون ٌقد ضبطت هيكلة الملفات بالطريقة التي تريد و ترغب في تعطيل إعادة كتابة عناوين url():<syntaxhighlight lang="php"> | على الرغم من أن هذه الخاصية مفيدة جدا، في بعض الأحيان تكون ٌقد ضبطت هيكلة الملفات بالطريقة التي تريد و ترغب في تعطيل إعادة كتابة عناوين <code>url()</code>:<syntaxhighlight lang="php"> | ||
mix.sass('resources/assets/app/app.scss', 'public/css') | mix.sass('resources/assets/app/app.scss', 'public/css') | ||
سطر 136: | سطر 134: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
بإضافة هذا إلى webpack.mix. | بإضافة هذا إلى <code>webpack.mix.js</code>، سيتوقّف Mix عن إعادة كتابة العناوين أو نسخ الأصول إلى الملف <code>public</code>. يعني أنّ شيفرة [[CSS]] المترجمة ستكون كما كتبته في البداية:<syntaxhighlight lang="php"> | ||
example { | example { | ||
سطر 144: | سطر 142: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== خرائط المصادر (Source Maps) === | === خرائط المصادر (Source Maps) === | ||
بالرغم من أنّها معطّلة عند البداية، إلّا أن خرائط المصادر يمكن أن تَشغّل عبر نداء التابع mix.sourceMaps() في webpack.mix.js. وبالرغم من التكلفة العالية على الترجمة وعلى الأداء في التطبيق، إلّا أنّها توفّر معلومات إضافية للتنقيح في أدوات المطور في المتصفح عند ترجمة الأصول:<syntaxhighlight lang="php"> | بالرغم من أنّها معطّلة عند البداية، إلّا أن خرائط المصادر يمكن أن تَشغّل عبر نداء التابع <code>mix.sourceMaps()</code> في <code>webpack.mix.js</code>. وبالرغم من التكلفة العالية على الترجمة وعلى الأداء في التطبيق، إلّا أنّها توفّر معلومات إضافية للتنقيح في أدوات المطور في المتصفح عند ترجمة الأصول:<syntaxhighlight lang="php"> | ||
mix.js('resources/assets/js/app.js', 'public/js') | mix.js('resources/assets/js/app.js', 'public/js') | ||
سطر 150: | سطر 148: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== التعامل مع شيفرات JavaScript == | == التعامل مع شيفرات JavaScript == | ||
وفّر Mix العديد من الخصائص للمساعدة للتعامل مع شيفرات | وفّر Mix العديد من الخصائص للمساعدة للتعامل مع شيفرات [[JavaScript]]، مثل ترجمة ECMAScript 2015، وتجميع الوحدات، والتصغير، ودمج ملفات [[JavaScript]] العادية. و كل هذا يعمل دون الحاجة لإعادة ضبط أي شيء:<syntaxhighlight lang="php"> | ||
mix.js('resources/assets/js/app.js', 'public/js'); | mix.js('resources/assets/js/app.js', 'public/js'); | ||
</syntaxhighlight>بهذا السطر الوحيد تحصل على الميزات التالية: | |||
بهذا السطر الوحيد تحصل على الميزات التالية: | |||
* نصوص ES2015 | * نصوص ES2015 | ||
* الوحدات | * الوحدات | ||
* ترجمة ملفات | * ترجمة ملفات | ||
* | * vue | ||
* التصغير (minification) للبيئات الإنتاجية | * التصغير (minification) للبيئات الإنتاجية | ||
=== استخراج Vendor === | === استخراج Vendor === | ||
الشيء السيء الوحيد الذي يمكن أن يحصل من تجميع شيفرات JavaScript الخاصة بالتطبيق مع المكتبات هي إن كنت تنوي تحديث شيفرة JavaScript باستمرار، يجب أن تفكر في استخراج مكتبات | الشيء السيء الوحيد الذي يمكن أن يحصل من تجميع شيفرات [[JavaScript]] الخاصة بالتطبيق مع المكتبات هي إن كنت تنوي تحديث شيفرة [[JavaScript]] باستمرار، يجب أن تفكر في استخراج مكتبات Vendor التي يوفّرها Vendor هي جعل التخزين المؤقت لفترات طويلة أكثر صعوبة. مثلا، أي تحديث لكود التطبيق سيجبر المتصفح على إعادة تحميل كل مكتبات Vendor حتى إن لم تُغيَّر. | ||
إن كنت تنوي إدخال تحديثات كثيرة لشيفرة JavaScript من التطبيق، فيجب أن تُفكر في استخراج مكتبات Vendor في ملفات خاصة لها. بهذه الطريقة، تغيير كود التطبيق لن يؤثر على ملف vendor.js الكبير. التابع extract يُستعمل لتسهيل ذلك:<syntaxhighlight lang="php"> | إن كنت تنوي إدخال تحديثات كثيرة لشيفرة [[JavaScript]] من التطبيق، فيجب أن تُفكر في استخراج مكتبات Vendor في ملفات خاصة لها. بهذه الطريقة، تغيير كود التطبيق لن يؤثر على ملف vendor.js الكبير. التابع extract يُستعمل لتسهيل ذلك:<syntaxhighlight lang="php"> | ||
mix.js('resources/assets/js/app.js', 'public/js') | mix.js('resources/assets/js/app.js', 'public/js') | ||
سطر 170: | سطر 166: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
التابع extract يقبل مصفوفة من المكتبات أو الوحدات التي تريد استخراجها في الملف vendor.js. باستعمال الشيفرة أعلاه، يصنع التطبيق الملفات التالية: | التابع <code>extract</code> يقبل مصفوفة من المكتبات أو الوحدات التي تريد استخراجها في الملف <code>vendor.js</code>. باستعمال الشيفرة أعلاه، يصنع التطبيق الملفات التالية: | ||
* public/js/manifest.js : بيئة تشغيل Webpack | * <code>public/js/manifest.js</code> : بيئة تشغيل Webpack | ||
* public/js/vendor.js : مكتبات Vendor | * <code>public/js/vendor.js</code> : مكتبات Vendor | ||
* public/js/app.js : شيفرة التطبيق | * <code>public/js/app.js</code> : شيفرة التطبيق | ||
لتفادي الأخطاء في | لتفادي الأخطاء في [[JavaScript]]، تأكد من تحميل الملفات بالترتيب الصحيح<syntaxhighlight lang="html"> | ||
<script src="/js/manifest.js"></script> | <script src="/js/manifest.js"></script> | ||
<script src="/js/vendor.js"></script> | <script src="/js/vendor.js"></script> | ||
سطر 182: | سطر 178: | ||
=== React === | === React === | ||
يمكن ل Mix أن يثبت إضافات Babel الضرورية لتشغيل React. وذلك بتعويض mix.js() إلى mix.react()<syntaxhighlight lang="php"> | يمكن ل Mix أن يثبت إضافات <code>Babel</code> الضرورية لتشغيل [[React]]. وذلك بتعويض <code>mix.js()</code> إلى <code>mix.react()</code><syntaxhighlight lang="php"> | ||
mix.react('resources/assets/js/app.jsx', 'public/js'); | mix.react('resources/assets/js/app.jsx', 'public/js'); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
خلف الستار، سيُنزّل Mix الإضافة الضرورية babel-preset-react. | خلف الستار، سيُنزّل Mix الإضافة الضرورية <code>babel-preset-react</code>. | ||
=== شيفرة JavaScript الخام (Vanilla JS) === | === شيفرة JavaScript الخام (Vanilla JS) === | ||
مثلما يمكنك دمج عدة أنماط ب ()mix. | مثلما يمكنك دمج عدة أنماط ب <code>()mix.styles</code>، يمكنك أيضا دمج و تصغير عدة سكربتات [[JavaScript]] باستعمال الدالة <code>scripts()</code>: | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
mix.scripts([ | mix.scripts([ | ||
سطر 200: | سطر 196: | ||
هذا الخيار مفيد خاصة في التطبيقات القديمة التي لا تحتاج لترجمة Webpack لشيفرات JavaScript. | هذا الخيار مفيد خاصة في التطبيقات القديمة التي لا تحتاج لترجمة Webpack لشيفرات JavaScript. | ||
ملاحظة: تغيير بسيط عن mix.scripts() هو mix.babel(). هذا التابع يعمل بطريقة مشابهة للتابع scripts لكن الملف سيحمل ترجمة Babel التي تحول أي شيفرة ES2015 إلى شيفرة JavaScript عادية تفهمها كل المتصفحات. | ملاحظة: تغيير بسيط عن <code>mix.scripts()</code> هو <code>mix.babel()</code>. هذا التابع يعمل بطريقة مشابهة للتابع <code>scripts</code> لكن الملف سيحمل ترجمة Babel التي تحول أي شيفرة ES2015 إلى شيفرة JavaScript عادية تفهمها كل المتصفحات. | ||
=== ضبط Webpack خاص === | === ضبط Webpack خاص === | ||
افتراضيا، يستعمل Laravel Mix ملف الضبط المسبق webpack.config.js لبدء العمل دون تأخير. قد تحتاج لإعادة الضبط يدويًا في بعض الأحيان. قد يكون لديك محمّل خاص أو إضافة يجب أن تذكر أو قد تريد استعمال stylus بدل Sass. في هذه الحالة لديك خياران: | افتراضيا، يستعمل Laravel Mix ملف الضبط المسبق <code>webpack.config.js</code> لبدء العمل دون تأخير. قد تحتاج لإعادة الضبط يدويًا في بعض الأحيان. قد يكون لديك محمّل خاص أو إضافة يجب أن تذكر أو قد تريد استعمال <code>stylus</code> بدل [[Sass|<code>Sass</code>]]. في هذه الحالة لديك خياران: | ||
==== دمج ضبوطات خاصة ==== | ==== دمج ضبوطات خاصة ==== | ||
يوفّر Mix تابعًا مفيدًا لهذا هو webpackConfig الذي يسمح بدمج أي ضبط Webpack إضافي. قد يكون هذا الخيار جذّابًا إذ لا يتطلب إعادة كتابة الملف webpack.config.js. يقبل التابع webpackConfig كائنًا (object) على أن يتضمن ضبط Webpack خاص الذي تريد تنفيذه.<syntaxhighlight lang="php"> | يوفّر Mix تابعًا مفيدًا لهذا هو <code>webpackConfig</code> الذي يسمح بدمج أي ضبط [[Webpack]] إضافي. قد يكون هذا الخيار جذّابًا إذ لا يتطلب إعادة كتابة الملف <code>webpack.config.js</code>. يقبل التابع <code>webpackConfig</code> كائنًا (object) على أن يتضمن ضبط Webpack خاص الذي تريد تنفيذه.<syntaxhighlight lang="php"> | ||
mix.webpackConfig({ | mix.webpackConfig({ | ||
سطر 219: | سطر 215: | ||
==== ملفات ضبط خاصة ==== | ==== ملفات ضبط خاصة ==== | ||
إن أردت تخصيصًا كليًا لملف الضبط، انقل نسخة من الملف node_modules/laravel-mix/setup/webpack.config.js للمجلد الجذر للتطبيق، ثمّ وجّه كل الإشارات إلى config-- في package.json نحو الملف المنسوخ حديثا. إن اخترت هذه الطريقة في الضبط، كل التحديثات اللاحقة للملف webpack.config.js يجب أن تنقل يدويا للملف الجديد | إن أردت تخصيصًا كليًا لملف الضبط، انقل نسخة من الملف <code>node_modules/laravel-mix/setup/webpack.config.js</code> للمجلد الجذر للتطبيق، ثمّ وجّه كل الإشارات إلى <code>config--</code> في <code>package.json</code> نحو الملف المنسوخ حديثا. إن اخترت هذه الطريقة في الضبط، كل التحديثات اللاحقة للملف <code>webpack.config.js</code> يجب أن تنقل يدويا للملف الجديد | ||
== نسخ الملفات والمجلّدات == | == نسخ الملفات والمجلّدات == | ||
يُستخدم التابع copy لنسخ ملف أو مجلّد إلى مكان جديد. يكون هذا مفيدًا حين تحتاج إحدى الأصول من المجلّد node_modules لأن تُنقل نحو المجلد public.<syntaxhighlight lang="php"> | يُستخدم التابع <code>copy</code> لنسخ ملف أو مجلّد إلى مكان جديد. يكون هذا مفيدًا حين تحتاج إحدى الأصول من المجلّد <code>node_modules</code> لأن تُنقل نحو المجلد <code>public</code>.<syntaxhighlight lang="php"> | ||
mix.copy('node_modules/foo/bar.css', 'public/css/bar.css'); | mix.copy('node_modules/foo/bar.css', 'public/css/bar.css'); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
حين نقل مجلد ستضر الدالة copy بمحتواه (إذ ستُسطِّح بنية المجلد) لذا يُفضّل استخدام التابع copyDirectory عوضًا عنها:<syntaxhighlight lang="php"> | حين نقل مجلد ستضر الدالة <code>copy</code> بمحتواه (إذ ستُسطِّح بنية المجلد) لذا يُفضّل استخدام التابع <code>copyDirectory</code> عوضًا عنها:<syntaxhighlight lang="php"> | ||
mix.copyDirectory('assets/img', 'public/img'); | mix.copyDirectory('assets/img', 'public/img'); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== أرقام الإصدارات والذاكرة التخزينية المؤقتة == | == أرقام الإصدارات والذاكرة التخزينية المؤقتة == | ||
يضيف بعض المبرمجين إلى الأصول المترجمة بصمةً زمنيةً أو رقمًا خاصًّا لإرغام المتصفح على تحميل الملف الجديد بدلا عن نسخ قديمة. يتعامل Mix مع هذا باستعمال التابع version. | يضيف بعض المبرمجين إلى الأصول المترجمة بصمةً زمنيةً أو رقمًا خاصًّا لإرغام المتصفح على تحميل الملف الجديد بدلا عن نسخ قديمة. يتعامل Mix مع هذا باستعمال التابع <code>version</code>. | ||
يضيف التابع version تلقائيّا رقمًا خاصًا لكل أسماء الملفات المترجمة. ممّا يسمح باستخدام أكثر راحة لذاكرة التخزين المؤقتة.<syntaxhighlight lang="php"> | يضيف التابع <code>version</code> تلقائيّا رقمًا خاصًا لكل أسماء الملفات المترجمة. ممّا يسمح باستخدام أكثر راحة لذاكرة التخزين المؤقتة.<syntaxhighlight lang="php"> | ||
mix.js('resources/assets/js/app.js', 'public/js') | mix.js('resources/assets/js/app.js', 'public/js') | ||
.version(); | .version(); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
بعد إنشاء الإصدار الجديد للملف، لن تعرف الاسم الدقيق للملف لذا يجب عليك أن تستعمل الدالة mix في واجهتك لتحميل الأصل الصحيح. تعرف الدالة mix تلقائيّا الاسم الصحيح ورقم الإصدار للأصل المطلوب:<syntaxhighlight lang="php"> | بعد إنشاء الإصدار الجديد للملف، لن تعرف الاسم الدقيق للملف لذا يجب عليك أن تستعمل الدالة <code>mix</code> في واجهتك لتحميل الأصل الصحيح. تعرف الدالة <code>mix</code> تلقائيّا الاسم الصحيح ورقم الإصدار للأصل المطلوب:<syntaxhighlight lang="php"> | ||
<link rel="stylesheet" href="{{ mix('/css/app.css') }}"> | <link rel="stylesheet" href="{{ mix('/css/app.css') }}"> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
لأن الملفات المرفقة برقم إصدار في العادة غير مفيدة في بيئة التطوير، يمكن أن تقوم بتعيين الإصدارات فقط في بيئة الإنتاج npm run production<syntaxhighlight lang="php"> | لأن الملفات المرفقة برقم إصدار في العادة غير مفيدة في بيئة التطوير، يمكن أن تقوم بتعيين الإصدارات فقط في بيئة الإنتاج <code>npm run production</code><syntaxhighlight lang="php"> | ||
mix.js('resources/assets/js/app.js', 'public/js'); | mix.js('resources/assets/js/app.js', 'public/js'); | ||
سطر 251: | سطر 247: | ||
== إعادة التحميل Browsersync == | == إعادة التحميل Browsersync == | ||
يستطيع browsersync مراقبة تغيّر الملفات تلقائيّا، ثمّ يضيف التغييرات للمتصفح دون الحاجة لإعادة تحميل المتصفح يدويًا. يمكن تفعيل هذه الخاصّية بنداء التابع mix.browsersync():<syntaxhighlight lang="php"> | يستطيع browsersync مراقبة تغيّر الملفات تلقائيّا، ثمّ يضيف التغييرات للمتصفح دون الحاجة لإعادة تحميل المتصفح يدويًا. يمكن تفعيل هذه الخاصّية بنداء التابع <code>mix.browsersync(</code>):<syntaxhighlight lang="php"> | ||
mix.browserSync('my-domain.test'); | mix.browserSync('my-domain.test'); | ||
// أو | // أو | ||
// https://browsersync.io/docs/options mix.browserSync(){ | |||
// https://browsersync.io/docs/options mix.browserSync({ | |||
proxy: 'my-domain.test' | proxy: 'my-domain.test' | ||
سطر 263: | سطر 258: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
يمكن تمرير إمّا سلسلة نصية (proxy) أو كائن (إعدادات browsersync) للتابع ثمّ تشغيل خادم تطوير webpack عبر الأمر npm run watch. الآن عند تغيير سكربت أو ملف PHP راقب إذ سيعيد المتصفح التحميل وحده ليعكس التغيرات الحاصلة. | يمكن تمرير إمّا سلسلة نصية (proxy) أو كائن (إعدادات browsersync) للتابع ثمّ تشغيل خادم تطوير webpack عبر الأمر <code>npm run watch</code>. الآن عند تغيير سكربت أو ملف PHP راقب إذ سيعيد المتصفح التحميل وحده ليعكس التغيرات الحاصلة. | ||
== متغيرات البيئة == | == متغيرات البيئة == | ||
يمكنك إضافة متغيّرات للبيئة بإضافة البادئة _MIX إلى الملف | يمكنك إضافة متغيّرات للبيئة بإضافة البادئة <code>_MIX</code> إلى الملف:<syntaxhighlight lang="text"> | ||
MIX_SENTRY_DSN_PUBLIC= | MIX_SENTRY_DSN_PUBLIC=http://example.com | ||
بعد تعريف المتغيّر في الملف env.، يمكنك استعماله عبر الكائن process.env. إذا تغيّرت قيمته أثناء تشغيل المهمة watch فيجب إعادة بدء المهمة:<syntaxhighlight lang="php"> | </syntaxhighlight>بعد تعريف المتغيّر في الملف env.، يمكنك استعماله عبر الكائن <code>process.env.</code> إذا تغيّرت قيمته أثناء تشغيل المهمة watch فيجب إعادة بدء المهمة:<syntaxhighlight lang="php"> | ||
process.env.MIX_SENTRY_DSN_PUBLIC | process.env.MIX_SENTRY_DSN_PUBLIC | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== الإشعارات == | == الإشعارات == | ||
عندما تكون متاحة، ستقوم Mix بعرض إشعارات نظام التشغيل ممّا يعطي معلومات آنية على إن تمت الترجمة بنجاح أم لا. لكن قد تكون هناك حالات لا تريد فيها هذه المعلومات كأن لا تريد تفعيل Mix في خادم إنتاجي، في هذه الحالات يمكنك تعطيل الإشعارات عبر التابع disableNotifications:<syntaxhighlight lang="php"> | عندما تكون متاحة، ستقوم Mix بعرض إشعارات نظام التشغيل ممّا يعطي معلومات آنية على إن تمت الترجمة بنجاح أم لا. لكن قد تكون هناك حالات لا تريد فيها هذه المعلومات كأن لا تريد تفعيل Mix في خادم إنتاجي، في هذه الحالات يمكنك تعطيل الإشعارات عبر التابع <code>disableNotifications</code>:<syntaxhighlight lang="php"> | ||
mix.disableNotifications(); | mix.disableNotifications(); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
مصادر | == مصادر == | ||
* [https://laravel.com/docs/5.6/mix صفحة Compiling Assets (Laravel Mix) في توثيق Laravel الرسمي.] | |||
[https://laravel.com/docs/5.6/mix صفحة Compiling Assets (Laravel Mix) في توثيق Laravel الرسمي.] | [[تصنيف:Laravel|{{SUBPAGENAME}}]] | ||
[[تصنيف:Laravel Frontend|{{SUBPAGENAME}}]] |
المراجعة الحالية بتاريخ 13:26، 23 أكتوبر 2018
مقدمة
يوفّر Laravel Mix واجهة برمجية (API) واضحة لتعريف خطوات بناء Webpack
للتطبيق باستعمال العديد من المعالجات المسبقة (pre-processors) للغتي CSS و Javascript. باستخدام سلسلة بسيطة من استدعاءات التوابع، يمكن تعريف مسار معالجة الأصول (assets) في التطبيق. فمثلًا:
mix.js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css');
إن أصبحت مرتبكا و مشوشا حول البدء مع Webpack وترجمة الأصول، فسوف تحب Laravel Mix. لكنك لست مطالبًا باستعمالها لبناء تطبيقك. طبعًا لك حرية اختيار أي مسار لمعالجة الأصول تريده، أو أن لا تستعمل أيًا منها على الإطلاق.
التثبيت والتجهيز
تثبيت Node
قبل البدء باستخدام Mix، يجب أولًا التأكد من أنّ Node.js و npm مثبّتة بطريقة صحيحة
node -v
npm -v
في العادة، يتضمّن Laravel Homestead كل ما تحتاج له. لكن إن لم تكن تستعمل Vagrant، فيمكنك استعمال آخر إصدارات Node.js و npm بسهولة من صفحة تنزيلها.
Laravel Mix
الخطوة الوحيدة المتبقية هي تثبيت Laravel Mix. في تطبيق Laravel جديدة، ستجد الملف package.json
في الملف الرئيسي للتطبيق. يتضمن الملف package.json
كل ما تحتاج له للبداية. يمكنك أن تعدّه مثل composer.json
لكن لاعتماديات Node بدل PHP. يمكنك تثبيت الاعتماديات المذكورة في هذا الملف عبر الأمر:
npm install
تشغيل Mix
Mix هي طبقة ضبط فوق Webpack .لتشغيل مهمّات Mix، يجب فقط تنفيذ أحد سكربتات npm الموجودة في الملف package.json
:
// تشغيل المهام
npm run dev
// تشغيل المهام وتصغير المخرجات
npm run production
مراقبة تغيرات الأصول
سيواصل الأمر npm run watch
العمل في الطرفية ويراقب كل تغيّر في الملفات. سيعيد Webpack تلقائيًا ترجمة الأصول كّلما طرأ تغيير:
npm run watch
قد تلاحظ أن Webpack لا يقوم بالتحديث في بعض البيئات عند تغيّر الملفات. في هذه الحالة يمكن استعمال الأمر:
npm run watch-poll
التعامل مع صفحات الأنماط
الملف webpack.mix.js
هو نقطة البداية لترجمة الأصول. يمكنك عدّه طبقةَ ضبطٍ بسيطةً حول Webpack. يمكن سَلسلة (chain) مهمّات Mix معًا لتحديد كيفية ترجمة الأصول بدقّة.
Less
يمكن استعمال التابع Less لترجمة Less إلى CSS. لنترجم الملف الأولي app.less
إلى الملف public/css/app.css
:
mix.less('resources/assets/less/app.less', 'public/css');
تُستعمل النداءات المتكرّرة للتابع Less
لترجمة أكثر من ملف واحد:
mix.less('resources/assets/less/app.less', 'public/css')
.less('resources/assets/less/admin.less', 'public/css');
لتجاوز ضبط Less المبدئي، فيمكنك تمرير معامل ثالث للتابع ()mix.less
:
mix.less('resources/assets/less/app.less', 'public/css', {
strictMath: true
});
Sass
يسمح التابع Sass
بترجمة Sass إلى CSS. يمكن استعمال التابع كالآتي:
mix.sass('resources/assets/sass/app.scss', 'public/css');
كما بالنسبة للتابع Less
، يمكن استعمال النداءات المتعددة لترجمة ملفات Sass عديدة دفعة واحدة لملفات CSS وتغيير مكان الملفات الناتجة
mix.sass('resources/assets/sass/app.sass', 'public/css')
.sass('resources/assets/sass/admin.sass', 'public/css/admin');
Stylus
بطريقة مشابهة لنظيراتها Less
و Sass
، تسمح الدالة Stylus
بترجمة ٍStylus إلى CSS:
mix.stylus('resources/assets/stylus/app.styl', 'public/css');
يمكن أيضا تثبيت إضافات Stylus
مثل Rupture. أولا ثبت الإضافة عبر npm:
npm install rupture
ثمّ ضمِّن الإضافة باستعمال ()mix.stylus
:
mix.stylus('resources/assets/stylus/app.styl', 'public/css', {
use: [
require('rupture')()
]
});
PostCSS
PostCSS هي أداة قوية لتحويل CSS، وهي مضَمّنَة في Laravel Mix. في العادة، يستعمل Mix الإضافة Autoprefixer ليعطي تلقائيًا السابقات الضرورية لخاصيات CSS3. لكن لك الحرية لاختيار أي إضافات يحتاج لها التطبيق. ثبت أولًا الإضافة عبر npm
ثمّ أشر إليها في الملف webpack.mix.js
mix.sass('resources/assets/sass/app.scss', 'public/css')
.options({
postCss: [
require('postcss-css-variables')()
]
});
شيفرات CSS العادية
إن أردت دمج عدّة ملفات CSS عادية في ملف واحد، فيمكنك استعمال التابع style
:
mix.styles([
'public/css/vendor/normalize.css',
'public/css/vendor/videojs.css'
], 'public/css/all.css');
معالجة مسارات العناوين URL
لأن Laravel Mix مبني فوق Webpack، من المهم فهم بعض مفاهيم Webpack. بالنسبة لترجمة CSS، سيعيد Webpack كتابة وتحسين أي نداء لعنوان ()url
في النمط. في حين قد يبدو هذا غريبًا، إلّا أنها خاصية قوية ومفيدة. تخيّل أنك تريد ترجمة Sass يحتوي مسارًا نسبيًا لصورة:
example {
background: url('../images/example.png');
}
لن تتم إعادة كتابة المسارات المطلقة. مثلا url('/images/thing.png')
و url('http://example.com/images/thing.png')
لن تتم إعادة كتابتها.
افتراضيا، سيجد كل من Laravel Mix و Webpack الملف example.png
، يصنعان نسخة في مجلد public/images
، ثمّ يعيدان كتابة ()url
في صفحة الأنماط الناتجة. فتبدو شيفرة CSS المترجَمة كالآتي:
example {
background: url(/images/example.png?d41d8cd98f00b204e9800998ecf8427e);
}
على الرغم من أن هذه الخاصية مفيدة جدا، في بعض الأحيان تكون ٌقد ضبطت هيكلة الملفات بالطريقة التي تريد و ترغب في تعطيل إعادة كتابة عناوين url()
:
mix.sass('resources/assets/app/app.scss', 'public/css')
.options({
processCssUrls: false
});
بإضافة هذا إلى webpack.mix.js
، سيتوقّف Mix عن إعادة كتابة العناوين أو نسخ الأصول إلى الملف public
. يعني أنّ شيفرة CSS المترجمة ستكون كما كتبته في البداية:
example {
background: url("../images/thing.png");
}
خرائط المصادر (Source Maps)
بالرغم من أنّها معطّلة عند البداية، إلّا أن خرائط المصادر يمكن أن تَشغّل عبر نداء التابع mix.sourceMaps()
في webpack.mix.js
. وبالرغم من التكلفة العالية على الترجمة وعلى الأداء في التطبيق، إلّا أنّها توفّر معلومات إضافية للتنقيح في أدوات المطور في المتصفح عند ترجمة الأصول:
mix.js('resources/assets/js/app.js', 'public/js')
.sourceMaps();
التعامل مع شيفرات JavaScript
وفّر Mix العديد من الخصائص للمساعدة للتعامل مع شيفرات JavaScript، مثل ترجمة ECMAScript 2015، وتجميع الوحدات، والتصغير، ودمج ملفات JavaScript العادية. و كل هذا يعمل دون الحاجة لإعادة ضبط أي شيء:
mix.js('resources/assets/js/app.js', 'public/js');
بهذا السطر الوحيد تحصل على الميزات التالية:
- نصوص ES2015
- الوحدات
- ترجمة ملفات
- vue
- التصغير (minification) للبيئات الإنتاجية
استخراج Vendor
الشيء السيء الوحيد الذي يمكن أن يحصل من تجميع شيفرات JavaScript الخاصة بالتطبيق مع المكتبات هي إن كنت تنوي تحديث شيفرة JavaScript باستمرار، يجب أن تفكر في استخراج مكتبات Vendor التي يوفّرها Vendor هي جعل التخزين المؤقت لفترات طويلة أكثر صعوبة. مثلا، أي تحديث لكود التطبيق سيجبر المتصفح على إعادة تحميل كل مكتبات Vendor حتى إن لم تُغيَّر.
إن كنت تنوي إدخال تحديثات كثيرة لشيفرة JavaScript من التطبيق، فيجب أن تُفكر في استخراج مكتبات Vendor في ملفات خاصة لها. بهذه الطريقة، تغيير كود التطبيق لن يؤثر على ملف vendor.js الكبير. التابع extract يُستعمل لتسهيل ذلك:
mix.js('resources/assets/js/app.js', 'public/js')
.extract(['vue'])
التابع extract
يقبل مصفوفة من المكتبات أو الوحدات التي تريد استخراجها في الملف vendor.js
. باستعمال الشيفرة أعلاه، يصنع التطبيق الملفات التالية:
public/js/manifest.js
: بيئة تشغيل Webpackpublic/js/vendor.js
: مكتبات Vendorpublic/js/app.js
: شيفرة التطبيق
لتفادي الأخطاء في JavaScript، تأكد من تحميل الملفات بالترتيب الصحيح
<script src="/js/manifest.js"></script>
<script src="/js/vendor.js"></script>
<script src="/js/app.js"></script>
React
يمكن ل Mix أن يثبت إضافات Babel
الضرورية لتشغيل React. وذلك بتعويض mix.js()
إلى mix.react()
mix.react('resources/assets/js/app.jsx', 'public/js');
خلف الستار، سيُنزّل Mix الإضافة الضرورية babel-preset-react
.
شيفرة JavaScript الخام (Vanilla JS)
مثلما يمكنك دمج عدة أنماط ب ()mix.styles
، يمكنك أيضا دمج و تصغير عدة سكربتات JavaScript باستعمال الدالة scripts()
:
mix.scripts([
'public/js/admin.js',
'public/js/dashboard.js'
], 'public/js/all.js');
هذا الخيار مفيد خاصة في التطبيقات القديمة التي لا تحتاج لترجمة Webpack لشيفرات JavaScript.
ملاحظة: تغيير بسيط عن mix.scripts()
هو mix.babel()
. هذا التابع يعمل بطريقة مشابهة للتابع scripts
لكن الملف سيحمل ترجمة Babel التي تحول أي شيفرة ES2015 إلى شيفرة JavaScript عادية تفهمها كل المتصفحات.
ضبط Webpack خاص
افتراضيا، يستعمل Laravel Mix ملف الضبط المسبق webpack.config.js
لبدء العمل دون تأخير. قد تحتاج لإعادة الضبط يدويًا في بعض الأحيان. قد يكون لديك محمّل خاص أو إضافة يجب أن تذكر أو قد تريد استعمال stylus
بدل Sass
. في هذه الحالة لديك خياران:
دمج ضبوطات خاصة
يوفّر Mix تابعًا مفيدًا لهذا هو webpackConfig
الذي يسمح بدمج أي ضبط Webpack إضافي. قد يكون هذا الخيار جذّابًا إذ لا يتطلب إعادة كتابة الملف webpack.config.js
. يقبل التابع webpackConfig
كائنًا (object) على أن يتضمن ضبط Webpack خاص الذي تريد تنفيذه.
mix.webpackConfig({
resolve: {
modules: [
path.resolve(__dirname, 'vendor/laravel/spark/resources/assets/js')
]
}
});
ملفات ضبط خاصة
إن أردت تخصيصًا كليًا لملف الضبط، انقل نسخة من الملف node_modules/laravel-mix/setup/webpack.config.js
للمجلد الجذر للتطبيق، ثمّ وجّه كل الإشارات إلى config--
في package.json
نحو الملف المنسوخ حديثا. إن اخترت هذه الطريقة في الضبط، كل التحديثات اللاحقة للملف webpack.config.js
يجب أن تنقل يدويا للملف الجديد
نسخ الملفات والمجلّدات
يُستخدم التابع copy
لنسخ ملف أو مجلّد إلى مكان جديد. يكون هذا مفيدًا حين تحتاج إحدى الأصول من المجلّد node_modules
لأن تُنقل نحو المجلد public
.
mix.copy('node_modules/foo/bar.css', 'public/css/bar.css');
حين نقل مجلد ستضر الدالة copy
بمحتواه (إذ ستُسطِّح بنية المجلد) لذا يُفضّل استخدام التابع copyDirectory
عوضًا عنها:
mix.copyDirectory('assets/img', 'public/img');
أرقام الإصدارات والذاكرة التخزينية المؤقتة
يضيف بعض المبرمجين إلى الأصول المترجمة بصمةً زمنيةً أو رقمًا خاصًّا لإرغام المتصفح على تحميل الملف الجديد بدلا عن نسخ قديمة. يتعامل Mix مع هذا باستعمال التابع version
.
يضيف التابع version
تلقائيّا رقمًا خاصًا لكل أسماء الملفات المترجمة. ممّا يسمح باستخدام أكثر راحة لذاكرة التخزين المؤقتة.
mix.js('resources/assets/js/app.js', 'public/js')
.version();
بعد إنشاء الإصدار الجديد للملف، لن تعرف الاسم الدقيق للملف لذا يجب عليك أن تستعمل الدالة mix
في واجهتك لتحميل الأصل الصحيح. تعرف الدالة mix
تلقائيّا الاسم الصحيح ورقم الإصدار للأصل المطلوب:
<link rel="stylesheet" href="{{ mix('/css/app.css') }}">
لأن الملفات المرفقة برقم إصدار في العادة غير مفيدة في بيئة التطوير، يمكن أن تقوم بتعيين الإصدارات فقط في بيئة الإنتاج npm run production
mix.js('resources/assets/js/app.js', 'public/js');
if (mix.inProduction()) {
mix.version();
}
إعادة التحميل Browsersync
يستطيع browsersync مراقبة تغيّر الملفات تلقائيّا، ثمّ يضيف التغييرات للمتصفح دون الحاجة لإعادة تحميل المتصفح يدويًا. يمكن تفعيل هذه الخاصّية بنداء التابع mix.browsersync(
):
mix.browserSync('my-domain.test');
// أو
// https://browsersync.io/docs/options mix.browserSync(){
proxy: 'my-domain.test'
});
يمكن تمرير إمّا سلسلة نصية (proxy) أو كائن (إعدادات browsersync) للتابع ثمّ تشغيل خادم تطوير webpack عبر الأمر npm run watch
. الآن عند تغيير سكربت أو ملف PHP راقب إذ سيعيد المتصفح التحميل وحده ليعكس التغيرات الحاصلة.
متغيرات البيئة
يمكنك إضافة متغيّرات للبيئة بإضافة البادئة _MIX
إلى الملف:
MIX_SENTRY_DSN_PUBLIC=http://example.com
بعد تعريف المتغيّر في الملف env.، يمكنك استعماله عبر الكائن process.env.
إذا تغيّرت قيمته أثناء تشغيل المهمة watch فيجب إعادة بدء المهمة:
process.env.MIX_SENTRY_DSN_PUBLIC
الإشعارات
عندما تكون متاحة، ستقوم Mix بعرض إشعارات نظام التشغيل ممّا يعطي معلومات آنية على إن تمت الترجمة بنجاح أم لا. لكن قد تكون هناك حالات لا تريد فيها هذه المعلومات كأن لا تريد تفعيل Mix في خادم إنتاجي، في هذه الحالات يمكنك تعطيل الإشعارات عبر التابع disableNotifications
:
mix.disableNotifications();