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

gulp-lmd #191

Closed Kuznetsov-Ilia closed 9 years ago

Kuznetsov-Ilia commented 10 years ago

Привет. не планируешь плагина для галпа? Сейчас приходится изголяться вот такими конструкциями:

var exec = require('child_process').exec;
gulp.task('lmd', function (cb) {
  exec('node_modules/lmd/bin/lmd build app', {}, function (error, stdout, stderr) {
    gutil.log(gutil.colors.red(stderr));
    console.log(stdout);
    cb();
  });
});

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

// псевдокод
gulp.watch(['lmd-output-files/*'], ['doSmthWithLmdFiles']);
gulp.task('doSmthWithLmdFiles', function (cb) {
  // код который что-то делает или копирует получившиеся lmd файлики куда-нить 
})

приходится внутри таска doSmthWithLmdFiles запиливать таймер на абстрактные полсекунды, чтобы код дожидался контента в файликах...

наверно было бы правильно зафигачить колбек прямо внутри exec`а, но хочется делать более читаемо, отделяя мухи от котлет.

azproduction commented 10 years ago

Привет! Не планирую. На самом деле я не хочу писать то, чем не пользуюсь/не буду пользоваться :) Не хочу делать GIMP-ы.

Если соберешься писать буду всячески помогать. Хотя, думаю, плагина для Grunt должно хватить в качестве примера.

lomadurov commented 10 years ago

Для лучшего контроля используй LMD API.

var Lmd = require('lmd');
// ...
gulp.task('lmd', function (cb) {
    new Lmd("path/to/lmd.json", {
        warn: false
    });
    .pipe(process.stdout)
    .on('end', cb);
});

Так же встал на проблему с ранним срабатыванием события watch выходного lmd файла. Думаю событие вылетает после открытие потока на запись. Два пути

  1. debounce(800ms) watch event.
  2. Самому следить за всеми изменениями и запускать lmd build, когда в этом будет необходимость.
Kuznetsov-Ilia commented 10 years ago

; там наверно лишняя?

gulp.task('lmd', function (cb) {
  new Lmd('.lmd/app.lmd.js', { warn: false })
    .pipe(process.stdout)
    .on('end', cb);
});

в конфиге

  log: false,
  warn: false,

а в консоль гадит аутпутом. это как-то лечится?

Kuznetsov-Ilia commented 10 years ago

для галпа думаю в любом случае надо пилить чтобы lmd не писал в файло, а в поток - это фундоментально для галпа, иначе нужен целый тьюториал с костылями для тех кто будет его пользовать в небольших проектах))

lomadurov commented 10 years ago

Пример был на коленке :smile:. Выводит так как идёт перенаправление вывода .pipe(process.stdout).

var LMD = require('lmd');
// ...
gulp.task('lmd', function (cb) {
    var fileStream = fs.createWriteStream("path/to/result/lmd.js"),
        lmd = new LMD("path/to/lmd.json", {
            warn: false
        });

    // В случае плагина для gulp можно писать прямо в through
    lmd.pipe(fileStream)
        .log.pipe(process.stdout);
        .on('end', cb);
});
Kuznetsov-Ilia commented 10 years ago
lmd.pipe(fileStream);
lmd.log.pipe(process.stdout).on('end', cb);

?

Kuznetsov-Ilia commented 9 years ago

Свершилось) Наконец-таки написал вел, чтобы отказаться от тайм-аутов. https://www.npmjs.org/package/gulp-lmd Надеюсь те, кто хоть что-то понимает в стримах заглянут туда и перепишут на нормальный код.

azproduction commented 9 years ago

@QiV Спасибо!