【问题标题】:jQuery's selective modules for signalR?jQuery 的 signalR 选择性模块?
【发布时间】:2017-08-16 02:31:13
【问题描述】:

我使用 npm install jQuery --save 安装了最新版本的 jQuery。

This operation created modules folders in the node_modules folder.

由于信号器(客户端)依赖于 jQuery - 我能够做到这一点:

var jQuery = require('jquery'); // — All jQuery modules
window.$ = window.jQuery=jQuery;
require('./jquery.signalR-2.2.1.min.js'); // works since it searches window.jQuery

最终的包(包括我的代码,已缩小)约为 164 KB,其中大部分是 jQuery,我不需要所有 jQuery 的模块!

所以我开始加载选择性模块:

var jQuery = require('jquery/src/core');
window.$ = window.jQuery=jQuery;
require('./jquery.signalR-2.2.1.min.js');

错误:未捕获的类型错误:v.fn.init 不是构造函数

然后我添加了:

var jQuery = require('jquery/src/core');
require('jquery/src/core/init');
window.$ = window.jQuery=jQuery;
require('./jquery.signalR-2.2.1.js');

不同的错误:未捕获的类型错误:_pageWindow.load 不是函数

现在我不知道应该加载哪些附加模块。

问题:

为了让 signalR (v2.2.1) 工作,我应该加载哪些 jQuery (3.1.1) 模块(以及以什么顺序)?

我不想为了让信号器运行而将所有 jQuery 的无关函数加载到我的包中。

【问题讨论】:

    标签: javascript jquery npm webpack signalr


    【解决方案1】:

    所以你想要一个精简的 jQuery。正如 jQuery 的 github 的 README.md 所说,可以排除一些模块。我尝试找出该模块是否可以排除,并在下面列出:

    • × ajax$.ajax 在 signalR 中找到。
    • × ajax/xhr:一般与ajax一起使用。
    • × ajax/script:依赖于ajax/jsonp
    • × ajax/jsonpjsonp 在 signalR 中找到。
    • css:在signalR中找不到css
    • css/showHide:在signalR中找不到.show().hide().toggle().css()
    • × deprecated:找到.bind(),在jq3.0中已弃用。
    • 维度:找不到.width().height()
    • 效果:找不到.animate().slideUp().hide("slow")
    • × 事件:找到.on()
    • 事件/别名:好像可以排除,不确定。
    • event/focusin:找不到相关方法。
    • × 事件/触发器:找到.triggerHandler()
    • offset:找不到相关方法。
    • wrap:找不到相关方法。
    • core/ready:找不到相关方法。
    • × 延迟:找到.Deferred
    • exports/global:由你或 webpack 处理。
    • × exports/amd:应该被webpack找到
    • 嘶嘶声:不确定,但可能。

    总之,csscss/showHide尺寸效果事件/别名,event/focusin,offset,wrap,core/ready,exports/ globalsizzle 可以排除。

    现在让我们构建一个简化的 jQuery。

    1. download下载jquery 3.1.1 zip并输入
    2. npm i
    3. npm i -g grunt
    4. grunt custom:-css,-css/-showHide,-dimensions,-effects,-event/alias,-event/focusin,-offset,-wrap,-core/ready,-exports/global,-sizzle

    现在我们在 dist 目录中获得 jquery.jsjquery.min.js(50KB)。将其复制到您的项目并更改您的代码如下:

    var jQuery = require('./jquery.min.js');
    window.$ = window.jQuery=jQuery;
    require('./jquery.signalR-2.2.1.min.js');
    

    如果你不想自己构建,我把输出文件放在这里:(如果没有,请自己构建)

    http://blackmiaool.com/res/share/jquery.js

    http://blackmiaool.com/res/share/jquery.min.js

    如果 signalR 没有按预期工作,请尝试使用完整的 jQuery,并考虑包含 event/aliassizzle 模块。

    【讨论】:

    • 在第 4 点 - 你在哪里调用 jQuery 的 grunt ?
    • @Royi 在步骤1中从zip解压出来的目录中
    • @Royi 你忘了要求jquery/src/deprecated
    • @Royi 你能给我一个测试用例来验证吗?
    • @Royi 来自jquery/src/manipulation 看来你不能这么要求。在我的答案的列表中找不到一些关键部分。为什么不用 grunt 构建它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    相关资源
    最近更新 更多