Формирование модуля AMD: как загрузить только одну функцию JS?

У многих библиотек JavaScript есть инструмент Builder, который позволит вам "сформировать", какие функции библиотеки вы будете зависеть, как с точки зрения стоимости пропускной способности для клиента, так и с точки зрения изолирования функциональных возможностей, которые вам действительно нужны.

Например, мне нравится много вещей в sugar.js, но мне просто не нужна или нужна обработка катаканы и хираганы. Как самый тривиальный пример, я хочу иметь возможность "форматировать" sugar.js только для экспорта string.isBlank().

Есть ли у меня инструмент для этого? Есть ли какие-либо постоянные усилия комитета EcmaScript сделать что-то подобное в будущей версии JavaScript? Существуют ли какие-либо языки более высокого уровня, такие как TypeScript и CoffeeScript, предлагают скрытую поддержку для такого "формирования"? Я могу сделать такое "формирование" в С# для .NET DLL через monolinker.

В принципе, мне кажется, что AMD обрабатывает аспект Loader современного компилятора, но не обрабатывает аспект Linker. Строители для jquery и dojo работают только для конкретный модуль, и не являются настоящими Linkers, просто Builders.

ОБНОВЛЕНИЕ: Компилятор Google Closure - это компилятор, который использует JavaScript в качестве входных данных и создает JavaScript в качестве вывода. Документация Advanced Compilation and Externs предполагает, что для этого есть вызов API:

Если сборка этих экспортных инструкций кажется слишком утомительной, вы можете использовать функцию для экспорта для вас. См. Функции Библиотеки Closure goog.exportSymbol() и goog.exportProperty() для примеров экспортных функций.

Однако это кажется довольно запутанным и заставляет меня напрямую зависеть от компилятора Google Closure. На данный момент я ищу информацию о будущих стандартах от Комитета EcmaScript в отношении CommonJS и любой мудрости от людей, которые подумали об этой проблеме и попытались ее решить. Особенно от разработчиков TypeScript; Я не хочу создавать файлы объявления в TypeScript для sugar.js, а затем использовать компилятор Google Closure для компилятора my TypeScript. Это просто невероятно сложно и сложно отлаживать.

Ответ 1

К сожалению, в Javascript нет ничего, чтобы сделать это "формирование", и действительно, что вы хотите, это компилятор, так как примерно одна из его функций - автоматизировать "формирование" на многих уровнях (не только с помощью методов).

Компилятор Closure является зрелым и открытым исходным кодом (JQuery фактически минимизируется с использованием компилятора Closure). Поэтому, если вы собираетесь начинать аннотировать свой JS-код для компилятора, это может быть и этот.

Там огромное количество побочных преимуществ использования компилятора, кстати. Они уменьшат ваши размеры файлов (и, следовательно, время интерпретации/времени выполнения) намного больше, чем просто формирование ваших включенных библиотек. И пока вы разрабатываете, вы получите много полезных сообщений, чтобы ловить баги раньше.