未捕获的ReferenceError:myliba没有使用最简单的现实requireJS示例定义

时间:2014-07-11 22:26:03

标签: jquery requirejs

main.js

中的

    require.config({
    waitSeconds: 15,
    urlArgs: "version=" + new Date(), //to make sure we have no caching problems during development
    deps: ["main"],
    baseUrl: '../js/',
    paths: {
    "jquery": "jquery-1.11.0",
    "myliba": "myliba"
    },

    shim: {
     "myliba": {
        exports: "myliba",
        deps: ["jquery"]
      },
      "jquery": {
        exports: "$"
      }
    }
    });

require(["myliba"], function () {
    myliba.test();
});
myliba.js

中的

define("myliba", function () {

            var myliba = {};

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

});

结果

  

未捕获的ReferenceError:未定义myliba

如果我将alert("lovin requirejs");添加到myliba我很好地获取警报,因此它会被加载和评估。我的myliba定义虽然没有导出。

我读--->here<---,如果你以shim方式这样做,就不能在函数调用中声明参数。

就我而言,除了垫片之外没有其他干净的方法。想象一下我有: jquery,jqueryui,myliba,mylibb

myliba依赖于jquery

mylibb取决于依赖于jquery的jqueryui和myliba

除了垫片之外我无法想出一个干净的方式

2 个答案:

答案 0 :(得分:1)

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) { ... });

答案 1 :(得分:-1)

好吧,所以我在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;
}

所以

define("myliba", function () {

            var myliba = {};

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

});

解决问题