Requirejs: пути к карте
Попытка понять, где правильно использовать "карту" с подстановочным знаком "пути".
Глядя на источник потребности (но, конечно же, на 100% не владеющий им), похоже, что функционально не будет никакой разницы между этими двумя фрагментами. Это правда?
Использование путей:
require.config({
baseUrl: "include/js/",
paths: {
foo: "stuff/foo",
}
});
Использование карты:
require.config({
baseUrl: "include/js/",
map: {
'*': {foo: "stuff/foo"},
}
});
Ответы
Ответ 1
Из документов RequireJS "Кроме того, конфигурация путей предназначена только для настройки корневых путей для идентификаторов модулей, а не для сопоставления одного идентификатора модуля с другим".
Это означает, что "пути" предназначены для сопоставления только пути к вашему ресурсу, когда он не находится в местоположении по умолчанию (baseUrl). Наверное, это то, что вы пытались сделать.
С другой стороны, с помощью "карты" вы можете иметь несколько версий вашего ресурса (foo1, foo2...), которые вы можете отображать для загрузки с разных путей (т.е. вы хотите загрузить foo1 из браузера рабочего стола и foo2, который является модификацией первого из мобильного браузера).
Итак, если у вас нет разных версий foo, я бы использовал "путь", хотя вы правы, и "карта" также будет работать в этом случае.
Ответ 2
Я нашел одно отличие, и что в случае плагинов-загрузчиков requirejs, пример Example: define(['cs!module'], function(){...} )
для CoffeeScript.
Использование map:*
части конфигурации для объявления плагинов (и paths
для зависимых модулей) работало в браузере. Однако в Node Requirejs не смогли найти плагины загрузчика, если они не были под paths
.
В конце концов, для того, чтобы иметь возможность запускать ту же конфигурацию в Node и в браузере, я избавился от раздела map:*
и объявил все в paths
, и он отлично работает для меня теперь, даже если я все еще надеюсь получить некоторые разъяснения о том, почему.
Ответ 3
Существует еще одна важная разница с конфигурацией карты.
Вы определяете префикс , который будет использоваться в сопоставлениях.
В вашем примере это означало бы, что foo
будет отображаться на stuff/foo
, а также foo/bar/baz/bam
будет отображаться на stuff/foo/bar/baz/bam
.