RequireJS - идентификатор модуля против имени модуля

Я вроде нуб в RequireJS; Недавно я прочитал документацию по API и натолкнулся на эти два термина: module ID а также module name, Они используются взаимозаменяемо? Или это как-то разные понятия?

Выдержки:

http://requirejs.org/docs/api.html

RequireJS также предполагает, что по умолчанию все зависимости являются сценариями, поэтому он не ожидает увидеть конечный суффикс ".js" для идентификаторов модулей s. RequireJS автоматически добавит его при переводе идентификатора модуля в путь.

http://requirejs.org/docs/api.html

Путь, который используется для имени модуля, не должен включать расширение, поскольку отображение пути может быть для каталога. Код отображения пути автоматически добавит расширение.js при отображении имени модуля в путь.

http://requirejs.org/docs/api.html

Загрузчик хранит модули по имени, а не по пути внутри. Таким образом, для ссылок на относительные имена они разрешаются относительно имени модуля, создающего ссылку, затем имя этого модуля или ID преобразуется в путь, если необходимо загрузить.

1 ответ

Решение

Имя модуля и идентификатор модуля - это одно и то же, и они отличаются от пути к модулю. Предположим, следующая конфигурация:

require.config({
    baseUrl: '/lib/',
    paths  : {
        bar        : 'a/b/c',
        flip       : 'd/e/f',
        'flip/flop': 'dir/dir/something'
    }
});

Ваша первая цитата говорит о том, что происходит, когда вы называете что-то вроде require(['foo'], ..., Здесь нет paths в конфигурации выше, которая указывает, что foo переводится как. Поэтому RequireJS создаст путь из идентификатора модуля, который foo, В конечном итоге он попытается загрузить файл /lib/foo.js,

Ваша вторая цитата говорит о том, что происходит, когда есть paths для вашего модуля. если ты require(['bar'], ... тогда RequireJS преобразует идентификатор в /lib/a/b/c.js когда он пытается загрузить его. Это добавляет само расширение. Эта же цитата косвенно ссылается на случай, когда вы будете делать require(['bar/baz'], ..., При указанной выше конфигурации RequireJS разделит идентификатор модуля на две части: bar, а также baz, нашел бы что bar имеет paths конфигурация и так будет строить путь /lib/a/b/c а потом добавил бы baz к нему и расширению, чтобы он пытался загрузить файл /lib/a/b/c/baz.js, Так что если у вас есть иерархия связанных модулей, вы можете просто поместить корень этой иерархии в свой paths вместо того, чтобы указывать путь для каждого модуля в иерархии.

Третья цитата указывает, что идентификатор модуля - это то, что используется при интерпретации относительных идентификаторов модуля. Скажем flip/flop был загружен и имеет .. в его зависимостях. RequireJS объединит flip/flop с .. который разрешает flip, а затем RequireJS преобразует этот идентификатор модуля в путь: d/e/f.js так как flip имеет отображение в paths, Иногда люди думают, что RequireJS будет интерпретировать .. относительно пути модуля, который нуждается в этом. Цитата уточняет, что это не так. (Если бы это было так, то RequireJS попытался бы загрузить dir/dir.js.)

Другие вопросы по тегам