首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ReqiureJS拥有第三方库的本地实例

问使用ReqiureJS拥有第三方库的本地实例
EN

Stack Overflow用户
提问于 2012-08-20 04:09:18
回答 1查看 172关注 0票数 0

我的应用程序的JavaScript使用jQuery和jQuery插件,并在我无法控制的“恶意”环境中运行(这是eCommerce平台的PHP扩展)。因此,无法确定我的jQuery代码是否会在有人附加他的jQuery /插件实例(由其他扩展引入)之前执行,或者在此之后执行,或者有人会在页面呈现后动态加载jQuery。

基本上,问题是其他扩展也可以使用jQuery (带有插件),仅仅使用标签连接jQuery将不起作用。

我有一种强烈的感觉,RequireJS可能会帮助我将所需的jQuery版本加载到封装的作用域中,而不会污染全局作用域(因此其他扩展仍然可以正常工作)。然后,我将把我的所有代码包装到"require“语句中,它将使用自己的一组jQuery和插件来运行。我试过了,它的效果不错(虽然还没有在生产环境中测试过),但是用了一些奇怪的方式。看起来this question和我遇到的问题有关。同时回答建议使用兼容AMD的jQuery版本。但是插件呢?我不认为我使用的所有插件都有这样的版本。

所以问题是:

是否可以使用RequireJS来涵盖这样的用例(在未定义的环境中运行jQuery+plugins )?如果可以在那里使用RequireJS,那么任何示例代码或如何正确执行此操作的解释都将不胜感激。如果没有办法用RequireJS来解决这个问题,你认为处理这个问题的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-20 04:49:37

是的,我相信RequireJS可以帮你解决这个问题。不过,据我所知,你得做些跑腿的工作。看看(截至2012-08-19)最新jQuery的来源:link。在底部,您可以看到正在设置window.jQuery,定义了jQuery和$。在那之后会发生对AMD loader的define调用,所以jQuery无论如何都在全局范围内。您想要做的是保证您自己的jQuery和插件版本与其他jQuery实例和插件隔离,对吗?

将您的自定义自定义和插件放入它们自己的目录中(让我们称之为“jQuery”),并在脚本的define调用中指定依赖项时使用该目录。您可能希望修改您的jQuery版本,方法是将其包装在define调用中,并在最底部返回jQuery对象,去掉jQuery的window.jQuery和window.$赋值以及进程中的默认define调用(记住,它们都在底部)。然后,您需要将所有插件包装在define调用中,并指定您自己的jQuery版本作为依赖项。示例:

代码语言:javascript
复制
define(['jqcustom/jquery'], function(jQuery) {
    //inside this method 'jQuery' will override any predefined global window.jQuery

    //in case any plugins use the $ variable, define that locally too
    var $ = jQuery;

    //... plugin code ...

});

如果你使用RequireJS的优化器,它可以用它的shim config选项为你包装插件。jQuery插件的工作原理是将方法添加到jQuery的prototype对象中,所以我相信只要您将相同的jQuery (您的自定义jqcustom/jquery one)传递给每个带有define包装的插件,插件的扩展都将设置在相同的对象上,并且可以在随后的define调用中访问,指定您的自定义jQuery或自定义插件作为依赖项。祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12029617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档