我正在转换一些旧的网站代码,以尽可能利用 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/