Динамическое управление файлами JavaScript с помощью TypeScript / NodeJs - PullRequest
0 голосов
/ 24 сентября 2018

Я хочу автоматически обработать некоторые манипуляции с существующими файлами HTML / JS.Для манипулирования HTML DOM у нас есть библиотеки типа cheerio .Но как я могу динамически манипулировать простыми файлами JS?

Пример исходного файла (назовем его original.js)

version = '1.0';
var config = {
    loginUrl: '/homepage/login',
    defaultLanguage: 'en-us'
}
// ... More JS Code

Я хочу автоматически изменить конфигурацию в коде, чтобы мы имели, например, updated.js

version = '1.0';
var config = {
    loginUrl: '/other-link/login',
    defaultLanguage: 'de-de'
}
// ... More JS Code

Было бы неплохо иметь несколько чистых библиотек синтаксического анализа, как у нас, для HTML, вместо того, чтобы выполнять какую-либо подверженную ошибкам замену на строки или регулярные выражения.

Зачем нам нужны такие неприятные модификации?

У меня есть проприетарное расширение IBM Connections, которое поставляется в виде zip-файла.Нам нужно настроить некоторые вещи в файлах javascript, например, изменить язык по умолчанию с английского на немецкий.К сожалению, кодовая база не очень чистая.Например, у нас нет выделенного файла конфигурации js, который можно легко настроить.Вместо этого в большом файле кода есть массив конфигурации (около ~ 1 тыс. Строк кода).

Чтобы повысить удобство сопровождения при обновлении исходного приложения, я хочу сделать как можно меньше ручных изменений исходного кода.Вот почему я хочу автоматизировать это: в приведенном выше примере я хочу передать массив конфигурации в один файл js за пределы базы проприетарного кода и написать приложение nodejs, которое заменяет исходный массив моим собственным.

Таким образом, мы можем относительно просто обновить исходное приложение, не делая особых изменений вручную.Я знаю, что это всего лишь обходной путь для плохо спроектированной системы.Но так как я не являюсь разработчиком оригинала, я не могу его изменить и хочу сделать мои необходимые изменения максимально чистыми.

1 Ответ

0 голосов
/ 09 марта 2019

Если вы используете Node.js, то существует модуль npm, а именно ts-simple-ast, который предоставляет вам разобранную версию файла машинописного текста, а также множество функций, с помощью которых вы можете получить доступ к конкретному узлу.Вы также можете манипулировать файлом, используя их функции получения и установки после перехода к определенному узлу.

Теперь библиотека изменена на ts-morph .Загляните в этот модуль npm.И вы можете легко заменить объект конфигурации другим объектом.

...