azproduction/lmd

gulp-lmd

Closed this issue · 8 comments

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

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`а, но хочется делать более читаемо, отделяя мухи от котлет.

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

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

Для лучшего контроля используй 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, когда в этом будет необходимость.

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

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

в конфиге

  log: false,
  warn: false,

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

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

Пример был на коленке 😄. Выводит так как идёт перенаправление вывода .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);
});
lmd.pipe(fileStream);
lmd.log.pipe(process.stdout).on('end', cb);

?

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

@qiv Спасибо!