我有一个相当大的应用程序(~650个文件),目前实现了ES6模块和旧版全局命名空间内部模块和类的混合。
我想转向100%的ES6模块。
迭代方法:
为了达到这个目标,我需要先通过添加“export”关键字将所有全局对象转换为ES6模块。
一旦我添加了“export”,该全局对象就不再是全局的,使用该对象的每个文件都会出现编译器错误“找不到对象”(即Cannot read property 'xxx' of undefined)。
要解决这个问题,必须在文件中添加“import”,从而将其转换为ES6模块,而这反过来会“取消全局化”该文件中的所有对象,在其他文件中引起新的“对象未找到”错误。
简而言之,这种迭代方法似乎不会很好地工作。
可能的一步到位的解决方案:
1. 迭代所有ts文件
- 以编程方式向所有顶级类、模块和变量添加导出。 - 将它们收集到一个列表中。
2. 生成一个桶(globalBarrel)文件,重新导出在上一步中收集的所有导出。
3. 再次迭代所有ts文件
- 向每个ts文件添加`import {list, of, symbols, exported, by, the, barrel,file} from "./globalBarrel"`。
4. 编译干净?
- 很可能会有一些循环依赖性问题需要解决。
5. 在将来编辑每个文件时,使用vsCode的“Organize Imports”命令删除多余的导入。
正如@jfriend000所说:
将非模块化代码尝试以编程方式转换为模块化代码只会创建一堆麻烦。
但是,一次将所有内容都放入模块将使真正的模块化过程更加容易。
问题:
这是最好的方法吗?有什么建议吗?
我想转向100%的ES6模块。
迭代方法:
为了达到这个目标,我需要先通过添加“export”关键字将所有全局对象转换为ES6模块。
一旦我添加了“export”,该全局对象就不再是全局的,使用该对象的每个文件都会出现编译器错误“找不到对象”(即Cannot read property 'xxx' of undefined)。
要解决这个问题,必须在文件中添加“import”,从而将其转换为ES6模块,而这反过来会“取消全局化”该文件中的所有对象,在其他文件中引起新的“对象未找到”错误。
简而言之,这种迭代方法似乎不会很好地工作。
可能的一步到位的解决方案:
1. 迭代所有ts文件
- 以编程方式向所有顶级类、模块和变量添加导出。 - 将它们收集到一个列表中。
2. 生成一个桶(globalBarrel)文件,重新导出在上一步中收集的所有导出。
3. 再次迭代所有ts文件
- 向每个ts文件添加`import {list, of, symbols, exported, by, the, barrel,file} from "./globalBarrel"`。
4. 编译干净?
- 很可能会有一些循环依赖性问题需要解决。
5. 在将来编辑每个文件时,使用vsCode的“Organize Imports”命令删除多余的导入。
正如@jfriend000所说:
将非模块化代码尝试以编程方式转换为模块化代码只会创建一堆麻烦。
但是,一次将所有内容都放入模块将使真正的模块化过程更加容易。
问题:
这是最好的方法吗?有什么建议吗?