如何将jQuery嵌入/导入到另一个JavaScript库中,而不会与网站上部署的jQuery/其他库产生潜在冲突?
我正在开发一个内部使用jQuery的JavaScript库。然而,当部署它的时候,我更愿意简化事情(w.r.t.部署),而不必担心环境是否已经(或没有)包含在如何将jQuery嵌入/导入到另一个JavaScript库中,而不会与网站上部署的jQuery/其他库产生潜在冲突?,javascript,jquery,coffeescript,Javascript,Jquery,Coffeescript,我正在开发一个内部使用jQuery的JavaScript库。然而,当部署它的时候,我更愿意简化事情(w.r.t.部署),而不必担心环境是否已经(或没有)包含在中的jQuery 我应该提到,我的库是作为一个类在Coffescript中实现的,生成的.js文件具有用于隔离作用域的默认函数包装器 我可以想出一些解决这个问题的办法: 询问网站管理员是否已经有jQuery。如果 是的,只包括图书馆本身。如果不是,则包括jQuery+ 库,可能在单个文件中并连接。部署更加困难,但问题可能已经解决 创建一个连
中的jQuery
我应该提到,我的库是作为一个类在Coffescript中实现的,生成的.js文件具有用于隔离作用域的默认函数包装器
我可以想出一些解决这个问题的办法:
var myJ=jQuery.noConflict()
var myJ=jQuery.noConflict()
- 如果站点已经有jQuery,但是需要一个较旧/较新的 版本李>
- 如果我的
调用中断了其上的某些内容,该怎么办 结束noConflict()
解决这种情况的最佳方法是什么?我遗漏了什么吗?如果您的结束脚本是一个闭包,您只需将它作为一个参数传递给jQuery,然后检查它是否未定义
(function($) {
if (!$) {
// load jQuery
} else {
// check jQuery version if needed or just use jQuery
if ($.fn.jquery !== '1.7.2') {
// load 1.7.2
};
};
})(window.jQuery || false);
如果未声明jQuery,则必须使用window.jQuery,因为jQuery只会生成错误。CoffeeScript有一个-b选项可在没有顶级函数包装的情况下编译。使用此方法,您可以使用自己的顶级函数包装器 i、 e 然后,作为构建过程的一部分,将jQuery连接到编译输出的前端。适当的Linux/Mac shell命令为:
(cat jQuery.js; coffee -pb yourSource.coffee) > yourCompiledFileWithjQuery.js
CoffeeScript的p
选项将编译后的输出打印到stdout,以便您可以将其与cat jQuery.js
组合,并将该输出重定向到您的compiledFileWithjQuery.js
这将确保在执行代码之前,jQuery将立即被包括在内。jQuery保留对$的旧所有者的引用,因此如果某个库或其他版本的jQuery已经在使用它,它将通过调用jQuery.noConflict()
返回给它们
jQuery.noConflict()
还返回对该jQuery的引用,因此它将被传递到代码的$
我希望这是清楚的
额外:
从几天前发布的CoffeeScript 1.3开始,您可以将其用于顶级函数包装器,这一点更清楚:
do ($ = jQuery.noConflict()) ->
# ...
# your code
# ...
您将如何完成您概述的“加载”?这是另一个使用标记的远程获取吗?本文展示了一种很好的跨浏览器加载javascript文件和执行回调的方法。非常感谢。我知道这项技术,但很高兴看到一个带有回调函数的示例。然而,我仍然想知道是否有一种方法可以做到这一点,而不需要额外的远程获取;在最初加载的JS文件中一次完成所有操作。感谢您给出清晰的答案!很高兴知道,在编写代码之前对jQuery进行concating可以确保我拥有它,并且整个设置不会发生冲突。有一个问题:如果我在Coffeescript中声明一个类,并在类体中执行$=jQuery.noConflict()调用,会发生什么?我会把它放在类XYZ声明之后。保持一切不变,它也能顺利工作吗?
do ($ = jQuery.noConflict()) ->
# ...
# your code
# ...