2013-10-07 2 views
23

Попытка понять, где правильно использовать «карту» с подстановочным знаком «пути».Requirejs: paths vs map

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

Использование Дорожки:

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

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

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

ответ

7

Из документов RequireJS «Кроме того, конфигурация путей предназначена только для настройки корневых путей для идентификаторов модулей, а не для сопоставления одного идентификатора модуля с другим».

Это означает, что «пути» предназначены для отображения только пути к вашему ресурсу, когда он не находится в местоположении по умолчанию (baseUrl). Наверное, это то, что вы пытались сделать.

С другой стороны, с помощью «карты» вы можете иметь несколько версий вашего ресурса (foo1, foo2 ...), которые вы можете отображать для загрузки с разных путей (т. Е. Вы хотите загрузить foo1 из браузера рабочего стола и foo2, который является модификацией первого из мобильного браузера).

Итак, если у вас нет разных версий foo, я бы использовал «путь», хотя вы правы, и «карта» также будет работать в этом случае.

+0

это «пути», а не «путь» :), но хороший ответ! – OZZIE

8

Я нашел одно различие, а именно в случае requirejs загрузчика плагинов, например, пример: define(['cs!module'], function(){...}) для CoffeeScript.

С помощью команды map:* часть конфигурации для объявления плагинов (и paths для зависимых модулей) работала в браузере. Однако в узле Requirejs не смогли найти плагины загрузчика, если они не были ниже paths.

В конце концов, для того, чтобы иметь возможность запускать ту же конфигурацию в узле и в браузере, я избавился от раздела map:* и объявил все в paths, и теперь это работает отлично, даже если я Я все еще надеюсь получить некоторые разъяснения о том, почему.

4

Существует также один другой важное отличие с конфигурацией карты. Вы определяете префикс , который будет использоваться в сопоставлениях.

Для примера это будет означать, что foo будет отображаться в stuff/foo, но и foo/bar/baz/bam будут отображаться на stuff/foo/bar/baz/bam.