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 файла. Думаю событие вылетает после открытие потока на запись. Два пути
- debounce(800ms) watch event.
- Самому следить за всеми изменениями и запускать
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 Спасибо!