更新并没有破坏 goog.object
,它只是破坏了对其的“全局”访问。这意味着任何使用 goog.object/get
而没有在 ns
表达式中正确遵守 (:require [goog.object :as ...])
的命名空间现在将会出问题。您不能再依赖 goog
命名空间在全局范围内可用。技术上这从来都不是正确的,但可以依据 cljs.core
需要 goog.object
并确保它总是已加载的。
所以为了正确修复这个问题,您只需要添加 goog.object
需要。
然而,还有一个更微妙的问题与宏有关。一些库可能具有直接生成访问 goog.object/get
的形式的宏。即使使用该宏的命名空间做得完全正确,这也会出问题。这是因为使用宏的命名空间可能没有自己的 goog.object
需要(而且不应该需要)。
遗憾的是,由于这些变化,需要重新编写宏,以便使用它们自己的辅助函数,然后可以正确地使用 goog.object
,或者切换到使用 unchecked-get
和 unchecked-set
,后者基本上相当于 goog.object/get
和 goo.object/set
。
根据 公告,添加了一个编译器选项,使过渡更加顺畅。
因此,如果问题出在您的代码中,您只需要添加 ns 需要。如果在库中,则需要在那里进行修复。或者,您可以使用编译器选项 :global-goog-object&array
直到修复为止。