我尝试了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文档中找不到任何帮助。也没有看到任何人碾压它。有没有人遇到过这个问题?我做错了什么,如果可以,请指出我的错误。 谢谢
答案 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依赖项时,可以使用它们各自的别名引用它们。
希望这有帮助!