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