更新并未破坏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
直到问题得到修复。