我有两个彼此相关的问题。
首先,我希望有一个名为backbone的文件夹,并且与主干作为路径中库的短名称相冲突。似乎RequireJS认为骨干/模型/用户是骨干库或其他东西的孩子。解决方案,使用大写B命名库Backbone。
第二个问题是我正在使用ModelBinder,它具有“骨干”作为依赖。解决方案,更改缩小的文件。
在RequireJS配置中,这两个解决方案看起来都不是很糟糕,但我无法弄清楚我做错了什么。
我的公用文件夹结构类似于:
public/
js/
backbone/
model/
...
view/
...
vendor/
backbone.min.js
Backbone.ModelBinder.js
...
common.js
我的common.js有这样的东西:
require.config({
baseUrl: "/js",
shim: {
'underscore': {
exports: '_'
},
"Backbone" : {
deps: ["underscore", "jquery"],
exports: 'Backbone'
}
},
paths: {
underscore: 'vendor/underscore.min',
jquery: 'vendor/jquery',
model_binder: 'vendor/Backbone.ModelBinder',
Backbone: 'vendor/backbone.min'
}
});
所以我的两个问题是:我如何保持Backbone.ModelBinder原样,并告诉requirejs当该库要求骨干时,它要求js / vendor / backbone.min.js而不“污染”我的全局路径
为什么我不能在路径中同时使用骨干(小写字母b)并拥有目录?
答案 0 :(得分:1)
一个解决方案(是的,不是那么理智)是为paths
下的每个目录包含js/backbone
个定义,即:
require.config({
...
paths: {
...
backbone: 'vendor/backbone.min', // NOTE lower-case 'b', as desired
"backbone/model": "backbone/model",
"backbone/view": "backbone/view",
... // and so on
}
});
这也意味着js/backbone
下没有模块。
另一种方法是将大写'B'保留在Backbone的模块名称中,并使用map
配置Backbone.ModelBinder.js
:
require.config({
...
paths: {
...
Backbone: 'vendor/backbone.min' // NOTE capital 'B' again
},
map: {
"model_binder": {
"backbone": "Backbone"
}
});
Thinkng回顾性地,map
可以应用于所有模块,这样每当他们请求"backbone"
(小写'b')时,您就会"Backbone"
:
require.config({
...
paths: {
...
Backbone: 'vendor/backbone.min' // NOTE capital 'B' again
},
map: {
"*": { // <------ Here difference form code above
"backbone": "Backbone"
}
});
现在,任何人都可以要求"backbone"
并获取Backbone或"backbone/model/User"
(或"backbone/module"
)并获取相应的模块。