在最新的firefox 21.0中使用requireJS加载多个模块失败

时间:2013-06-19 12:35:37

标签: javascript requirejs

我尝试了3个差异模块,定义如下

credit.js

        define(function(){
            return{
                getCredits: function (){
                    console.log("Inside getCredits");
                    return 10;
                }
              }
        });

product.js

        define(function(){
          console.log("Inside product");
          return {
            bookTheProduct: function(){
            console.log("Inside bookTheProduct");
            return true;
          }
         }
        });

pruchase.js

        require.config({
            shim: {
                purchase: {
                    deps : ["credit","product"]
                }
            }
        });
        define(["credit","product"], function(credit,product){
            console.log("purchaseproduct");
            return {
                 purchaseProduct: function (){
                     console.log("Inside of PurchaseProduct");
                     var credits = credit.getCredits();
                     if(credits > 0){
                         product.bookTheProduct();
                         return true;
                     }
                     return false;
                 }
            }
        });

在app.js中使用它

        require(["purchase"],function(purchase){
          purchase.purchaseProduct();
        })

在firefox 21.0中试过这个,在加载购买时加载了信用模块,但从未加载过产品模块。如果我反转订单,它会加载产品模块,但不会加载信用模块。在RequireJs文档和mozilla文档中找不到任何帮助。也没有看到任何人碾压它。有没有人遇到过这个问题?我做错了什么,如果可以,请指出我的错误。     谢谢

1 个答案:

答案 0 :(得分:0)

如评论中所述,shim配置适用于不支持AMD模块定义的Javascript文件,用于导入例如向window范围添加一些变量的javascript库(如jQuery的)。详细了解shim here

在您的情况下,您的所有模块都是AMD模块(它们都是使用define定义的),因此不需要shim。相反,您可以使用paths配置为模块创建别名。另外,建议您将require.config移出模块并进入发生require电话的位置。

因此,从purchase.js文件中删除require.config,然后将以下内容添加到app.js -file的开头

require.config({
  // with the paths -config, you create aliases for you modules
  // basically you tell require that this file contains definition for module x
  paths: {
    'purchase': 'path/to/purchase', // no .js file ending in the path
    'credit': 'path/to/credit',
    'product': 'path/to/product'
  }
});

您可以阅读有关require.config here的更多信息。

现在您已经配置了RequireJS,它知道模块的购买地点,信用和产品的位置以及它们将加载它们。在此之后,在声明RequireJS依赖项时,可以使用它们各自的别名引用它们。

希望这有帮助!