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

Алиасы для путей #195

Closed monolithed closed 9 years ago

monolithed commented 9 years ago

Не могу понять почему нет алиасов для путей.

"modules": {
    "utils": "../utils"
},
var url = require('utils/url');
>> Building `development` (.lmd/development.lmd.js(on)) - version 0.0.1
Fatal error: EISDIR, illegal operation on a directory

В RequireJS такое работает

azproduction commented 9 years ago

LMD ничего не знает про файловую систему. То, что описано в modules это его "файловая система". Чтобы работало require('utils/url') нужно прописать явно modules: {'utils/url': '../utils/url'}. Либо использовать pattern-matching синтаксис: modules: {'*': '../utils/*.js'} - это значит для всех .js файлов в папке utils сделай модуль, каждый модуль назови как имя файла без .js

See https://github.com/azproduction/lmd/blob/master/examples/features/glob/.lmd/index.lmd.json#L13

monolithed commented 9 years ago

Я бы рад использовать *, но у меня в папке есть файлы, которые не участвуют в сборке, из-за чего приходится копипастить зависимости, т.е. прописывать десятки файлов вручную (полнейший ад)).

В добавок, lmd конфиг я не могу перенести в другой проект, т.к. он жестко привязан к файлам, а не к структуре проекта (из двадцати с лишним проектов только два перевел на LMD, больше не осилил, оставил RJS).

Очень неудобно при каждом определении зависимости лезть в конфиг, который кстати еще нельзя вынести в grunt-task :japanese_goblin: .

В чем проблема сделать алиасы, отдельным хешом aliases?

azproduction commented 9 years ago

Тут проблема не в алиасах, а в том, что LMD не сканирует код в поисках зависимостей, а использует то, что написано в конфиге. Поэтому смысла вводить его нет.

monolithed commented 9 years ago

А если на этапе чтения конфига перегенерировать его?

Пройтись по хешу alises, затем посмотреть какие модули начинаются с алиаса и зареплейсить путь

azproduction commented 9 years ago

Если очень хочется, то можно писать динамический конфиг .lmd.js https://github.com/azproduction/lmd/blob/master/examples/features/lmdjs_configs/.lmd/index.lmd.js

monolithed commented 9 years ago

А сам require как-то можно пропатчить извне? Почему нельзя "из коробки" добавить работу с файловой системой?

Я исходники особо не смотрел, но абстрактно это выглядит весьма просто:

for (var path in config.paths) {
    if (name.indexOf(path) === 0) {
            var name = path.join(config.paths[path], name.replace(path, ''));
            var file = fs.readFileSync(name);
        }
}