Как поместить несколько файлов в одно пространство имен / модуль? (JavaScript) - PullRequest
4 голосов
/ 17 сентября 2010

Я читал о шаблоне модуля, но все, что я читаю, предполагает, что все содержимое модуля будет в одном файле.Я хочу иметь один файл для каждого класса.

Я прибегаю к этому в начале каждого файла:

if(window.ModuleName === undefined) { window.ModuleName = {}; }

ModuleName.ClassName = function () { ... }

Но это позволяет включать файлы без их зависимостей, чтотоже раздражает.Например, предположим, что есть ClassA, который использует ClassB, а "ClassB.js" исключен из HTML, тогда ClassA вызовет ошибки.Насколько мне известно, в Javascript отсутствует оператор import, поэтому в данном случае я действительно хочу, чтобы все было в одном файле.

Я предполагаю, что большие проекты javascript разбиты на несколько файлов, поэтомудолжен быть способ обойти это.Как это вообще делается?Есть ли какой-нибудь инструмент, который объединит несколько файлов классов в один файл модуля?

1 Ответ

3 голосов
/ 17 сентября 2010

Это большая тема, но позвольте мне объяснить как можно больше. Javascript требует, чтобы вы предварительно загрузили все, что вы намеревались использовать, поэтому шаблон вашего модуля содержит все «вещи» в одном файле. Но если вы планируете разделить их на разные файлы, вам придется управлять ими перед использованием. Я предлагаю следующие подходы

  1. Объедините их перед обслуживанием на сервере. Например, в jsp вы можете создать сервлет, который возвращает contenttype = "text / javascript", внутри этого сервлета вы можете добавить все необходимые скрипты в один динамически генерируемый скрипт, а затем вернуть его клиенту.

  2. В ваших сборках ant или maven и т. Д. Существуют конфигурации, в которых вы можете объединить нужные вам файлы. Это обычная практика, поэтому вы должны найти много ссылок в Интернете.

  3. Ленивая загрузка JavaScript. Это мой любимый способ. Я использую Ленивая библиотека JavaScript . По сути, я объявляю зависимости некоторых кодов так же, как «импорт» в Java, а затем, прежде чем вызвать любой из них, я загружаю их зависимости. Это позволяет оптимизировать загрузку зависимостей без избыточности скриптов. Проблема в том, что вам нужно написать несколько довольно сложных скриптов для этого.

Надеюсь на помощь.

...