Jquery 未捕获引用错误:myliba不是用最简单的现实requireJS示例定义的

Jquery 未捕获引用错误:myliba不是用最简单的现实requireJS示例定义的,jquery,requirejs,Jquery,Requirejs,在main.js中 在myliba.js中 导致 未捕获引用错误:未定义myliba 如果我添加了alertlovin requirejs;在myliba中,我很好地获得了警报,因此它被加载和评估。但我对myliba的定义没有导出 我了解到,如果您使用shim方法,则无法在函数调用中声明参数 就我而言,除了垫片,没有其他清洁方法。想象一下我有: jquery,jqueryui,myliba,mylibb myliba依赖于jquery mylibb依赖于jqueryui,而myliba依赖于jq

在main.js中

在myliba.js中

导致

未捕获引用错误:未定义myliba

如果我添加了alertlovin requirejs;在myliba中,我很好地获得了警报,因此它被加载和评估。但我对myliba的定义没有导出

我了解到,如果您使用shim方法,则无法在函数调用中声明参数

就我而言,除了垫片,没有其他清洁方法。想象一下我有: jquery,jqueryui,myliba,mylibb

myliba依赖于jquery

mylibb依赖于jqueryui,而myliba依赖于jquery


除了shim,我想不出一个干净的方法,好吧,所以我在jQuery文件中看到了这一点,似乎这就是必须要做的事情

// Expose jQuery and $ identifiers, even in
// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (#13566)
if ( typeof noGlobal === strundefined ) {
    window.jQuery = window.$ = jQuery;
}
所以


解决问题

amd模块通过在末尾返回字符串、函数和对象来解决问题

define("myliba", ["jquery"], function ($) {
    return {
        test: function () {
            alert("requireJs is easy to use, it is well worth the hassle");
        }
    };
});
UPD:

我希望现在我理解您的意思是正确的,此解决方案将帮助您:

require.config({
    paths: {
        jquery: 'jquery-1.11.0',
        jqueryui: 'path/to/jquery-ui'
    },
    shim: {
        jquery: {
            exports: '$'
        },
        jqueryui: {
            deps: ['jquery'],
            exports: '$'
        }
    }
});

define('myliba', ['jquery'], function($) { ... });

define('mylibb', ['myliba', 'jqueryui'], function(myliba, $) { ... });

require(['myliba', 'mylibb'], function(myliba, mylibb) { ... });

没错。但我很抱歉地告诉你,当使用垫片时它不起作用。去掉$符号,这是另一个错误为什么$是错误的?如果将jquery置于dependenciesread中,它将被传递给参数。请阅读我文章中的链接。它是这样写的:-->here@Toskan你把那篇文章理解错了。据说,如果您没有在依赖项数组中设置lib,则无法在参数中显示遗嘱。@Toskan但我仍然不明白您的lib是否定义为普通amd模块,如果您可以按照回答中所述设置所有依赖项,为什么需要将其放入垫片中?这是使用shimIf的唯一方法,如果您的lib定义为amd模块,为什么您可以想用垫片吗?垫片用于非amd LIB
define("myliba", function () {

            var myliba = {};

            test: function (){
             alert("requireJs is easy to use, it is well worth the hassle");
            }
     window.myliba = myliba;

});
define("myliba", ["jquery"], function ($) {
    return {
        test: function () {
            alert("requireJs is easy to use, it is well worth the hassle");
        }
    };
});
require.config({
    paths: {
        jquery: 'jquery-1.11.0',
        jqueryui: 'path/to/jquery-ui'
    },
    shim: {
        jquery: {
            exports: '$'
        },
        jqueryui: {
            deps: ['jquery'],
            exports: '$'
        }
    }
});

define('myliba', ['jquery'], function($) { ... });

define('mylibb', ['myliba', 'jqueryui'], function(myliba, $) { ... });

require(['myliba', 'mylibb'], function(myliba, mylibb) { ... });