javascript - 使用 require.js 扩展 jquery(多个扩展)?

标签 javascript jquery requirejs extending

我正在转换一些旧的网站代码,以尽可能利用 AMD 和按需加载。我遇到的一件事是,该网站在某些页面上使用旧版本的 jquery(我已经弄清楚如何在代码被重构并使用新版本进行测试之前配置它),但原始开发人员还添加了一个某些表单的 jquery 扩展数量。

我最终也想重构这些,但由于它使用许多新的辅助函数扩展了 jquery,我想知道如何配置 require.js 以确保加载这些扩展。最糟糕的情况是,我可以将其附加到 jquery.js 上,但我不希望这样做,因为某人可能不知道它们在那里,并替换 jquery 本身,从而破坏依赖于这些扩展的任何代码。

扩展 block 看起来像:

jQuery.fn.extend({
    vshow: function(speed,callback) { /* ... */ },
    vhide: function(speed,callback) {  /* ... */  },
    vshowif: function(b) {  /* ... */  },
    showif: function(b) {  /* ... */  },
    selected: function(i) {  /* ... */  },
    addOptions: function(a,f,p) { /* ... */  },
    setOptions: function(a,f,p) {  /* ... */  },
    validateForm: function(f) {  /* ... */  },
    lt: function(n) {  /* ... */  },
    gt: function(n) {  /* ... */  }
});

我知道我也可以将它们分成多个 jquery.function.js 文件,但其中一些只有几行。我想知道是否有一种方法或正确的方法是什么来确保每当使用 jquery 时都在 jquery 之后加载它们?

最佳答案

我有一个临时修复程序,该修复程序基于有关我正在升级的代码的几个因素,但这不是一个理想的解决方案。 (我想最终的解决方案是将自定义扩展分成单独的、单独的插件文件,并将它们包含在需要它们的依赖项列表中)

我正在处理的问题之一是这是一个旧的代码库。我目前没有时间完全升级/更新所有库并彻底测试它们,因为当前项目是优先事项。但现有代码使用的 jquery 版本是旧版本,可能甚至不完全是 AMD 版本。 我的新代码使用的功能相当基本(主要是简单的 ajax 调用),并且适用于新版本和旧版本。我无法确定遗留代码的用法或这些扩展的工作原理。因此,使用旧的 jquery 提供了一个更简单的解决方案。

因此,当我告诉 require.js 加载“旧”jquery 以保持与遗留代码的兼容性时,它本质上是重新加载 jquery 并破坏了原始表单使用的扩展函数,导致它当未定义扩展函数时,会默默地失败。

我暂时解决了这个问题,方法是将上面的扩展 block 放在它自己的 .js 文件中,我称之为 jquery-extended.js。然后我添加一个垫片配置:

    "jquery.extended" : {
        "deps" : ['jquery'],
        "exports" : "$"
    },

然后,我当前的任何需要 jquery 的库/模块,我都会将其依赖项更改为 jquery.extended 而不仅仅是 jquery,它似乎至少允许代码工作。

但是如果有任何其他关于处理此问题的建议,我很想听听。

关于javascript - 使用 require.js 扩展 jquery(多个扩展)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59650282/

相关文章:

javascript - jQuery Mobile swipeleft 和 swiperright 响应不太灵敏

javascript - 动态设置 RequireJS i18n 语言环境

javascript - 如何将一个 VS2013 项目中的通用 typescript 代码共享到一个单独的 VS2013 项目中

JavaScript 即时编译

javascript - 如何简化这个javascript?

jquery - 为什么 Jquery .attr() 对 IE 7/8 中的我的对象不起作用?

javascript - RequireJS 优化器 - 仍然尝试从旧目录加载文件 - w/Django

javascript - 如何从 parent 中选择一组 child ?

javascript - 切换到深色模式 HTML 时添加动画

javascript - Controller 函数可以将数据绑定(bind)到元素的数据属性吗?