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

Requirejs: пути к карте

Попытка понять, где правильно использовать "карту" с подстановочным знаком "пути".

Глядя на источник потребности (но, конечно же, на 100% не владеющий им), похоже, что функционально не будет никакой разницы между этими двумя фрагментами. Это правда?

Использование путей:

  require.config({
    baseUrl: "include/js/",
    paths: {
     foo: "stuff/foo",
    }
  });

Использование карты:

  require.config({
    baseUrl: "include/js/",
    map: {
     '*': {foo: "stuff/foo"},
    }
  });
4b9b3361

Ответ 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.