Анализируйте код с помощью esprima, изменяйте тело программы и регенерируйте код с помощью escodegen, оставляя комментарии и пробелы нетронутыми
Я пытаюсь использовать esprima для анализа программы, добавить новый импорт, а затем использовать escodegen для преобразования его обратно в строку javascript, сохраняя при этом все комментарии и пробелы.
Я разбираю строку (модуль) javascript, как показано ниже, где данные - это строка javascript.
var program = parseModule(data, {
comment: true,
range: true,
tolerant: true,
tokens: true
})
Затем я добавляю новый импорт в конец моего импорта, соединяя program.body с объектом ImportDeclaration, определенным @ types / estree, но без свойства range. Затем я конвертирую программу обратно в строку, используя escodegen, как показано ниже
let newTree = attachComments(program, program.comments, program.tokens);
let newScript = generate(newTree, { comment: true });
... однако я получаю сообщение об ошибке ниже
(node:1688) TypeError: Cannot read property 'length' of undefined
at attachComments (webpack://code-generation/./node_modules/estraverse/estraverse.js?:704:21)
Этот метод работал до того, как я добавил параметр диапазона к параметрам esprima parseModule и перед попыткой прикрепить комментарии с помощью escodegen, но мне нужно, чтобы комментарии и пробелы сохранялись. Насколько я могу судить, ошибка вызвана тем, что у меня нет информации о диапазоне для импорта, который я добавляю, и / или все диапазоны в остальной части тела теперь неверны.
Есть ли более простой способ добавить импорт или Directives/Statements/ModuleDeclarations в целом к телу esprima.Program, которое я не замечаю, который не включает в себя вычисление диапазона нового импорта и изменение всех диапазонов всего остального в программа? Я, кажется, хожу по кругу, глядя на другие сообщения о stackru и официальную документацию.