Сбой оптимизации при передаче переменной со списком зависимостей для define()
Когда мы запускаем наш сайт в режиме отладки без минимизации сценария, это работает:
var defines = [
'globals',
'templates'
];
define(defines, function(globals, templates) {
//code...
});
Но как только код минимизируется, он перестает работать. Ты знаешь почему?
Пожалуйста, обратите внимание, что это работает:
define([
'globals',
'templates'
], function(globals, templates) {
//code...
});
Причина, по которой мы хотим использовать массив, заключается в том, что мы хотим зациклить его, чтобы заменить "template" на "template.1010101010", где 10101010101 - это временная метка, основанная на создании файла, и поддержание такого файла позволяет нам автоматически обойти кеш при обновлении файла.
Пожалуйста, обратите внимание, что у нас есть больше файлов для просмотра.
1 ответ
r.js
не может обрабатывать зависимости, которые определены как что-то еще, кроме литерального массива. Вот почему это работает:
define(['globals', 'templates'], function(globals, templates)...
Но это не работает
var deps = ['globals', 'templates'];
define(deps, function(globals, templates)...
Чтобы это работало r.js
пришлось бы выполнять анализ кода, что сделало бы его гораздо более сложным и медленным.
В целях уничтожения кэша один из способов получить то, чего вы пытались достичь, - это создать конфигурацию времени выполнения, в которой paths
установка для templates
устанавливается динамически во встроенном шаге:
paths: {
templates: 'templates.1.3.2'
}