Я создаю и приложение, которое имеет дело с сериализацией и динамическим импортом: я сериализирую объекты некоторого класса с чем-то вроде этого
fs.write('savename.json', JSON.stringify(someObject.getSerializable()), () => console.log('done'))
таким образом, хотя мне не удается сохранить имя конструктора илилюбую информацию о прототипе или материале, поэтому я сохраняю имя конструктора в свойстве type
, например:
export default class SomeObjectClass {
// [...]
getSerializable(): string {
return {
type: this.constructor.name,
...this
}
}
}
, но таким образом я не сохраняю его полный путь, поэтому при попыткединамически импортировать его с
const plainObject = fs.readFileSync('savename.json').toString();
const ctor = await import(plainObject.type);
const object = new ctor.default(); // this fails
, это просто не удается, потому что модуль находился во вложенной папке где-то в моем проекте. Я попытался объединить __dirname
следующим образом
export default class SomeObjectClass {
// [...]
getSerializable(): string {
return {
type: path.join(__dirname, this.constructor.name),
...this
}
}
}
, но это не работает, потому что после объединения __dirname
возвращает путь относительно папки распространения, структура которой отличается от моей исходной папки.
Итак. Как получить путь к файлу до обработки веб-пакета во время выполнения? Альтернативные решения проблемы, безусловно, приветствуются.
Приветствия