在requireJS中,定义一个命名模块以后不能覆盖前一个?

时间:2015-11-16 09:02:14

标签: javascript requirejs amd

以下是代码

// When directly defining an AMD module in a browser, the module cannot be anonymous, it must have a name.

//If you are using the r.js optimizer you can define anonymous AMD modules and r.js will look after module names. This is designed to avoid conflicting module names.

// Define a module (export)
define('a', {
   run: function(x, y){
     return console.log(x + y);
   }
 });

define('a', {
   run: function(x, y){
     return console.log(x * y);
   }
 });

// Use the module (import)
require(['a'], function(a){
    a.run(1, 2);
});

require(['a'], function(a){
    a.run(4, 6);
});

以下是JsFiddle上的演示:http://jsfiddle.net/NssGv/162/

结果为410,而不是224

对我来说意外的是,后来的define无法覆盖之前的define。这是正常行为吗?有没有人有这方面的想法?

1 个答案:

答案 0 :(得分:1)

在重新定义之前,您必须取消定义模块:

define('a', {
    run: function(x, y){
        return console.log(x + y);
    }
});

requirejs.undef('a');

define('a', {
    run: function(x, y){
        return console.log(x * y);
    }
});

另请查看requirejs.undef的文档。