1

我尝试使用如下定义的 3 个差异模块

信用.js

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

产品.js

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

购买.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 文档中都没有找到任何帮助。也没有看到有人抄袭它。有没有人遇到过这个问题?我做错了什么,如果可以,请指出错误。谢谢

4

1 回答 1

0

如评论中所述,该shim配置适用于不支持 AMD 模块定义的 Javascript 文件,并用于导入例如向window作用域添加一些变量的 javascript 库(如 jQuery)。阅读更多关于shim 这里

在您的情况下,您的所有模块都是 AMD 模块(它们都是使用 定义的define),所以shim没有必要。相反,您可以只使用paths配置为您的模块创建别名。还建议将您require.config从模块中移出并移至require发生呼叫的位置。

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

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的更多信息。

现在你已经配置了 RequireJS,它知道模块购买、信用和产品的位置,并且它会加载它们。之后,在声明 RequireJS 依赖项时,可以使用各自的别名来引用它们。

希望这可以帮助!

于 2013-06-19T14:56:01.060 回答