Ответ 1
RequireJS не имеет встроенной функции выгрузки, но ее можно добавить, возможно, в качестве дополнительной части, которую вы могли бы встроить в нее. Если вы хотите использовать эту функцию, не стесняйтесь предлагать ее в списке рассылки или как Проблема GitHub.
Если вы хотите поэкспериментировать, чтобы убедиться, что это помогает вашей ситуации, вам нужно сделать следующее:
1) Удалите указанный модуль из кеша модуля RequireJS. Если вы не используете поддержку мультиверсии, вы можете сделать что-то вроде:
var context = require.s.contexts['_'];
delete context.defined[moduleName];
delete context.specified[moduleName];
delete context.loaded[moduleName];
2) Затем вы можете попробовать удалить тег script, чтобы узнать, помогает ли это:
var scripts = document.getElementsByTagName('script');
for (var i = scripts.length - 1; i >= 0; i--) {
var script = scripts[i];
if (script.getAttribute('data-requiremodule') === moduleName) {
script.parentNode.removeChild(script);
break;
}
}
Обратите внимание, что модуль не может быть собран в мусор, если другой модуль удерживает его через функцию закрытия() {}, которая определяет этот другой модуль. Этот другой модуль также нужно будет удалить.
Вы можете попытаться ограничить это воздействие, не передавая в модуле как аргумент функции, а просто используйте require ( "somemodule" ) внутри определения функции, когда вы хотите получить зависимые модули, а не удерживать которые требуют слишком долгого возврата.
Кроме того, в вашем примере выше для модулей, которые используют require.def для определения себя, он должен выглядеть так (без .js-суффикса):
require(["somemodule"], function(m) { m.run(); } );