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

3-party modules deps as path list #119

Closed imbolc closed 11 years ago

imbolc commented 11 years ago

Поскольку зависимости 3-party modules обычно больше нигде не нужны, хотелось бы прописывать их в виде простого списка путей. То есть, чтобы запись вида:

"3-party-module": {
    "path": "3-party-module",
    "noname_deps": [
        "dep1.js",
        "dep2.js",
        ...
    ]
}

автоматически приводилась к виду:

{
    "3-party-module": {
        "path": "3-party-module",
        "require": {
            "dep1": "dep1",
            "dep2": "dep2"
            ...
        }
    },
    "dep1": {
        "path": "dep1.js",
    },
    "dep2": {
        "path": "dep2.js",
    },
    ...
}
imbolc commented 11 years ago

Про зависимости забыл, чтобы они в очерёдности списка генерились:

"dep2": {
    "path": "dep2.js",
    "require": {
        "dep1": "dep1.js"
    }
},
imbolc commented 11 years ago

Собственно вот, что имею в виду: https://gist.github.com/imbolc/5140667

azproduction commented 11 years ago

Не поможет ли тебе в этом glob-инг?

Если у тебя есть куча модулей

vendor/file-upload/jquery.iframe-transport.js
vendor/file-upload/jquery.fileupload.js
vendor/file-upload/jquery.fileupload-fp.js
vendor/file-upload/jquery.fileupload-ui.js

То их все можно задекларировать 1-й строчкой:

{
    "modules": {
        "${file}": "vendor/file-upload/jquery.*"
    }
}

// ===

{
    "modules": {
        "jquery.fileupload": "vendor/file-upload/jquery.fileupload.js",
        ...
    }
}

Затем прописать из всех в зависимость к основному модулю.

Тут появляется логичное желание зарекваить "группу", но пока так сделать нельзя...

{
    "modules": {
        "jquery": {
            "require": "jquery.*"
        }
    }
}

Ко мне так же поступало предложение делать вот так require.match(/pewpew\.ololo.*/) так что я постараюсь добавить такую возможность. В итоге все будет выглядеть вот так:

require.match(/jquery.*/);

// the rest of 3-party module

Кроме этого в планах есть поодержка .lmd.js наряду с .lmd.json для кастомных конфигов.

imbolc commented 11 years ago

Вроде же, то что ты предлагаешь не определяет порядок подключения модулей. Или я неправильно понял?

azproduction commented 11 years ago

Они все будет в "пакете" и порядок подключения можно указать в основном модуле:

{
    "modules": {
        "jquery": {
            "path": "...",
            "require": {
                "_1": "jquery.iframe-transport",
                "_2": "jquery.ifileupload",
                "_3": "jquery.ifileupload-fp",
                "_4": "jquery.fileupload-ui"
            }
        }
    }
}

При первом require('jquery') все зависимости будут исполнены в порядке их перечисления.

azproduction commented 11 years ago

В ближайшее время я готовлю маленький релиз с .lmd.js - так что все необходимое можно будет написать самому.

imbolc commented 11 years ago

А, понял теперь, спасибо :) Синтаксис немного не очевидный, мне кажется так понятнее было бы:

        "require": [
            ["_1",  "jquery.iframe-transport"],
            ["_2",  "jquery.ifileupload"],
            ...
        ]
azproduction commented 11 years ago

Вот это все

{
    "modules": {
        "jquery": {
            "path": "...",
            "require": {
                "_1": "jquery.iframe-transport",
                "_2": "jquery.ifileupload",
                "_3": "jquery.ifileupload-fp",
                "_4": "jquery.fileupload-ui"
            }
        }
    }
}

Трансформируется в

var _1 = require('jquery.iframe-transport'),
    _2 = require('jquery.ifileupload'),
    ...

// your 3-party module code

Так что вполне очевидно :)

azproduction commented 11 years ago

В течении часа будет новая версия 1.10.6 с поддержкой .lmd.js конфигов - https://github.com/azproduction/lmd/wiki/LMD-JavaScript-config

azproduction commented 11 years ago

lmd@1.10.6

azproduction commented 11 years ago

Закрываю таск, теперь ты можешь все сделать как тебе нравится, заюзав https://gist.github.com/imbolc/5140667

imbolc commented 11 years ago

Работает, спасибо :)