azproduction / lmd

LMD - JavaScript Module-Assembler for building better web applications :warning: Project is no longer supported :warning:
http://azproduction.ru/lmd/
MIT License
449 stars 27 forks source link

Как можно получить список всех добавленных модулей? #133

Closed lomadurov closed 11 years ago

lomadurov commented 11 years ago

Объявляю модули следующим образом:

"<%= dir[0] %>.<%= file %>": "modules/**/*.js",

Как можно получить список всех добавленных модулей?

azproduction commented 11 years ago

Проще всего использовать lmd info - $ lmd info build_name, которая кроме всех выбранных файлов выдаст исчерпывающую информацию о всей сборке. В итоге получится что-то такое

lomadurov commented 11 years ago

Я хотел из кода получить список модулей. Т.е. есть мастер (app.js), который получает список всех модулей, дёргает с сервера разрешённый для авторизированного пользователя список модулей, и в соответствии с данным списком инициализирует только нужное.

azproduction commented 11 years ago

Можно использовать require.match, он принимает в качестве параметра регулярку и возвращает "хэш" из имени модуля и его "тела".

var templates = require.match(/Template$/);

Можно выбрать все модули /.*/ или только нужные - дальше уже на ваше усмотрение.

lomadurov commented 11 years ago

Спасибо большое, это именно то что мне было нужно.

lomadurov commented 11 years ago

К сожалению match маленько не подошёл, так как он инициализирует все найденные модули. Написал небольшой плагин.

/**
 * Get list of declared module
 * @param {RegExp} regExp optional
 * @returns {Array} [moduleName, moduleName, etc]
 */
(function (sb) {
    sb.require.modulesList = function (regExp) {
        var result = [];
        if (!(regExp instanceof RegExp)) {
            regExp = /.*/
        }
        for (var moduleName in sb.modules) {
            if (!sb.modules.hasOwnProperty(moduleName)) continue;

            if (regExp.test(moduleName)) {
                result.push(moduleName);
            }
        }
        return result;
    };
}(sandbox));
azproduction commented 11 years ago

Я только хотел предложить :)

lomadurov commented 11 years ago

Добавил возможность ограничения поиска по исключающему списку, опция exclude пользовательского плагина:

/*global sandbox*/
(function (sb) {
    "use strict";
    var exclude = (sb.options.modulesList && sb.options.modulesList.exclude) ? sb.options.modulesList.exclude : [],
        modules = sb.modules;

    /**
     * Get list of declared module
     *
     * @param {RegExp} [regExp] optional
     * @returns {Array} [moduleName, moduleName, etc]
     */
    sb.require.modulesList = function (regExp) {
        var result = [], moduleName;
        regExp = (regExp instanceof RegExp) ? regExp : /\S*/;
        for (moduleName in modules) {
            if (modules.hasOwnProperty(moduleName) && (exclude.indexOf(moduleName) < 0) && (regExp.test(moduleName))) {
                result.push(moduleName);
            }
        }
        return result;
    };
}(sandbox));
"plugins": {
        "modulesList": {
            "path": "../lib/modulesList.js",
            "options": {
                "exclude": ["$", "_", "Backbone"]
            }
        }
    }