2024年Clojure状态调查!分享您的想法。

欢迎!有关如何工作的更多信息,请参阅关于页面。

0
ClojureScript

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)

1条回答

0
参考:[链接](https://clojure.atlassian.net/browse/CLJS-1543)(报告者:deraen)
...