Я написал библиотеку для решения этой проблемы. В конце концов кто-то пришел и улучшил мою библиотеку, вот она:
https://github.com/smartprocure/directory-metagen
Вы можете использовать мою библиотеку с Gulp или с чем угодно - она генерирует метаданные для вашего проекта, а RequireJS может использовать эти метаданные, чтобы запрашивать нужные файлы из файловой системы.
Использование этой библиотеки приведет к созданию модуля RequireJS, который выглядит примерно так:
define(
[
"text!app/templates/dashboardTemplate.ejs",
"text!app/templates/fluxCartTemplate.ejs",
"text!app/templates/footerTemplate.ejs",
"text!app/templates/getAllTemplate.ejs",
"text!app/templates/headerTemplate.ejs",
"text!app/templates/homeTemplate.ejs",
"text!app/templates/indexTemplate.ejs",
"text!app/templates/jobsTemplate.ejs",
"text!app/templates/loginTemplate.ejs",
"text!app/templates/overviewTemplate.ejs",
"text!app/templates/pictureTemplate.ejs",
"text!app/templates/portalTemplate.ejs",
"text!app/templates/registeredUsersTemplate.ejs",
"text!app/templates/userProfileTemplate.ejs"
],
function(){
return {
"templates/dashboardTemplate.ejs": arguments[0],
"templates/fluxCartTemplate.ejs": arguments[1],
"templates/footerTemplate.ejs": arguments[2],
"templates/getAllTemplate.ejs": arguments[3],
"templates/headerTemplate.ejs": arguments[4],
"templates/homeTemplate.ejs": arguments[5],
"templates/indexTemplate.ejs": arguments[6],
"templates/jobsTemplate.ejs": arguments[7],
"templates/loginTemplate.ejs": arguments[8],
"templates/overviewTemplate.ejs": arguments[9],
"templates/pictureTemplate.ejs": arguments[10],
"templates/portalTemplate.ejs": arguments[11],
"templates/registeredUsersTemplate.ejs": arguments[12],
"templates/userProfileTemplate.ejs": arguments[13]
}
});
Затем вам могут потребоваться модули в вашем интерфейсе, например:
var footerView = require("app/js/jsx/standardViews/footerView");
однако, как вы можете видеть, это слишком многословно, поэтому магический путь таков:
назовите вышеуказанную зависимость как allViews!
Теперь вы можете сделать:
var allViews = require('allViews');
var footerView = allViews['standardViews/footerView'];
Есть два преимущества, требующих целых каталогов:
(1) в производстве, с помощью оптимизатора r.js вы можете указать на одну зависимость (модуль A), а затем он может легко отследить все зависимости A, которые представляют весь каталог
(2) в процессе разработки вы можете предварительно запросить целые каталоги, а затем использовать синхронный синтаксис для запроса зависимостей, поскольку вы знаете, что они уже загружены
наслаждайтесь "RequireJS-Metagen"
https://github.com/smartprocure/directory-metagen
https://www.npmjs.com/package/requirejs-metagen
https://github.com/ORESoftware/requirejs-metagen