Ответ 1
Структура папок
В терминах функциональности (совместно используемых) и модулей (модульный подход) код разработки или приложения должен представлять собой то, что вы можете встретить в HTML. Простой ctrl + f над вашим решением должен дать все возможные изменения. Из этого опыта на протяжении многих лет я лично предпочитаю его разделять:
- приложение (код приложения)
- классы (многоразовые)
- модули (singleton)
- lib (менеджер пакетов /grunt/ gulp/...)
- jquery (правильные имена библиотек /unminified dist файл или корневой файл)
- кэндо
Имена файлов
Представление того, что что-то делает, и возможность повторного использования его в мгновение ока - это то, что сократит время разработки. Выбор правильных имен имеет значение, поскольку я уверен, что вы знаете. Мои имена файлов всегда начинаются с namespace
, как правило, коротким, за которым следует многоразовый термин "поиск":
- приложение/прототипы
- ns.calendar.js(несколько конфигураций)
- ns.maps.js(комбинации или отдельные приложения)
- ns.places.js(формы или надстройки карты)
- ns.validation.js(несколько форм и общая обработка)
- приложение/синглтоны
- ns.cookiebox.js(одиночная конфигурация)
- ns.socialmedia.js(одна конфигурация)
- ns.dom.js(предоставляет место для коррекции dom, события глобального изменения размера, небольшие виджеты,...)
Чтобы добавить то, что вы назвали общим, это функциональность, которая должна быть глобальной. Отличным примером будет использование библиотеки подчеркивания. Или создайте набор функций (обнаружение устройства, дроссельная заслонка, помощники в целом) самостоятельно для повторного использования во всех проектах = > ns.fn.js Поскольку вы добавляете их только один раз на протяжении всего пространства имен, он также создается как singleton и может быть добавлен в папку модулей или непосредственно в корне приложения.
Как последнее добавление файла загрузчика для запуска вашей точки управления = > ns.load.js в корне приложения. Этот файл содержит одно событие готовности DOM для привязки протоипов и модулей.
Итак, вы можете переосмыслить свою идею разделения на страницы. Поверьте мне, я был там. В какой-то момент вы заметите, насколько функциональность становится слишком большой, чтобы настроить все страницы отдельно и поэтому многократно.
Структура файла
Честно говоря, мне больше нравится Tip 1 of @TxRegex, с небольшим добавлением для связывания пространства имен и передачи его из файла в файл по мере его загрузки.
Основной принцип: IIFE привязан к окну
window.NameSpace = (function($, ns){
'strict'
function private(){}
var x;
ns.SearchTerm = {};
return ns;
}(window.jQuery, window.NameSpace || {}));
Для более примера кода я хотел бы указать github account.
Пакетирование
Попробуйте создать единый связанный и мини файл из lib в приложение, загруженный в head
on async
для выпуска продукции. Используйте разделенные и unminified файлы script на defer
для целей разработки и отладки. Вы должны избегать встроенного script с глобальными зависимостями во всем проекте, если вы это сделаете.
- путь к js/lib/**/*. js (обычно разделенный для сохранения последовательного порядка)
- путь к js/app/ns.load.js
- путь к js/app/ns.fn.js
- путь к js/app/**/*. js (автоматическое обновление пакета)
Выход = > ns.bundle.js = > ns.bundle.min.js
Таким образом, вы избежите проблем с блокировкой блокировки в JavaScript и ускорите процесс загрузки, что, в свою очередь, повысит SEO. Также позволяет сочетать функциональность для мобильных макетов и макетов рабочего стола "на лету" без проблем с памятью или резкого поведения. Очень хорошо зарекомендовал себя и генерирует небольшие накладные расходы при вызове экземпляров из файла загрузчика. Поскольку один пучок будет кэшироваться на всех ваших страницах, все зависит от того, сколько зависимостей или библиотек вы можете вырезать из пакета. Идеально для средних и крупных проектов, где код может быть общим и подключен к различным проектам.
Дополнительная информация об этом в другом сообщении.
Заключение
Во-первых, я делаю все неправильно?
- Совсем нет, ваш модульный подход выглядит нормально...
- Отсутствует глобальное пространство имен, чего трудно избежать, по крайней мере, одним. Вы создаете один для каждого модуля, но лучше всего группировать их под одним пространством имен, чтобы вы могли отличить код библиотеки от кода приложения в объекте окна.
- Kendo, похоже, создает встроенные скрипты? Вы не можете противостоять стороне сервера размещения?
Во-вторых, мой шаблон дизайна подходит для тестовой среды Javascript?
- За исключением экземпляров Kendo, вы можете добавить слой для целей тестирования. Помните, что если jQuery является вашей зависимой линией, вам нужно будет отложить ее загрузку. В противном случае = >
jQuery is undefined
- Исключить зависимости Kendo из пакета, если вы не можете управлять встроенным script. Перейдите к пакетному решению
</body>
.
В-третьих, которые являются обязательными сценариями для JQuery-плагинов?
- модульный подход
- настраиваемый подход для нескольких экземпляров (подсказка: перемещение всех строк из вашей логики, см., как Kendo использует объектные литералы)
- менеджер пакетов, чтобы отделить "мусор" от "золотого"
- grunt/ gulp/... настройка для разделения scss и css из js
- попробуйте выполнить привязку атрибута данных, поэтому после того, как все будет записано, вы настраиваете новые экземпляры через HTML.
Запишите один раз, при необходимости легко адаптируйте и настройте много!