2014-10-18 3 views
0

В моей конфигурации require.js я использую urlArgs: "bust=" + (new Date()).getTime(),, чтобы убедиться, что мои сценарии модуля вообще не кэшируются во время разработки (это приводит к добавлению уникального параметра запроса для каждого запроса , поэтому он выглядит как кеш как другой ресурс).Используйте различные параметры конфигурации для разных модулей

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

ответ

1

urlArgs опция is used by the nameToUrl method of requirejs' context. Это означает, что в контексте все модули будут использовать этот параметр. Different contexts can have different options, но контексты микширования будут более сложными, чем это стоит: недостаточно будет определить два набора параметров конфигурации, но разные модули потребуются по-разному, а модули из другого контекста не могут быть перечислены в одной зависимости список.

Тем не менее, вот пример того, как это может быть достигнуто (fiddle):

// default context 
require.config({ 
    urlArgs: "boost=" + (new Date()).getTime(), 
    paths: { 
     jquery: "//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min", 
    } 
}); 

// cached (non-boosted) context 
var reqCached = require.config({ 
    context: "cached", 
    paths: { 
     jquery: "//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min", 
    } 
}); 

// define a module "inline", normally it'll go into <base>/main.js 
define("main", ["jquery"], function($) { 
    $("body").append("<div>boosted jquery</div>"); 
    reqCached(["jquery"], function($) { 
     $("body").append("<div>cached jquery</div>"); 
    }); 
}); 

// bootstrap the "application" - load and execute the main module 
requirejs(["main"], function(main) { 
}); 

В инструментах разработчика вы можете видеть, что это надуманный пример загружает две версии JQuery - один кэш-рост (зависимость «основного» модуля) и одной простой (требуется вручную с контекстом reqCached). Увы, невозможно - или я не знаю способа - смешивать и сопоставлять два контекста, чтобы они обеспечивали прозрачность различных наборов модулей.

+0

Я уверен, что ОП просит практическое решение, а не доказательство концепции (например, использование контекстов), которое при вводе в эксплуатацию превратит обслуживание в кошмар. Не поймите меня неправильно: контексты * имеют * их использование. Разделение одного приложения на два, чтобы иметь возможность использовать разные «urlArgs», просто не является одним из них. – Louis

+1

Я прямо заявляю, что предложение непригодно :-) – artm