Подтвердить что ты не робот

Именованный модуль против модуля "Без имени" в RequireJS

Мы можем создать модуль в requireJS, указав ему имя:

define("name",[dep],function(dep) {
      // module definition
});

или мы можем создать его, исключая имя:

define([dep],function(dep) {
      // module definition
});

Каков лучший способ создать модуль? Я знаю, что RequireJS рекомендует избегать назначения имен модулей.

Но я хочу знать, в каких сценариях мы делаем, и не нужно указывать модуль имени. Это влияет на использование? Каковы плюсы и минусы каждого из них?

4b9b3361

Ответ 1

Это то, что требует документация requirejs на тему именованных модулей:

Обычно они генерируются инструментом оптимизации. Вы можете явно называть модули самостоятельно, но это делает модули менее переносимыми - если вы переместите файл в другой каталог, вам нужно будет изменить имя. Обычно лучше избегать кодирования в имени для модуля и просто позволить инструменту оптимизации записывать имена модулей. Инструменту оптимизации необходимо добавить имена, чтобы в файл можно было добавить несколько модулей, чтобы обеспечить более быструю загрузку в браузере.

Но позвольте сказать вам, что хотите ваш модуль иметь одно известное имя, которое позволяет всегда требовать его таким же образом от любого другого модуля. Вам нужно использовать вызов define с именем? Не за что. Вы можете использовать paths в своей конфигурации:

paths: {
   'jquery': 'external/jquery-1.9.1',
   'bootstrap': 'external/bootstrap/js/bootstrap.min',
   'log4javascript': 'external/log4javascript',
   'jquery.bootstrap-growl': 'external/jquery.bootstrap-growl',
   'font-awesome': 'external/font-awesome'
},

С этой конфигурацией jQuery может потребоваться как "jquery", Twitter Bootstrap как "bootstrap" и т.д. Лучшей практикой является оставить вызов define с именем оптимизатор.

Ответ 2

Сверху моей головы единственный модуль, который я видел, который использует метод named module, - это jQuery. Лично я бы также рекомендовал использовать шаблон неназванного модуля.

Именованные модули

Именованием модуля, требуемое имя не зависит от его местоположения. Другой автор модулей мог вслепую потребовать "jquery", не зная путь к модулю. Это полезно, если вы разрабатываете повторно используемый модуль (вне вашего проекта). Однако у него есть недостаток, который (используя jQuery в качестве примера), вам нужно будет добавить и вписать в свойство конфигурации paths для RequireJS указать правильное расположение файла. В противном случае RequireJS не может найти файл для загрузки, если он не помещен в вашу базовую требуемую директорию.

Безмозглые модули

Я считаю, что это предпочтительнее, потому что вы можете использовать относительные требуемые пути. Скажем, у вас есть два файла modules/ClassA и modules/ClassB. ClassB может потребоваться ClassA с помощью './ClassA', и при необходимости можно перемещать всю директорию. Используя неназванный модуль, вы также исключаете возможность столкновения имен, если только вам не удастся найти способ размещения двух файлов в одном каталоге с тем же именем.