هل هناك طريقة لإجبار Yii2 على إعادة تحميل أصول الوحدة عند كل طلب؟

StackOverflow https://stackoverflow.com//questions/25054806

  •  21-12-2019
  •  | 
  •  

سؤال

موقع الويب الخاص بي مقسم إلى وحدات منفصلة.تحتوي كل وحدة على ملفات CSS أو JS الخاصة بها.
يقوم مدير الأصول الخاص بـ Yii بإنشاء مجلد عندما أفتح لأول مرة صفحة تستخدم الأصول الخاصة بي.

لسوء الحظ، إذا قمت بتغيير شيء ما في ملفاتي، فلن يقوم Yii 1.x بإعادة تحميل ملفات CSS أو JS الخاصة بي.

لا بد لي من حذف مجلد الويب/الأصول يدويًا.إنه أمر مزعج حقًا عند تطوير التطبيق.

يعمل هذا عندما أقوم بإضافة وحدة نمطية إلى مجلد الواجهة الخلفية، ولكن ليس عندما أقوم بإنشاء وحدة نمطية في مجلد البائع بمساحة الاسم الخاصة بي.

هل كانت مفيدة؟

المحلول

وفيما يتعلق Yii1.x مع assetManager يمكنك القيام بذلك عن طريق تعيين سمة "forceCopy" على "صحيح" في ملف التكوين الخاص بك

...انسخ ملفات الأصول والأدلة حتى لو تم نشرها بالفعل من قبل.يتم استخدام هذه الخاصية فقط خلال مرحلة التطوير

راجع وثائق forceCopy هنا لمزيد من المعلومات.

بدلا من ذلك يمكنك استخدام linkAssets والتي لن تقوم بنسخ الملفات ولكنها ستنشئ رابطًا ناعمًا بين ملفات الأصول الخاصة بك ودليل الأصول الخاص بك.لا يمكنك بالطبع استخدام كليهما.

بالنسبة للجزء الثاني من السؤال، أفترض أن هذا موجود في Yii 2.x، ومن المفترض أن تستخدم AssetBundles، ويمكنك تسجيل أي حزمة مساحة اسم من أي مكان، ما عليك سوى تسجيلها في العرض باستخدام بعض مثل هذا

use vendor\myVendorName\myPackageName\assets\AppAsset;
AppAsset::register($this);

نصائح أخرى

في yii2 يمكنك إلحاق الطابع الزمني لأغراض عناوين URL من الأصول مثل هذا ...

giveacodicetagpre.

لن يجبر هذا الأصول على إعادة تحميل كل طلب ولكن كلما تم تغيير ملف الأصول الخاص بك سيتغير عنوان URL بسبب الطابع الزمني الذي سيجبر الأصول التي سيتم إعادة نشرها.

يمكنك ضبط forceCopy = true.

class Assets extends AssetBundle{

    public function init()
    {
        parent::init();
        $this->publishOptions['forceCopy'] = true;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top