В настоящее время я готовлю оценку подходов модульности JavaScript для моей корпорации. Мы находимся в процессе определения «JavaScript Best Practices» для наших проектов, модульность — один из центральных вопросов.
Из моего исследования на данный момент выявлено два ведущих подхода:
С огромным количеством загрузчиков, плагинов, библиотек и т.д. вокруг них.
Кроме того, есть также goog.provide
/goog.require
из Библиотека закрытия Google.
Есть ли дополнительные подходы для рассмотрения? Какие-либо важные/соответствующие спецификации, которые я пропустил?
Наши требования, кратко:
- Структурируйте код JavaScript в отдельных файлах.
- Загрузите соответствующие модули во время выполнения.
- ... без необходимости включать каждый файл в качестве тега скрипта.
- Не должно быть необходимым для поддержки индекса файлов JavaScript.
- Поддержка агрегации и минимизации — возможность создавать и использовать один минимизированный/оптимизированный файл JavaScript.
- Уметь использовать модули в разных комбинациях — часто бывают разные веб-страницы/клиенты, которым нужны разные наборы модулей.
- Сопроводительная документация (с JSDoc?).
- Подходит для тестирования.
- Подходит для Интернета, кроссбраузерный.
- Разумная поддержка IDE.
Потенциально:
- Согласовано с модулями ES6.
- Подходит для Node.js и мобильных платформ (например, PhoneGap/Cordova).
Новые предложения из ответов:
- ecmascript-harmony плюс дополнительный компилятор.
- angularjs (см. примечание ниже).
- extjs (см. примечание ниже).
Боковые примечания:
- Вопрос не в том, какой подход лучше.
- Я не прошу конкретных библиотек и инструментов, а скорее подходов и спецификаций.
- Я специально не прошу сторонний ресурс. (Если для этого нет тега SO, нам, вероятно, нецелесообразно его рассматривать.)
- Примечание о таких платформах, как angualjs или extjs. Это не совсем подходит в рамках этого вопроса. Если проекту нужен фреймворк (будь то AngularJS или ExtJS), то вопрос модульности обычно не возникает, поскольку фреймворк должен обеспечивать модульность OOTB. Если проекту не нужен фреймворк, брать фреймворк будет излишним из-за модульности. Это одна из причин, по которой я специально не спрашиваю о библиотеках/инструментах.