如何将 jQuery 嵌入/导入到另一个 JavaScript 库中,而不会与网站上部署的 jQuery/其他库发生潜在
How to embed/import jQuery into another JavaScript library without causing potential clashes with jQuery/others deployed on the website?
我正在开发一个内部使用 jQuery 的 JavaScript 库。但是,当需要部署时,我宁愿简化事情(w.r.t.部署),而不用担心环境是否已经(或没有)jQuery已经包含在<head>
中。
我应该提到我的库在 Coffescript 中实现为一个类,生成的 .js 文件具有默认的函数包装器来隔离范围。
我可以想到这个问题的一些解决方案:
-
询问网站管理员他们是否已经存在jQuery。如果是的,只需包括库本身。如果没有,则包括 jQuery +库,可能在一个文件中并连接起来。部署更难,但问题可能会得到解决。
-
创建一个连接 jQuery 和我的 lib 代码的文件,并且始终让网站管理员只包含此文件。为防止冲突,在 jQuery 代码之后立即执行
var myJ = jQuery.noConflict()
。 -
按照上面的 (2) 执行,但在封装的 Coffeescript 类中调用
var myJ = jQuery.noConflict()
。
总之,这项挑战的目标是:
- 绝对避免部署网站上的任何破损,无论他们可能正在使用什么
- 使部署尽可能简单
- 如果可能的话,避免不必要的jQuery传输
我担心的是:
- 如果网站已经有jQuery,但需要一个较旧/较新的网站怎么办版本?
- 如果我的
noConflict()
电话破坏了他们的某些内容怎么办结束?
解决这种情况的最佳方法是什么?我错过了什么吗?
CoffeeScript 有一个 -b 选项,可以在没有顶级函数包装器的情况下进行编译。使用此方法,可以改用自己的顶级函数包装器。
即
(($) ->
# ...
# your code
# ...
)(jQuery.noConflict())
然后,作为构建过程的一部分,将 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
# ...
如果你的结束脚本作为闭包,你可以简单地将其作为参数传递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);
必须使用 window.jQuery,因为如果未声明 jQuery,则只会生成错误
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 如何使用jQuery自动打开页面上的所有链接
- 如何使用jquery在填充自动完成的值后使文本框只读
- jQuery:循环一个具有不同超时值的循环
- 用程序搜索JQuery数据表中的文本
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jQuery匹配JSON对象的部分文本
- Jquery POST未填充数组
- JQuery使计数器每次更改时都会增加
- 如何在Angular2中使用jQuery插件
- JQuery-在本地工作,但未定义$,仅在部署的站点上定义
- 如何将 jQuery 嵌入/导入到另一个 JavaScript 库中,而不会与网站上部署的 jQuery/其他库发生潜在
- Rails-heroku部署jquery和css错误,在本地设置amazons3变量
- 部署页面时Jquery ajax调用不起作用
- 在tomcat和weblogic上部署时出现JQuery问题
- JQuery$.post在VS2010实例中有效,但在IIS 7.5中部署时无效
- 使用jQuery的toChecklist插件的UI /部署到服务器的问题-步骤查看
- 在Gunicorn/Nginx(在DigitalOcean上)上部署Django站点时出现JS/Jquery问题
- 在weblogic 11g中部署时,对象不支持jquery的此属性或方法错误
- Javascript,Jquery在本地主机中工作正常,但在部署的站点中不能