欢迎!请查阅关于页面以了解更多关于如何使用本站的信息。
goog.module是一种定义Closure命名空间的新方法:https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide
它被用于例如https://github.com/google/incremental-dom
我没有对如何处理Closure库进行彻底检查,但是一个被{{cljs.closure}}肯定使用的函数是{{cljs.js-deps/find-classpath-lib}},它会调用{{cljs.js-deps/parse-js-ns}}来读取JS文件并从中解析模块信息。当前该函数读取第一个函数声明之前的行,并使用正则表达式查找{{goog.provide}}和{{goog.require}}调用。可能Closure Compiler有一些内置的解析文件的功能可以利用。
除了从文件中读取模块信息之外,另一个问题是如果对ClojureScript编译器生成的传统/遗留命名空间使用{{goog.module}}定义的命名空间是否需要特殊处理。当需要{{goog.module}}时,{{goog.require}}返回导出对象,但没有设置全局变量。然而,有一个函数可以创建全局变量:https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide#how-do-i-use-a-googmodule-from-a-traditional-closure-file
备注