我有一个代码库,它使用谷歌闭包风格的模块goog.provide和类等等。
我想使这个代码库现代化,但它大约有15k行代码,我希望有一个工具可以帮助我。
这些工具坏了,我试了很多东西让它们开始工作,但它们就是不起作用。这是个失败的事业。https://github.com/angular/clutz https://github.com/DreierF/closure-es6-converter
我认为,如果我有一个工具来将闭包类和模块更新为ES6变体,那么我可以手工完成所有其他工作。
这个工具可以更新到现代的ES6类语法,但特别是没有更新闭包模块。https://github.com/lebab/lebab
这个工具允许我将闭包模块转换成es6模块吗?或者它只产生一个缩小的输出。https://webpack.js.org/plugins/closure-webpack-plugin/#usage-example
发布于 2020-06-30 16:13:57
关于这一点,您应该阅读两份文件:
和
每一项的要点如下:
ES6模块可以使用像goog.modules这样的goog.require来引用闭包文件: const MY_CONSTANT = math.sum(1,1,2,3,5,8,13,21);
闭包库具有函数
goog.declareModuleId(/** string */ id),当在ES6模块中调用该函数时,它将ES6模块与类似goog.Module的id关联(例如,可以是goog.require'd、goog.module.getd、goog.forwardDeclared和goog.requireTyped的东西,并且不创建任何全局符号)。这些符号的goog.requires将返回整个模块对象,就像被import * as绑定一样。 goog.declareModuleId('example.es6');出口康斯特MY_CONSTANT =‘你好!’;
和
闭包模块默认导出闭包模块可以通过exports =value进行“默认”导出;使用此语法时,模块的导出将成为默认的导出。这经常与导出单个类的模块一起使用。 goog.module('my.Class');类{} //默认导出。这个模块的goog.require返回这个类。出口=类别;
如何迁移调用declareLegacyNamespace的闭包模块?goog.module.declareLegacyNamespace在ES6模块中不受支持。它打破了模块的一个基本原则:模块不创建全局值。它的目的是允许从goog.provide迁移到闭包模块。我们在迁移到ES6模块时不支持它。 建议首先将所有依赖于goog.provided调用的declareLegacyNamespace文件迁移到闭包或ES6模块,或者至少让它们在goog.scope中调用goog.module.get来获取对模块的引用。如果这是不可能的,并且仍然需要迁移闭包模块,那么您需要遵循类似的步骤来迁移带有默认导出的闭包模块,除非您的*_shim.js文件将调用declareLegacyNamespace。只有在迁移完所有goog.provide文件之后,才能删除该文件。
https://stackoverflow.com/questions/62630196
复制相似问题