2013-07-19 19 views
9

是否可以使用require.js來設置整個文件夾的依賴關係?是否可以使用require.js設置文件夾的依賴關係?

我知道,你可以使用墊片配置來設置依賴關係文件:

require.config({ 
    shim: { 
     'plugin/backbone/xyz': { 
      deps: ['lib/backbone'], 
      exports: 'Backbone' 
     } 
    } 
}); 

在上面的例子中,我定義插件骨幹/ XYZ的依賴關係,但我想定義的依賴所有骨幹插件:

require.config({ 
    shim: { 
     'plugin/backbone/': { // I would like to specify a folder here but it doesn't work. 
      deps: ['lib/backbone'], 
      exports: 'Backbone' 
     } 
    } 
}); 

我認爲我一旦發現一個關於它的要點在GitHub上,但我似乎無法再找到它。


澄清:這是不是需要整個文件夾,但它設置的依賴關係 - 什麼是文件夾中的所有文件需要他們準備初始化之前,他們中的每一項。這將通過增加墊片的所有文件來完成,但是我想只需要一次添加墊片的整個文件夾:

shim: { 
    'lib/backbone': { 
     exports: 'Backbone' // <- No use of .noConflict() so all plugins can be required and export Backbone as well. 
    }, 
    'plugin/backbone/a': { 
     deps: ['lib/backbone'], // <- Require backbone 
     exports: 'Backbone' // <- Export backbone 
    }, 
    // Same requirement and folder for these files: 
    'plugin/backbone/b': { 
     deps: ['lib/backbone'], 
     exports: 'Backbone' 
    }, 
    'plugin/backbone/c': { 
     deps: ['lib/backbone'], 
     exports: 'Backbone' 
    } 
} 
+0

這將是一個很棒的功能。特別是如果我使用Angular這樣擁有大量控制器,服務等的東西,只需說我的「應用程序」文件夾取決於角度即可。 –

回答

2

不,你不能很容易地創建一個通配符依賴添加的所有文件在配置本身的文件夾下。但是,您可以在配置之前創建一個循環,並添加所需的任何依賴關係。

var config = { 
    shim: { 
     'plugin/backbone/xyz': { 
      deps: ['lib/dependency'], 
      exports: 'Backbone' 
     } 
    } 
}; 
for(var shim in config.shim) { 
    if(shim.indexOf('plugin/backbone/') == 0) { 
     if(config.shim[shim].deps == null) { 
      config.shim[shim].deps = []; 
     } 
     config.shim[shim].deps.push('lib/backbone'); 
    } 
} 
require.config(config); 

這是我能想到的,而不必重寫的需要的功能,自己一個的唯一途徑。我不會承認,但它會完成這項工作。

+0

你應該在'for':'後爲'(var shim在config.shim)中刪除'each' {}' – andlrc

+0

啊,對不起,正在考慮actionscript。固定。 –

1

通過@J_A_X's answer

啓發你可以說,應該共享相同的依賴關係,並動態地創建墊片文件的數組:

var config = { shim: { /*...*/ } } 

var plugins = ['a', 'b', 'c', 'd'], 
    plugin_shim = { 
     deps: ['lib/backbone'], 
     exports: 'Backbone' 
    }; 

plugins.forEach(function(file) { 
    config.shim['plugin/backbone/' + file] = plugin_shim; 
}); 

require.config(config); 

但這樣做不能很好地工作,如果有人使用minuglify r.js

相關問題