2013-08-26 3 views
1

Я пишу библиотеку, которая будет состоять из нескольких модулей/файлов. Один из файлов (назовем его Main) будет зависеть от всех других файлов, поэтому, когда пользователь загрузит этот файл, вся загрузка библиотеки будет загружена.multifile javascript library

Теперь пользователь может поместить всю мою библиотеку в папке (назовем его subdir1), поэтому он настраивает requirejs так:

require.config({ 
    paths: { 
     "jquery": "Scripts/jquery-2.0.3.min", 
     "knockout": "Scripts/knockout-2.3.0", 
     "MyLib.Main": "subdir1/MyLib.Main" 
    } 
}); 

В этом случае файл subdir1/MyLib.Main.js будет load просто отлично, но если этот файл зависит от модуля MyLib.Helper, тогда requirejs попытается загрузить его из файла MyLib.Helper.js, а не файла subdir1/MyLib.Helper.js, где он находится.

Есть ли способ сказать requirejs для загрузки подмодулей из subdir1? Я знаю, что могу перечислять все эти модули в config, но это требует, чтобы конечный пользователь знал внутреннюю структуру моей библиотеки (что неприемлемо). В идеале я должен иметь возможность перечислять все модули, которые должны быть загружены из subdir1 внутри файла MyLib.Main.js каким-то образом (но обратите внимание, что на этом этапе я не могу указать, что это будет subdir1).

ответ

1

Попросите ваш пользователь настроить переменную LIBNAME_PATH в его требует конфигурации Затем используйте этот переменный путь в качестве префикса всех ваших путей

Пример:

require.config({ 
    paths: { 
     "jquery": "Scripts/jquery-2.0.3.min", 
     "knockout": "Scripts/knockout-2.3.0", 
     "MyLib_PATH": "subdir1", 
     "MyLib.Main": "subdir1/MyLib.Main" 
    } 
}); 

Тогда в subdir1/MyLib.Main, вы могли бы иметь что-то вроде этого :

require.config({ 
    paths: { 
     "MyLib.Helper": "MyLib_PATH/MyLib.Helper" 
    } 
}); 

requirejs затем следует решить MyLib_PATH на правильный путь, как с onfigured пользователем.

Это супер непроверенный проект, но я думаю, что он должен работать. Это означает, что вы должны использовать это LIBNAME_PATHвсюду в вашей библиотеке.

+0

Не идеальна, так как пользователь должен сделать две записи в массиве путей, но все же намного лучше, чем я мог подумать о себе. Благодарю. –

+1

Альтернативой является предварительная сборка библиотеки с помощью «r.js», а затем просто публикация 1 файла. –

+0

Это то, что я хочу сделать в любом случае для выпуска, но несколько файлов лучше для целей отладки. –