动态地使用TypeScript / NodeJ操作JavaScript文件

时间:2018-09-24 12:28:01

标签: javascript node.js substitution

我想对现有的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一样的干净的解析库,而不是用字符串或regexp替换一些容易出错的东西。

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

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

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

因此,我们可以相对简单地更新原始应用程序,而无需手动进行很多核心更改。我知道这只是设计不良的系统的解决方法。但是由于我不是原始开发人员的开发人员,因此无法更改它,并且希望尽可能干净地进行所需的修改。

1 个答案:

答案 0 :(得分:0)

如果您使用的是Node.js,则有一个npm模块,即ts-simple-ast,它为您提供了打字稿文件的解析版本,然后还有大量的函数可用于访问特定节点。在遍历到特定节点之后,还可以使用它们的getter和setters函数来操纵文件。

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