2013-08-10 10 views
5

Zastanawiałem się, jak utworzyć moduł requirejs z wieloma plikami. e.x. Potrzebuję jednego pliku, który w jakiś sposób dostanie wiele plików. Wiem, że mógłbym to zrobić:Jak zrobić moduł requirejs z wieloma plikami

define([all the other files], function() { 
    var mod = {}, 
     files = [all the other files]; 
    arguments.forEach(function (i) { 
    mod.[files[i]] = i; 
    }); 
    return mod; 

}); 

ale zastanawiałem się, czy istnieje lepszy sposób?

+0

Spójrz na to - http://requirejs.org/docs/api.html#modulename – JohnP

+0

Nie o to pytam, To kompletne przeciwieństwo, chcę jeden moduł, wiele plików, nazwa modułu jest dla jednego pliku, wiele modułów. – swissnetizen

+0

AFAIK, 'arguments' nie ma metody' forEach', ale rozumiem pseudokod. To, co sugerujesz, wydaje się najprostszym sposobem. –

Odpowiedz

0

Potrzebujesz dynamicznej listy plików (.txt, .tpl, .htm, .json), aby uniknąć zmiany kodu źródłowego JS, aby dodać więcej plików.

Nie wiem, czy istnieje sposób, aby to zrobić, ale należy zadbać o czas potrzebny na pobranie wszystkich tych plików. Sugeruję utworzenie pliku json zawierającego wszystkie pliki, które chcesz pobrać, i iteruj przez tę tablicę plików przy użyciu ajax, aby je pobrać.

Jeśli próbujesz uzyskać wszystkie moduły w katalogu, musisz utworzyć plik JS: <package-all>.js, który zawiera na przykład kod require([all files],function());.

Uważam, że jest to jedyny sposób, aby rozwiązać ten problem.

0

najpierw napisać moduły w ten sposób,

define(function(){ 
    return { 
     'mod-a' : require('modules/mod-a'), 
     'mod-b' : require('modules/mod-b'), 
     'mod-c' : require('modules/mod-c') 

    } 
}) 

następnie użyć r.js celu optymalizacji powyższe js dmuchać One (r.js będzie łączyć wszystkie pliki do jednego modułu) lub można napisać tak bezpośrednio:

define('modules/mod-a', [], function(){}); 
define('modules/mod-b', [], function(){}); 
define('modules/mod-c', [], function(){}); 

define('mod-all', ['modules/mod-a','modules/mod-b','modules/mod-c'], function(){ 

    return { 
     'mod-a' : require('modules/mod-a'), 
     'mod-b' : require('modules/mod-b'), 
     'mod-c' : require('modules/mod-c') 
    } 
}) 

Teraz moduły "mod-all" są tym czego potrzebujesz.