如何从Closure Compiler编译的模块中导出符号?

时间:2017-09-18 09:24:23

标签: javascript ecmascript-6 google-closure-compiler google-closure-library es6-modules

我在单个库文件中有Closure Compiler(高级)编译的许多js es6模块。

我无法使用/** @export */或使用goog.exportSymbol('whatever', whatever)将某些符号导出为HTML页面中未编译的javascript。

怎么做?

Remarque:如果我在所有模块中用import / export替换es6 goog.require / goog.provide,它就可以工作,我可以在HTML页面中成功使用这些符号。

2 个答案:

答案 0 :(得分:1)

经过进一步调查,我找到了解决方案。

虽然在浏览器中加载时没有任何错误(当然除了undefined whatever),但是我的库没有被执行。我只是将闭包库移到要编译的文件堆栈之前,然后浏览器正确执行我的库,并正确导出我的符号。

导出符号的3种方法在编译的es6模块中有效:/** @export */ whatevergoog.exportSymbol('whatever', whatever)window['whatever'] = whatever。前两个是第三个方便的方式。

更多细节见No exported symbols with es6 modules library compiled by Closure Compiler

答案 1 :(得分:0)

您无法在模块中使用@export,但goog.exportSymbol应该有效。您的另一个选择是手动导出它们:

window['whatever'] = whatever;