Чи не даємо бандл зіпсувати вам життя, savepearlharbor


Нещодавно зіткнувся з проблемою конфлікту бандлів в MVC проект, траплялося так, що деякі скрипти виявлялися по кілька разів підключеними в різних бандл. Вичленення якогось зайвого скрипта з одного з них може привести до серйозної головного болю, адже один і той же бандл може використовуватися на різних лейаутах.

Я бачив різні способи угруповання скриптів, але, чесно кажучи, жоден з них мені до кінця не подобався. Як все-таки групувати скрипти так, щоб було найскладніше в них заплутатися і не доводилося б морочитися з приводу конфліктів різних бандлів на одній сторінці? Для себе я придумав підхід, який, на мій погляд, спростить життя. Дуже буду радий здорової критики і корисних порад.

Почнемо з того, що спробуємо проаналізувати парочку підходів для угруповання скриптів:
Перший підхід - об'єднання в групи за загальним призначенням скриптів.

Досить просто і проблем бути не повинно, але цього підходу недостатньо. Кастомниє скрипти теж якось потрібно згрупувати. Тут і виникає другий підхід - об'єднання скриптів в якийсь базовий бандл.

І тут же виникає питання що сюди включати. Jquery начебто базовий скрипт, але для нього у нас вже є окремий бандл. Така ж історія може трапитися і з будь-яким іншим скриптом, який один з розробників у великій команді вважатиме, що його потрібно туди включити. Таким чином чим більше думок - тим більше несподіваних проблем з угрупованням скриптів.

Я для себе вибрав наступний шлях:
1. На кожен лейаута - 1 бандл.
Називаю бандл таким же ім'ям, як і сам лейаута і вирішую головний біль з тим, що підключати, куди підключати і скільки підключати.

2. бандл підключаються тільки на лейаута.
У підсумку: скільки лейаута - стільки і однойменних бандлів.

Якщо тут у вас виникла буря обурення, то попрідержіте їх до кінця шляху, коли складеться цілісна картина.

3. Вводимо поняття груп, яке буде просто масивом рядків.
До групи об'єднуємо всі необхідні скрипти для якогось конкретного функціоналу. Ось приклад групи скриптів для рендеринга звітів з графіками на svg полотнах:

Припустимо, що в цьому ж лейаута вам необхідна клієнтська валідація, додаємо групу для валідації:

Зверніть увагу на наявність jquery-.js в обох групах, але це нам не заважає додати обидві групи в один і той же бандл. Він сам подбає про те, щоб зробити Дистинктив.

4. Мені також знадобилося виключити скрипт з групи, щоб не створювати нову.
Наприклад, скрипт, який показує сторінку поступово її разблюрівая. Він знаходиться в групі baseScriptGroup. Мені він абсолютно не потрібен на лейаута для підготовки всякого добра до друку або конвертації в pdf і т.п.

Напишемо нехитрий метод для виключення скрипта з групи:

А бандл для нього буде виглядати ось так:

От і все. Таким чином можна просто об'єднувати групи в бандл. Захотілося підключити графіки - додав в бандл групу з графіками. Захотів валідацію - додай і її.

Схожі статті