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中使用。
我没有全面检查如何处理闭包库,但一个肯定被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)
备注
- 我们是否仍可以假定所有goog.requires都在第一个函数声明之前出现?
-- 使用可能的Closure Compiler功能将予以修复
-- 类{{com.google.javascript.jscomp.deps.JsFileParser}}看起来很有前途
- "GCL尚未切换到它,这可能是由于一些用户的需求,而不是Google更广泛使用的东西"(Slack上的David)