У меня есть json с функцией, хранящейся в нем как строки, и когда я возрождаю его с помощью новой функции и пытаюсь использовать метод, который использует библиотеку, импортированную с помощью angular, например lodash, я получаю ошибку ссылки. Вот код, который ZombieLoader восстановит объект json, и в тесте углового класса попытается запустить его, я получу ошибку _ не найдено.
// This class takes a json and produces an object with methods
export class ZombieLoader {
static revive(st: string): object {
const result = {};
const obj = JSON.parse(st);
for (const key of Object.keys(obj)) {
if (key.startsWith('@')) {
result[key.substring(1)] = new Function('return ' + obj[key])();
continue;
}
result[key] = obj[key];
}
return result;
}
}
// the json with function in string form that will be hydrated back for use
{
script: '{"@run":"function () { return _.chunk(['a', 'b', 'c', 'd'], 2); };}'
}
// here I test the method which fails because it cant find _
import * as _ from 'lodash';
import {ZombieLoader} from './zombie-loader';
export class Test {
constructor(script: string) {
const sceneScript = ZombieLoader.revive(script);
sceneScript.run();
}
}
Почему реконструированный объект не имеет ссылки на загруженные в Angular скрипты, есть способ восстановить объект и связать его с угловым.
Если я добавлю lodash в файл index.html, он будет работать, но я не хочу делать это с несколькими другими библиотеками