На примере выше, код превращается примерно в такой:
function getMM({ httpClient }) {
...
var compiled = function stringToObject(data) {
// а вот и httpClient в замыкании :)
...
}(data)
...
} Дальше разберем как эта ссылка утекает в код микрофронта.
Код в методе
stringToObject вызывает vm.runInThisContext, которая нам уже отдает все что экспортирует код микрофронта, который в свою очередь экспортируем специальную фабрику.Эту фабрику мы тут же вызываем с необходимыми аргументами, один из которых функция из этого же файла, условно:
const customRequire = (...) => { ... };
function getMM({ httpClient }) {
...
var compiled = function stringToObject(data) {
return vm.runInThisContext(data)(..., customRequire, ...)
}(data)
...
} Конечно же, объявление функции customRequire переместилось и превратилось в анонимную функцию по месту использования:
function getMM({ httpClient }) {
...
var compiled = function stringToObject(data) {
return vm.runInThisContext(data)(..., (...) => { /* а вот и замыкание для нашего httpClient! */ }, ...)
}(data)
...
}На скриншоте оригинальный собранный код, только после форматирования в профайлере.
