使用带有RequireJS的私有jquery-优化后发布
Using private jquery with RequireJS - issue after optimisation
我正在使用requireJS和jQuery的CDN版本(现在是推荐的方法)构建一个框架,在优化代码时遇到了一些问题。输出是按名称命名的,我指定每个模块都使用文档中概述的jquery的私有版本:
require.config({
// Add this map config in addition to any baseUrl or
// paths config you may already have in the project.
map: {
// '*' means all modules will get 'jquery-private'
// for their 'jquery' dependency.
'*': { 'jquery': 'jquery-private' },
// 'jquery-private' wants the real jQuery module
// though. If this line was not here, there would
// be an unresolvable cyclic dependency.
'jquery-private': { 'jquery': 'jquery' }
}
});
// and the 'jquery-private' module, in the
// jquery-private.js file:
define(['jquery'], function (jq) {
return jq.noConflict( true );
});
优化后我看到的问题是"jquery private.js"文件中没有定义"jq"。
有什么想法吗?我试过设置jq=$,但这似乎会破坏全局。
谢谢。
以下是我为获得jQuery CDN&优化示例链接自RequireJS jQuery Instructions页面,以使用粘贴在原始问题中的映射模块使用noConflict部分。
1-分叉样品
2-创建了包含此内容的文件www/js/lib/jquery-private.js
define(['jquery'], function (jq) {
return jq.noConflict( true );
});
3-修改了www/js/app.js
以粘贴map
部分,因此require.config
现在看起来像这样:
requirejs.config({
"baseUrl": "js/lib",
"paths": {
"app": "../app",
"jquery": "//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min"
},
map: {
'*': { 'jquery': 'jquery-private' },
'jquery-private': { 'jquery': 'jquery' }
}
});
4-修改www/js/app/main.js
使用jqlocal
而不是$
(只是为了向自己证明它不是全局jQuery:
define(["jquery", "jquery.alpha", "jquery.beta"], function(jqlocal) {
jqlocal(function() {
jqlocal('body').alpha().beta();
});
});
5-更改为tools
文件夹并运行:
node r.js -o build.js
6-更改为创建并运行servedir
的www-build
文件夹(什么web服务器并不重要,但这是我用于开发的)
7-浏览到本地地址&应用程序的端口号(在我的例子中是http://localhost:8000/app.html
)和锯:
阿尔法是Go!
Beta是Go!
您可以在此处看到最终结果
为了实现这一点,我改变了使用Require的方式(可能是我一直应该做的方式)。这些信息可能对其他人有用,所以我想我应该把它放在那里。
以前我在定义的模块中指定任何依赖项:
define( [ "dep1", "dep2", "jquery" ], function( var1, var2, jq ) {
这在最初运行良好,但在优化时失败了。我将依赖关系移到了包含该模块的require函数调用中,然后它在优化前和优化后都开始正常工作,jquery被私人使用:
require( [ 'jquery', 'dep1', 'dep2' ], function( jq, var1, var2 ) {
formValidator.formValidationInit( jq( el ) );
});
我没想到这会有什么不同,但看起来也一样。
同样值得注意的是,我不得不更改jquery私有文件,因为它仍然会引发一个关于"jq"未定义的问题。我现在将jq设置为等于全局$,并将其返回,以便可以临时使用:
define(['jquery'], function () {
var jq = $;
return jq.noConflict( true );
});
- 如何优化jquery动画代码
- 如何优化 jquery 脚本以提高性能
- 如何优化Jquery代码
- 优化jquery的建议
- 优化Jquery动画
- 优化 jQuery 剧透按钮
- 如何优化 jQuery 事件处理程序以提高速度
- 优化 jQuery 选择器
- 优化 jQuery 代码的重复和平
- 如何优化jquery选择的插件加载超过5万个结果
- 优化jQuery动态添加插入边框效果
- 优化jQuery事件
- 优化jquery脚本
- 如何为地理定位优化jQuery.getJSON()
- 优化jquery代码动画动作
- 优化jQuery热键
- 优化JQuery中的每个循环
- 如何为大量HTML元素优化jQuery函数?
- 优化jQuery代码的逻辑
- 优化jQuery函数