underscore.js,名为“”的全局对象;出口;和livefyre javascript API-集成冲突

underscore.js, global object named "exports" and livefyre javascript API - integration conflict

本文关键字:出口 livefyre API- 冲突 集成 javascript 对象 名为 js 全局 underscore      更新时间:2024-02-08

我将尝试总结几个步骤,并在之后提出一个问题

  1. underscore.js在开发第三方javascript组件时安装失败(如本文所述:Undercore.js和noconflict)。我的代码包括以下行,以避免underline.js的不同版本发生冲突:

    窗口$MyUS=_.noConflict();

  2. 当查看underscore.js代码时,发现如果定义了exportsmodule.exports,则_变量将成为exportsmodule.exports的成员。它只是发生了(在浏览器中,当然不是在Node.js中)。

  3. 我尝试将exports对象保存在一边,在加载underscore.js之前将其删除,并在调用noConflict()之后立即恢复。但是,当调用delete exports时,我得到了false,这意味着exports不能被删除。

  4. 我在exports对象中发现了两个成员函数:compile()compileToString()。通过研究它们的实现,我发现了LF引用,它们可能引用了livefyreJavascript API(http://www.livefyre.com/docs/javascript-sdk-reference)

解决冲突的更好方法是什么?我看到以下选项:

  1. 修改underline.js代码,使其不会尝试将自己安装到exports对象中。

  2. underline.js来修改exports对象,并希望在任何网站上都不会发生任何错误。在这种情况下,我需要重写window.$MyUS = _.noConflict();行,如下所示:

    窗口$MyUS=.noConflict||导出.noConflict()||…;//为了清晰起见,省略了健全性检查,显然生产代码必须是更健壮的

如果您需要更多信息,请询问。

我认为答案很简单:在GitHub上分叉下划线,添加一个简单的补丁,如果window存在,则拒绝将自己附加到exports,并提交一个拉取请求。

这样每个人都会受益:你不必每次升级下划线副本时都重新应用补丁,其他人也不必处理这个问题。