动态操作TypeScript / NodeJs的JavaScript文件

问题描述 投票:0回答:1

我想自动处理现有HTML / JS文件的一些操作。对于HTML DOM操作,我们有像cheerio这样的库。但是我如何动态操作普通的JS文件呢?

原始文件的示例(我们称之为original.js)

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

我想自动更改代码中的配置,以便我们有例如modified.js

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

像我们对HTML一样有一些干净的解析库,而不是使用字符串或正则表达式进行一些容易出错的替换,这将是很好的。

为什么我们需要这么讨厌的修改?

我有一个专有的IBM Connections扩展,以zip文件的形式提供。我们需要在javascript文件中自定义一些内容,例如将默认语言从英语更改为德语。可悲的是,代码库并不是很干净。例如,我们没有可以轻松定制的专用js配置文件。相反,在大型代码文件中有一个配置数组(大约约1k行代码)。

为了提高原始应用程序更新时的可维护性,我希望在原始源代码上尽可能少地进行手动更改。这就是我想要自动执行此操作的原因:在上面的示例中,我想将config数组外包在专有代码库之外的单个js文件中,并编写一个nodejs应用程序,用我的自定义替换原始数组。

因此,我们可以相对简单地更新原始应用程序,而无需手动更改核心更改。我知道这只是一个设计糟糕的系统的解决方法。但由于我不是原版的开发者,我无法改变它,并希望尽可能干净地进行必要的修改。

javascript node.js substitution
1个回答
0
投票

如果您正在使用Node.js,那么有一个npm模块,即ts-simple-ast,它为您提供了typescript文件的解析版本,然后有大量的函数可以通过它们访问特定节点。您还可以在遍历到特定节点后使用其getter和setter函数来操作该文件。

现在库已更改为ts-morph。看看这个npm模块。您可以轻松地用另一个对象轻松替换配置对象。

© www.soinside.com 2019 - 2024. All rights reserved.