首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何有效地将Google闭包javascript转换为现代ES6?

我如何有效地将Google闭包javascript转换为现代ES6?
EN

Stack Overflow用户
提问于 2020-06-29 02:06:20
回答 1查看 1.1K关注 0票数 2

我有一个代码库,它使用谷歌闭包风格的模块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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-30 16:13:57

关于这一点,您应该阅读两份文件:

ES6模块与闭包互操作

从goog.modules迁移到ES6模块

每一项的要点如下:

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'dgoog.module.getdgoog.forwardDeclaredgoog.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文件之后,才能删除该文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62630196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档