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
.)