Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript requirejs不使用shim将本地jquery公开给jquery插件_Javascript_Jquery_Jquery Plugins_Requirejs_Almond - Fatal编程技术网

Javascript requirejs不使用shim将本地jquery公开给jquery插件

Javascript requirejs不使用shim将本地jquery公开给jquery插件,javascript,jquery,jquery-plugins,requirejs,almond,Javascript,Jquery,Jquery Plugins,Requirejs,Almond,我使用require编写了一个jQuery插件,将其包装在almond中,并通过另一个应用程序中的shim配置加载它。不幸的是,require将全局jQuery公开给插件,而不是本地插件。我的代码: plugin.js main.js 难道shim不应该加载插件代码,将本地jQuery模块暴露在插件的全局范围内吗?我认为问题在于,您试图在AMD模块中使用shim,而实际上该功能是为非AMD模块设计的。发件人: 请记住:仅对非AMD脚本使用垫片配置,这些脚本尚未调用define()。如果在AMD脚

我使用require编写了一个jQuery插件,将其包装在almond中,并通过另一个应用程序中的shim配置加载它。不幸的是,require将全局jQuery公开给插件,而不是本地插件。我的代码:

plugin.js main.js
难道shim不应该加载插件代码,将本地jQuery模块暴露在插件的全局范围内吗?

我认为问题在于,您试图在AMD模块中使用
shim
,而实际上该功能是为非AMD模块设计的。发件人:

请记住:仅对非AMD脚本使用垫片配置,这些脚本尚未调用define()。如果在AMD脚本上使用,垫片配置将无法正常工作,尤其是导出和初始化配置将不会被触发,并且在这些情况下,deps配置将令人困惑

如果您希望将jQuery排除在全局范围之外,并且仍将其用于其他模块,则可以遵循以下方法:

如果您的所有模块(包括依赖于jQuery的任何第三方jQuery插件或库代码)都是AMD兼容的,并且您希望在调用require(['jQuery'])时避免在全局命名空间中使用$或jQuery,您可以使用映射配置将jQuery的使用映射到调用noConflict的模块,并为“jQuery”模块ID返回该jQuery值


另请参见一个分步示例。

既然
$
不是require回调中的参数,那么
$
怎么可能不是plugin.js中的全局jQuery?我不明白你的问题。requirejs文档说,应该将shim与希望使用全局范围变量的插件一起使用,例如jquery插件。这就是我在这里要做的:我试图像插件代码中的任何插件一样使用全局jQuery对象,然后填充它。我可能也误解了。我原以为您希望plugin.js中的
window.jQuery==$
为FALSE,但不明白为什么您会这样想。如果让main.js具有
require(['jquery','plugin'],function(){
(去掉$as参数)会怎么样?我确实希望它是错误的。我希望它是错误的。我希望在插件中加载代码,本地jQuery暴露在插件的全局范围内,运行代码,然后删除全局暴露。你的解决方案就是我目前拥有的,但它与我使用的其他jQuery插件的工作方式不同我希望它能在依赖jquery的require应用程序中与标准垫片一起工作。
(function() {
    // almond code
    // other dependencies
    require(dependencies, function (dependencies) {
        !function($) {
            // window.jQuery == $ -> true
            $.fn.plugin = function(options) { return this; }
        }(jQuery);
    });
})();
require.config({
    paths: { 'jquery': 'vendor/jquery-1.9.1.min' },
    shim: { 'plugin': ['jquery'] }
});

require(['jquery','plugin'], function ($) {
    // window.jQuery == $ -> false
    $('#plugin').plugin(options);
    // error, object [Object object] has no method "plugin"
);