如何将我自己的 jQuery 版本与浏览器化模块一起使用

2023-12-01

(我应该预先澄清:我的问题是关于 Javascript 中的闭包和客户端模块模式。这不是关于如何使用 jQuery.noConflict()。)

我有一些 Javascript,人们可以将其添加到他们的网站中。我希望我自己的代码能够访问 $ 变量,该变量解析为独立于页面加载的特定版本的 jQuery。如果我的所有代码都在一个文件中,在我定义的闭包内,这很容易。但我正在努力寻找一种干净的方法来使用模块模式来执行此操作,其中我的代码位于单独的闭包中。

背景(即显而易见的事情isn't问题)

当我的所有代码都在一个文件中时,这很容易。我可以在最外面的闭包中创建一个 $ var 并使用 $.noConflict(...) 来确保外部页面保留其自己的 jQuery 版本。像这样的东西:

// This is easy and works as you'd expect
(function() {

    var $; // The $ var in my local scope that the rest of my code can use.

    function loadMyVersionOfjQuery() {
        insertTheAppropriateScriptTagAndWaitForTheScriptToLoad(function() {
            // Set the $ in my local scope and restore the global jQuery.
            $ = jQuery.noConflict(true);
        }
    }

    loadMyVersionOfjQuery();

    ... etc. ...
})();

现在我正在使用 browserify 将代码分解为单独的文件,这不再那么容易了。最麻烦的是我的 jQuery 版本是异步加载的。因此,在处理我的模块 require() 时,我的 jQuery 版本尚未准备好。这使我无法在模块闭包的顶层简单地创建和分配 $ var。

我研究过的一些想法

  1. 如果我可以将模块的初始化推迟到 jQuery 运行之后,那么我的每个模块都可以定义自己的 $ var。但这似乎不可能。看起来我的 require(...) 调用被积极地遍历,即使我试图将它们隐藏在函数回调中(browserify 似乎实际上解析了 JS 以找到 require 语句)。
  2. 如果我可以定义一个动态代理对象,我可以使用代理初始化我自己的 $ vars,该代理稍后将委托给我加载的 jQuery 版本。但Javascript不支持动态代理模式。
  3. Browserify 实际上定义了一个闭包,当我的所有模块“转换”为单个文件时,它将对其进行包装。如果我能以某种方式给它一段代码插入到这个闭包中(简单地“var $;”),我就可以做生意了。但我还没有找到任何方法来做到这一点。
  4. 作为最后的手段,我想到我可以围绕 browserify 输出创建自己的闭包,并在那里定义我需要的作用域变量。通过处理输出文件或通过对 browserify 内容进行几个简单文件的巧妙串联(类似于“(function(){var $;”+bundle.js +“})();”。但这是太老套了。

有人有什么想法吗?如何在多个文件中开发客户端 Javascript 模块,但仍能将所有代码一起关闭?


可能我是唯一遇到这种情况的人(Browserify + 我想在所有模块中使用的异步加载库),但我将分享我刚刚提出的解决方法案件...

我最终定义了一个模块,该模块异步加载 jQuery,然后在准备就绪时通知侦听器。它基本上是对异步“需求”的非常简单的支持。我所有想要使用 jQuery 的模块最终都会有一小段样板代码,如下所示:

var $; require('./jquery-provider').onLoad(function(jQuery) { $=jQuery; });

它并不完美,但很简单。它之所以有效,是因为我的库的入口点启动了我的“jQuery 提供程序”,并在调用我的所有其他模块之前等待准备好的回调。因此,尽管我的模块在解决所有依赖关系时都被 Browserify 积极执行,但在我所需的库可用并传递给它们之前,模块内的任何函数都不会运行。

(如果这个模式对其他人有用,我可以分享更多代码。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将我自己的 jQuery 版本与浏览器化模块一起使用 的相关文章

  • 如何使用 jest 模拟第三方库

    我正在开发一个node js应用程序使用nestjs我有一堂课叫LoggerService如下 export class LoggerService private logger Rollbar constructor this logge
  • Leaflet js虚构地图

    我是 Leaflet 的新手 我想了解如何创建完全交互式的虚构地图 我有一张图像想要转换为传单地图 该图像基本上像图表一样具有许多连接和点 我想首先将该图像转换为地图 能够将鼠标悬停在这些点上 突出显示它们并显示有关它们的信息 并且还可以在
  • Node.js - console.log 不显示数组中的项目,而是显示 [Object]

    我在注销对象内数组的内容时遇到问题 实际的物体看起来像这样 var stuff accepted item1 item2 rejected response Foo envelope from The sender to new item1
  • 仅一页 JavaScript 应用程序

    您是否尝试过单页 Web 应用程序 即浏览器仅从服务器 获取 一页 其余部分由客户端 JavaScript 代码处理 此类 应用程序页面 的一个很好的例子是 Gmail 对于更简单的应用程序 例如博客和 CMS 使用这种方法有哪些优点和缺点
  • Google Chrome 106 可拖动导致元素消失

    使用拖放元素时 绝对定位元素中包含的大多数其他元素都会从屏幕上消失 如果我调整窗口大小 这些元素会出现 但在开始拖动时会再次消失 我在最新版本的 Google Chrome 106 和 Beta 版本 107 0 5304 18 以及现在的
  • 是否有任何非轮询方式来检测 DOM 元素的大小或位置何时发生变化?

    很长一段时间以来 我一直在寻找一种方法来检测 DOM 元素的大小或位置何时发生变化 这可能是因为窗口调整了大小 或者因为向该元素添加了新的子元素 或者因为在该元素周围添加了新元素 或者因为 CSS 规则已更改 或者因为用户更改了浏览器的字体
  • 在d3.js中将2D形状转换为3D,并根据ANGULAR中的值调整高度

    我正在使用 d3 js v6 创建以下 2D 图表表示的 3D 图表 这个圆圈中有多个正方形 每个正方形都根据值分配了一种颜色 值越大 正方形越暗 现在我想将其转换为 3D 形状 其中当值变高时 只有特定正方形的高度会增加 因此结果在某种程
  • IE 中的 jQuery .width(val) 错误 - 无效参数

    通过ajax加载内部div book table 后 我想调整正文的宽度以适应更大的内容 var new width parseInt book table css width 407 body width new width 在 FF 和
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • JS用正则表达式替换数字

    我有元素的标识符 如下所示 form book 1 2 3 我想要的是用其他值替换该标识符中的第二个数字 我将函数 match 与以下正则表达式一起使用 var regexp d d d 但它返回我包含的数组 1 2 3 2 因此 当我尝试
  • 将数组排序为第一个最小值、第一个最大值、第二个最小值、第二个最大值等

    编写一个JS程序 返回一个数组 其中第一个元素是第一个最小值 第二个元素是第一个最大值 依此类推 该程序包含一个函数 该函数接受一个参数 一个数组 该函数根据要求返回数组 输入示例 array 2 4 7 1 3 8 9 预期输出 1 9
  • 为什么“tbody”不设置表格的背景颜色?

    我在用 tbody 作为 CSS 选择器来设置background color在一个表中 我这样做是因为我有多个 tbody 表内的部分 它们具有不同的背景颜色 我的问题是 当使用border radius在细胞上 细胞不尊重backgro
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • 如果数字小于 10,则显示前导零 [重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript 相当于 printf string format https stackoverflow com questions 610406 javascript equivalent t
  • 数据表日期范围过滤器

    如何添加日期范围过滤器 like From To 我开始进行常规搜索和分页等工作 但我不知道如何制作日期范围过滤器 我正在使用数据表 1 10 11 版本 My code var oTable function callFilesTable
  • Jquery - 通过在字符串中构建 id 的 id 获取元素

    我在使用 jquery 元素时遇到问题 我正在 var 中构造名称 例如 var myId myGotId myId attr title changed myId 返回空 我想通过 id 获取我的元素 但动态构建我的 Id 连接字符串 编
  • 单击引导分页链接时调用 jquery 函数

    我想在单击引导分页链接时调用 jquery 函数 假设我想从第1页遍历到第2页 应该调用一个jquery函数 我正在使用以下代码 但它不起作用 ul pagination on click li function alert page ch
  • 需要有关 React Js 的帮助

    我是 React Js 新手 我的代码无法正常工作 请看下面 这是我的脚本文件Main jsx 该文件由 React 编译 输出放置在 dist 文件夹下的 main js 文件中 var react require react react
  • 防止文本区域出现新行

    我正在开发聊天功能 使用 Vue 并使用文本区域作为输入 以便溢出换行 并且对于编写较长消息的用户来说更具可读性 不幸的是 当用户按下 Enter 键并提交时 光标会在提交之前移动到新行 从而使用户体验感觉不佳 关于如何使用普通 Javas
  • 单击列表时使用 bootstrap Dropdown 防止下拉菜单消失

    我正在使用使用引导下拉菜单 http twitter github com bootstrap javascript html dropdowns生成下拉菜单 我想防止点击菜单时菜单消失 我已经实现了以下代码 但它不起作用 知道如何修复它吗

随机推荐

  • jQuery ajax,等到 beforeSend 动画完成

    HTML 和 CSS a href link a img src http 2 bp blogspot com OIHTbzY7a8I TOaiTKLqszI AAAAAAAAAHM eb3iiOqxzKg s640 Auto Audi A
  • 将对象分割成块

    我有一个对象 var object 232510350 672 232510352 672 232510353 672 232510356 672 232510358 672 232510359 672 232510360 672 我想将它
  • Python IndexError:列表索引超出范围。无法通过索引访问

    我在用pySerial读取TTL字节流 读取两个字节 CheckSumByte b for b in ser read 2 print CheckSumByte print type CheckSumByte print str len C
  • 当鼠标悬停在 tkinter 单选按钮上时,它会被选中[重复]

    这个问题在这里已经有答案了 我在 tkinter 中使用 Radiobuttons 我可以很好地选择它们 但是当鼠标悬停在其中一个选项上时 它会被选中 而无需我实际单击鼠标左键 我已经考虑过将单选按钮的状态更改为禁用 但显然我将无法选择禁用
  • JQuery 1.3.2 vsdoc 不生成 Visual Studio 智能感知

    过去我使用过 JQuery 1 2 vsdoc 文件 它为 vs2008 sp1 生成智能感知 我最近下载了最新版本的 JQuery 1 3 2 和 JQuery 1 3 2 vsdoc 文件 当我尝试在 vs2008 中获取 jquery
  • Bash 命令作为变量

    我试图将 sed 命令的开头存储在变量中 如下所示 sedcmd sed i 后来我执行这样的命令 sedcmd s orig pkg package name g f 但这不起作用 使用 bash x 运行脚本 我可以看到它正在扩展 如下
  • 如何在 MVC 中保持滚动位置?

    我正在开发一个 MVC 项目 并且很喜欢学习它 虽然有一些成长的烦恼 但一旦你解决了它们 那就不错了 在 WebForms 世界中非常简单的一件事是维护页面上的滚动位置 您要做的就是将MaintainScrollPositionOnPost
  • 无法对深度学习图像执行 sudo

    我安装了最新的 Google Cloud深度学习虚拟机今天的图片 VM启动后 我能够做到sudo i通过 SSH 网络成功 登录后 我开始在后台运行 Tensorflow 模型训练 使用 几个小时后我无法以 root 身份登录 我收到以下消
  • Javascript:创建持久绑定函数

    我意识到这样的问题经常被问到 在过去的几天里我可能已经阅读了其中的每一个问题 试图了解如何解决这个问题 但在这种情况下 虽然我相当有信心 但我知道这是为什么发生这种情况 我正在努力实施实际的解决方案 我正在使用 Node js 构建一个小型
  • 使用 alpha png 和背景重复时出现 IE10 伪像

    我在 Windows8 下的 IE10 中遇到以下问题 仅使用带有重复 x 背景的简单 div 并且在使用透明 png 工件时出现 结果 http s18 postimg org 9tn3dlsqx artifacts png 这是示例代码
  • PyCharm 使用海龟出现错误语法错误

    下面的代码工作完美 但是 PyCharm 抱怨语法错误forward 100 usr bin python from turtle import forward 100 done Since turtle是一个标准库我认为我不需要做额外的配
  • 在openlayers3中不使用任何图像绘制箭头

    如何在 Openlayers 3 地图中的矢量图层上绘制箭头 我尝试使用 canvaselement 创建箭头 但不知道如何在 ol3 地图上绘制它 画布元素不是必需的 您可以从以下位置获取箭头示例Openlayers 网站并添加 2 个自
  • ssh 动态端口转发

    我想使用 ssh动态端口转发在我的安卓代码中 我用过图书馆jcraft 但不幸的是这个库不支持动态端口转发并且只是支持本地端口转发 and 远程端口转发 换句话说 我想在我的 android 代码中像这样进行 ssh ssh D 10000
  • javascript按空格分割字符串,但忽略引号中的空格(注意不要也用冒号分割)

    我需要帮助在 javascript 中按空格 分割字符串 忽略引号表达式内的空格 我有这个字符串 var str Time Last 7 Days Time Last 30 Days 我希望我的字符串被分割为 2 Time Last 7 D
  • Rails 子控制器?

    我对 Rails 还很陌生 有一个问题我不太明白 四处寻找架构上 正确 的方法 问题与我所说的子控制器有关 场景是 这 我有一系列页面 其中有一个包含某种形式的面板 一些信息 想想 gitHub 右上角的用户面板 因此 在我的应用程序中 我
  • Oauth2认证成功后获取用户信息

    在我的 iPhone 应用程序中 我使用 google 登录Oauth2 我正在关注这条指令并成功登录 void viewController GTMOAuth2ViewControllerTouch viewController fini
  • 如何反转 Java 中字符串的大小写?

    我想改变一个字符串 使所有大写字符变成小写 所有小写字符变成大写 数字字符将被忽略 所以 AbCdE123 变成 aBcDe123 我想一定有一种方法可以迭代字符串并翻转每个字符 或者也许有一些正则表达式可以做到这一点 Apache Com
  • Sass 中 @if 语句中的 @import

    我只想加载登录页面所需的 css 以提高性能 在我的其他页面上 我想要一个分组的 css 文件 该文件将缓存在包含所有 css 的每个页面上 我有以下文件 minifiedcssforloginpage scss grouped pages
  • Android 模拟按键

    如何以编程方式模拟 Droid 上的按键操作 我想模仿手动按键 在机器人上显示有人正在按键 但它是以编程方式完成的 有一些解决方案涉及IWindowManager 但这在新的 SDK 中不再是一个选项 您可以使用检测 即从活动的 onCre
  • 如何将我自己的 jQuery 版本与浏览器化模块一起使用

    我应该预先澄清 我的问题是关于 Javascript 中的闭包和客户端模块模式 这不是关于如何使用 jQuery noConflict 我有一些 Javascript 人们可以将其添加到他们的网站中 我希望我自己的代码能够访问 变量 该变量