Git Product home page Git Product logo

emitty's People

Contributors

mrmlnc avatar ogonkov avatar rndd avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

emitty's Issues

Pug не компилируется

При запуске gulp watch и сохранении любого pug файла консоль сообщает об успешном завершении таска 'templates', но в папку build ничего не падает, pug не компилируется. Если убрать 'global.watch = true;', то компилируется абсолютно всё, инкрементальный подход не работает. В чём может быть проблема? Делал всё по примеру =)))
Тестовый репозиторий: https://github.com/a-gunderin/incremental-html-template

Unable to detect @import filename of underscore prefix on Sass/Scss

Import file detection is not working under the following conditions.

  • app.scss
  • _foo.scss
/* app.scss */
@import "foo";
console.log(emitty.storage())
/*
{
  'src/sass/app.scss': {
    dependencies: ['src/sass/foo.scss'],
    ctime: 1497971214488
  },
  'src/sass/_foo.scss': {
    dependencies: [],
    ctime: 1497962273042
   }
}
*/

It seems that the file path does not match the dependency path.

Не сканируются изменения при подключении google fonts

Здравсвуйте!

Появился странный баг, еле отловил. Есть layout в котором подключается header, footer. Далее этот layout уже соответственно используется через extends.

Когда я подключаю google fonts например

link(href='https://fonts.googleapis.com/css?family=Work+Sans' rel='stylesheet' type='text/css')

то изменения в header и footer во время watch не применяются и конечные html файлы компилятся без них, стоит закомментировать строку с подключением шрифта, все сразу работает нормально.

Код layout

doctype html
html
    head
        meta(charset='utf-8')
        meta(http-equiv='X-UA-Compatible', content='IE=edge')
        meta(name='viewport', content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no')
        link(href='https://fonts.googleapis.com/css?family=Work+Sans' rel='stylesheet' type='text/css')
        link(href="./css/prev.css", rel="stylesheet")
        link(href="./css/main.css", rel="stylesheet")
        block title
            title Test title
        body
            include ../blocks/header
            block content
            include ../blocks/footer
            block scripts

Код index.pug

extends pug/layout/base

block title
    title Pages List

block content
    | content

Код таска

return new Promise(function(resolve, reject){
    plugins.emitty.scan(global.emittyChangedFile).then(function(){
        gulp.src(path.src.pug)
            .pipe(plugins.plumber({errorHandler: plugins.notify.onError({
                message: "<%= error.message %>",
                title  : "PUG Error!"
            })}))
            .pipe(plugins.if(global.watch, plugins.emitty.filter(global.emittyChangedFile)))
            .pipe(plugins.pug({ pretty: true }))
            .pipe(gulp.dest(path.build.pug))
            .on('end', resolve)
            .on('error', reject);
        });
});

P.S. Если вносить изменения в index.pug, то все работает нормально. Не применяются изменения в include файлах.

Проблема при сборке файлов .styl

Подскажите, что я делаю не так, из документации не очень понятно, как правильно настроить gulp сборщик для работы с .styl файлами (stylus).
Мой конфиг.
Файл watch.js

import gulp from 'gulp';
// import runSequence from 'run-sequence';
import {get as browserSync} from 'browser-sync';
import {styles, stylesLint} from './styles';
import {templates, templatesLint} from './templates';
import {scriptsWatch} from './scripts';
import {icons} from './icons';

const bs = browserSync('server');
const reload = done => {
    bs.reload();
    done();
};

export const watch = () => {
    global.watch = true;

    gulp.watch(
        'app/{styles,blocks}/**/*.styl',
        gulp.series(styles, stylesLint)
    ).on('all', (event, filepath, stats) => {
        global.emittyChangedFile = {
            path: filepath,
            stats
        };
    });
};

Файл styles.js

import gulp from 'gulp';
import plumber from 'gulp-plumber';
import gulpIf from 'gulp-if';
import rupture from 'rupture';
import stylint from 'gulp-stylint';
import stylus from 'gulp-stylus';
import importIfExist from 'stylus-import-if-exist';
import autoprefixer from 'autoprefixer-stylus';
import gcmq from 'gulp-group-css-media-queries';
import nano from 'gulp-cssnano';
import rename from 'gulp-rename';
import sourcemaps from 'gulp-sourcemaps';
import errorHandler from 'gulp-plumber-error-handler';

const emitty = require('emitty').setup('app/styles', 'stylus');

const isDebug = process.env.NODE_ENV !== 'production';

export const styles = () =>
    gulp
        .src('app/styles/*.styl', {read: false})
        .pipe(
            gulpIf(
                global.watch,
                emitty.stream(
                    global.emittyChangedFile.path,
                    global.emittyChangedFile.stats
                )
            )
        )
        .pipe(plumber({errorHandler: errorHandler('Error in "styles" task')}))
        .pipe(gulpIf(isDebug, sourcemaps.init()))
        .pipe(
            stylus({
                use: [importIfExist(), rupture(), autoprefixer()],
                'include css': true,
                define: {
                    // dev-mode variable for using in stylus
                    __DEV__: isDebug
                }
            })
        )
        .pipe(gulpIf(!isDebug, gcmq()))
        .pipe(gulpIf(!isDebug, nano({zindex: false})))
        .pipe(rename({suffix: '.min'}))
        .pipe(gulpIf(isDebug, sourcemaps.write()))
        .pipe(gulp.dest('dist/assets/styles'));

Не работает с Pug 4

Уже использовал раньше эмитти, с настройками проблем не было.
На новом проекте установился 4 PUG и обновление файлов после emitty.filter не происходит.
Пока откатил версию PUG

Поправить документацию.

Привет, правильно ли я понимаю, что в документации не правильно написан пример использования getDependencies:
emitty.scan().then(() => { console.log(emitty.getDependencies('a.pug')); // ['components/b.pug'] });

А должно быть так:

emitty.scan().then(() => { console.log(emitty.resolver.getDependencies('a.pug')); // ['components/b.pug'] });

Зависает задача.

Добрый день.
Подскажите как заставить emitty работать с browserSync правильно?
При сохранении файла запускается задача pug, вотчер видит активность, запускает pug и reload и на этом все, если я повторно сохраняю больше ничего не происходит, в консоле тишина. Будто бы все зависло.
Скрин:
2017-10-30 21 59 16
Если убираю reload с таска watch и добавляю его в таск pug, происходит следующие:
2017-10-30 22 02 04
Как видите происходит одна компиляция всех файлов с зависимостями и 3 раза подряд обновление браузера, так как редактирую например header.pug а он зависим с тремя страницами, если компилирую файл без зависимости тогда все кул.

gulp.task('pug', (cb) => {

  var jsonData = getJsonData('./tmp/data.json');
  options.pug.locals = jsonData;

  new Promise((resolve, reject) => {
    const sourceOptions = global.watch ? { read: false } : {};

    emitty.scan(global.changedStyleFile).then(() => {
        gulp.src('source/pages/*.pug', sourceOptions)
            .pipe(gulpif(global.watch, emitty.filter(global.emittyChangedFile)))
            .pipe($.pug(options.pug))
            .pipe(gulp.dest('./dist/'))
            .on('end', resolve)
            .on('error', reject)
            // .pipe(browserSync.stream());
      });
  })
  cb();
});

gulp.task('watch', () => {
  global.watch = true;
  gulp.watch('source/**/*.pug', gulp.series('pug', browserSync.reload))
    .on('all', (event, filepath) => {
        global.emittyChangedFile = filepath;
    });
});

Improve documentation

  • Concise description of methods, options, and settings.
  • The description of all possible options for the inclusion of emitty.
    • How to use emitty with Promise API
    • How to use emitty with Stream API
      • Minimal
      • Basic
      • Advanced
      • Performance
    • How to use emitty with Mix of Promise API and Stream API

Как работать с многоуровневым include?

Здравствуйте, искал в интернете про кеширование в pug, использую gulp4. Наткнулся на ваши статьи.
Все очень интересные, но как решить проблему я так и не понял.
У меня есть проект со структурой

App
  Pages
    index.pug
    projects.pug
    ....
  Blocks
    header
      header.pug
    pages
      index.pug
      projects.pug
      ...

Галп watch следит за всеми файлами сразу и за файлами в папке pages и за файлами в папке blocks.
Если, я что-то изменил в header, то гулп об этом скажет и на эвент отдаст путь к файлу header.pug. Я прочитал статью, прочитал документацию. Сказывается слабый опыт в этом деле (в программировании), но я не могу понять, как emitty будет находить файлы которые инклюдят в себя header.pug, а они же инклюдятся в файлы в папке Pages.

Я попытался поиграть с функцией scan. Я ожидал, что в сетапе я указываю родителей которые по умолчанию сканируются, а в саму функцию могу передавать нужный файл который тоже в свою очередь просканируется и добавится в store, но получил то, что вообще ничего не понимаю.

const emitty = require('emitty').setup('app/pages', 'pug');

emitty.scan().then(() => {
	console.log(emitty.storage());
});
     ctime: 1484783654120 },
  'app/pages/projects.pug':
   { dependencies:
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/projects.pug' ],
     ctime: 1484785040130 },
  'app/pages/text-page.pug':
   { dependencies:
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/text-page.pug' ],
     ctime: 1484785045409 },
  'app/pages/updates.pug':
   { dependencies:
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/updates.pug' ],
     ctime: 1484783664715 } }

Я ожидал получить тут более глубокий список зависимостей, но я получил 1 уровненный.
В общем я не понимаю, как мне хотя бы получить все зависимости каждого файла рекурсивно.

Я еще попробовал сделать так

emitty.scan().then(() => {
	const store = emitty.storage();
	for (let key in store) {
		for (let depend of store[key].dependencies) {
			emitty.scan(depend).then(() => {
				console.log(emitty.storage());
			});
		}
	}
});

На что в ответ получил

{ 'app/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/index.pug' ],
     ctime: 1484783654120 },
  'app/pages/projects.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/projects.pug' ],
     ctime: 1484785040130 },
  'app/pages/text-page.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/text-page.pug' ],
     ctime: 1484785045409 },
  'app/pages/updates.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/updates.pug' ],
     ctime: 1484783664715 },
  'app/blocks/layout-default/layout-default.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/default-include.pug',
        'app/blocks/head/head.pug' ],
     ctime: 1483654274226 } }
{ 'app/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/index.pug' ],
     ctime: 1484783654120 },
  'app/pages/projects.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/projects.pug' ],
     ctime: 1484785040130 },
  'app/pages/text-page.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/text-page.pug' ],
     ctime: 1484785045409 },
  'app/pages/updates.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/updates.pug' ],
     ctime: 1484783664715 },
  'app/blocks/layout-default/layout-default.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/default-include.pug',
        'app/blocks/head/head.pug' ],
     ctime: 1483654274226 },
  'app/blocks/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/big-search/big-search.pug',
        'app/blocks/section/section.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/updating/updating.pug' ],
     ctime: 1484787847459 } }
{ 'app/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/index.pug' ],
     ctime: 1484783654120 },
  'app/pages/projects.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/projects.pug' ],
     ctime: 1484785040130 },
  'app/pages/text-page.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/text-page.pug' ],
     ctime: 1484785045409 },
  'app/pages/updates.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/updates.pug' ],
     ctime: 1484783664715 },
  'app/blocks/layout-default/layout-default.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/default-include.pug',
        'app/blocks/head/head.pug' ],
     ctime: 1483654274226 },
  'app/blocks/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/big-search/big-search.pug',
        'app/blocks/section/section.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/updating/updating.pug' ],
     ctime: 1484787847459 } }
{ 'app/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/index.pug' ],
     ctime: 1484783654120 },
  'app/pages/projects.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/projects.pug' ],
     ctime: 1484785040130 },
  'app/pages/text-page.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/text-page.pug' ],
     ctime: 1484785045409 },
  'app/pages/updates.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/updates.pug' ],
     ctime: 1484783664715 },
  'app/blocks/layout-default/layout-default.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/default-include.pug',
        'app/blocks/head/head.pug' ],
     ctime: 1483654274226 },
  'app/blocks/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/big-search/big-search.pug',
        'app/blocks/section/section.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/updating/updating.pug' ],
     ctime: 1484787847459 },
  'app/blocks/pages/projects.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/section/section.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/project-item/project-item.pug',
        'app/blocks/tags/tags.pug',
        'app/blocks/filter-select/filter-select.pug' ],
     ctime: 1484337116560 } }
{ 'app/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/index.pug' ],
     ctime: 1484783654120 },
  'app/pages/projects.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/projects.pug' ],
     ctime: 1484785040130 },
  'app/pages/text-page.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/text-page.pug' ],
     ctime: 1484785045409 },
  'app/pages/updates.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/updates.pug' ],
     ctime: 1484783664715 },
  'app/blocks/layout-default/layout-default.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/default-include.pug',
        'app/blocks/head/head.pug' ],
     ctime: 1483654274226 },
  'app/blocks/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/big-search/big-search.pug',
        'app/blocks/section/section.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/updating/updating.pug' ],
     ctime: 1484787847459 },
  'app/blocks/pages/projects.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/section/section.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/project-item/project-item.pug',
        'app/blocks/tags/tags.pug',
        'app/blocks/filter-select/filter-select.pug' ],
     ctime: 1484337116560 } }
{ 'app/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/index.pug' ],
     ctime: 1484783654120 },
  'app/pages/projects.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/projects.pug' ],
     ctime: 1484785040130 },
  'app/pages/text-page.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/text-page.pug' ],
     ctime: 1484785045409 },
  'app/pages/updates.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/updates.pug' ],
     ctime: 1484783664715 },
  'app/blocks/layout-default/layout-default.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/default-include.pug',
        'app/blocks/head/head.pug' ],
     ctime: 1483654274226 },
  'app/blocks/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/big-search/big-search.pug',
        'app/blocks/section/section.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/updating/updating.pug' ],
     ctime: 1484787847459 },
  'app/blocks/pages/projects.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/section/section.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/project-item/project-item.pug',
        'app/blocks/tags/tags.pug',
        'app/blocks/filter-select/filter-select.pug' ],
     ctime: 1484337116560 },
  'app/blocks/pages/text-page.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/section/section.pug',
        'app/blocks/reader/reader.pug',
        'app/blocks/sidebar-module/sidebar-module.pug',
        'app/blocks/actions/actions.pug',
        'app/blocks/controller/controller.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/project-item/project-item.pug',
        'app/blocks/toc/toc.pug',
        'app/blocks/page-arrows/page-arrows.pug' ],
     ctime: 1484770833628 } }
{ 'app/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/index.pug' ],
     ctime: 1484783654120 },
  'app/pages/projects.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/projects.pug' ],
     ctime: 1484785040130 },
  'app/pages/text-page.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/text-page.pug' ],
     ctime: 1484785045409 },
  'app/pages/updates.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/updates.pug' ],
     ctime: 1484783664715 },
  'app/blocks/layout-default/layout-default.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/default-include.pug',
        'app/blocks/head/head.pug' ],
     ctime: 1483654274226 },
  'app/blocks/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/big-search/big-search.pug',
        'app/blocks/section/section.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/updating/updating.pug' ],
     ctime: 1484787847459 },
  'app/blocks/pages/projects.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/section/section.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/project-item/project-item.pug',
        'app/blocks/tags/tags.pug',
        'app/blocks/filter-select/filter-select.pug' ],
     ctime: 1484337116560 },
  'app/blocks/pages/text-page.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/section/section.pug',
        'app/blocks/reader/reader.pug',
        'app/blocks/sidebar-module/sidebar-module.pug',
        'app/blocks/actions/actions.pug',
        'app/blocks/controller/controller.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/project-item/project-item.pug',
        'app/blocks/toc/toc.pug',
        'app/blocks/page-arrows/page-arrows.pug' ],
     ctime: 1484770833628 } }
{ 'app/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/index.pug' ],
     ctime: 1484783654120 },
  'app/pages/projects.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/projects.pug' ],
     ctime: 1484785040130 },
  'app/pages/text-page.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/text-page.pug' ],
     ctime: 1484785045409 },
  'app/pages/updates.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/layout-default.pug',
        'app/blocks/pages/updates.pug' ],
     ctime: 1484783664715 },
  'app/blocks/layout-default/layout-default.pug': 
   { dependencies: 
      [ 'app/blocks/layout-default/default-include.pug',
        'app/blocks/head/head.pug' ],
     ctime: 1483654274226 },
  'app/blocks/pages/index.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/big-search/big-search.pug',
        'app/blocks/section/section.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/updating/updating.pug' ],
     ctime: 1484787847459 },
  'app/blocks/pages/projects.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/section/section.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/project-item/project-item.pug',
        'app/blocks/tags/tags.pug',
        'app/blocks/filter-select/filter-select.pug' ],
     ctime: 1484337116560 },
  'app/blocks/pages/text-page.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/section/section.pug',
        'app/blocks/reader/reader.pug',
        'app/blocks/sidebar-module/sidebar-module.pug',
        'app/blocks/actions/actions.pug',
        'app/blocks/controller/controller.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/project-item/project-item.pug',
        'app/blocks/toc/toc.pug',
        'app/blocks/page-arrows/page-arrows.pug' ],
     ctime: 1484770833628 },
  'app/blocks/pages/updates.pug': 
   { dependencies: 
      [ 'app/blocks/header/header.pug',
        'app/blocks/navigation/navigation.pug',
        'app/blocks/main/main.pug',
        'app/blocks/footer/footer.pug',
        'app/blocks/big-search/big-search.pug',
        'app/blocks/section/section.pug',
        'app/blocks/sidebar-module/sidebar-module.pug',
        'app/blocks/actions/actions.pug',
        'app/blocks/updating/updating.pug',
        'app/blocks/projects-list/projects-list.pug',
        'app/blocks/page-nav/page-nav.pug' ],
     ctime: 1484787964168 } }

И все же я не понимаю как мне получив файл который изменился, я смогу по нему найти родителей, а от них уже искать все зависимости и передавать в pug.
Я в js только месяца 3, да и в программировании в общем, поэтому не могу разобраться. Заранее спасибо за ответ.

language-scss does not work with @use

Pretty self-explanatory, emitty works with @import while using .sass files, but does not parse and rebuild files having @use

This works:
index.sass:

@import "vars"
.text
    color: $red

It rebuilds vars and index

This does not:
index.sass:

@use "vars"
.text
    color: vars.$red

It rebuilds index only

dont work with pug basedir option

I use basedir option for gulp-pug and include partials with absolute path.
Emitty doesnt find dependencies for this files.

Example:

.pipe(pug({
  basedir: paths.HTML_SOURCE_BASE,
}))
include /partials/footer_app_link

Emitty works well for includes with relative paths

Помогите разобраться

В общем, очень сильно понравилась идея Emitty, но я не совсем понимаю каким образом, и опираясь на какие ключевые слова она создаёт зависимости.

Пробема следующая - после установки и настройки, в скорости компиляции сборка не прибавила. Думал что проблема в настройках Emitty, но манипуляции не помогли и решил создать ишью

вот что выдаёт emitty.storage() - в самом низу лог
смущает что у некоторых компонентов, страниц нет зависимостей совсем, и именно при их обновлении парсятся все страницы

А вот с 'blocks/news.pug' всё работает хорошо, обновляется только она, вот только пользы от этого мало, ведь она служит для меня точкой входа, а основная часть страницы подключается сюда через миксин +news(), и вот при внесении изменений в этот миксин обновляется всё абсолютно. Можете помочь? Очень хочется чтобы работало быстро, проект растёт)) Заранее спасибо

Вот ссылка на весь тестовый проект:
https://github.com/Fenricage/Emitty-test/blob/master/gulpfile.js

{ 'blocks/checkout.pug': { dependencies: [ 'blocks/template.pug' ], ctime: 1524136102899 }, 'blocks/home.pug': { dependencies: [ 'blocks/template.pug' ], ctime: 1524141224356 }, 'blocks/index.pug': { dependencies: [ 'blocks/template.pug' ], ctime: 1524124749427 }, 'blocks/map.pug': { dependencies: [], ctime: 1524136555842 }, 'blocks/order.pug': { dependencies: [], ctime: 1524136549166 }, 'blocks/item.pug': { dependencies: [ 'blocks/template.pug' ], ctime: 1524128731038 }, 'blocks/news.pug': { dependencies: [ 'blocks/template.pug' ], ctime: 1524136056890 }, 'blocks/template.pug': { dependencies: [ 'blocks/_assets/bemto/bemto.pug', 'blocks/head/head.pug', 'blocks/header/header.pug', 'blocks/head-line/head-line.pug', 'blocks/intro/intro.pug', 'blocks/title/title.pug', 'blocks/pages/item/item.pug', 'blocks/pages/news/news.pug', 'blocks/pages/checkout/checkout.pug', 'blocks/pages/home/home.pug', 'blocks/pages/order/order.pug', 'blocks/pages/map/map.pug' ], ctime: 1524136747762 }, 'blocks/head/head.pug': { dependencies: [], ctime: 1524128727734 }, 'blocks/header/header.pug': { dependencies: [], ctime: 1524136911726 }, 'blocks/head-line/head-line.pug': { dependencies: [], ctime: 1524128755161 }, 'blocks/intro/intro.pug': { dependencies: [], ctime: 1524129106127 }, 'blocks/title/title.pug': { dependencies: [], ctime: 1524128765479 }, 'blocks/_assets/bemto/bemto.pug': { dependencies: [ 'blocks/_assets/bemto/lib/index.pug' ], ctime: 1523715626976 }, 'blocks/pages/checkout/checkout.pug': { dependencies: [], ctime: 1524136404066 }, 'blocks/pages/item/item.pug': { dependencies: [], ctime: 1524136400995 }, 'blocks/pages/home/home.pug': { dependencies: [], ctime: 1524136812060 }, 'blocks/pages/map/map.pug': { dependencies: [], ctime: 1524141232971 }, 'blocks/pages/news/news.pug': { dependencies: [], ctime: 1524136821564 }, 'blocks/pages/order/order.pug': { dependencies: [], ctime: 1524136836037 }, 'blocks/_assets/bemto/lib/bemto.pug': { dependencies: [], ctime: 1523715626975 }, 'blocks/_assets/bemto/lib/bemto_custom_tag.pug': { dependencies: [], ctime: 1523715626975 }, 'blocks/_assets/bemto/lib/bemto_tag.pug': { dependencies: [ 'blocks/_assets/bemto/lib/bemto_custom_tag.pug' ], ctime: 1523715626975 }, 'blocks/_assets/bemto/lib/helpers.pug': { dependencies: [], ctime: 1523715626975 }, 'blocks/_assets/bemto/lib/index.pug': { dependencies: [ 'blocks/_assets/bemto/lib/helpers.pug', 'blocks/_assets/bemto/lib/settings.pug', 'blocks/_assets/bemto/lib/bemto_tag.pug', 'blocks/_assets/bemto/lib/bemto.pug' ], ctime: 1523715626975 }, 'blocks/_assets/bemto/lib/settings.pug': { dependencies: [ 'blocks/_assets/bemto/lib/tag_metadata.pug' ], ctime: 1523715626975 }, 'blocks/_assets/bemto/lib/tag_metadata.pug': { dependencies: [], ctime: 1523715626975 } }

Проблема при удалении pug файла при сборке

Помогите решить проблему : во время работы watch при удалении pug-файла появляется ошибка :
UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: ENOENT: no such file or directory, stat 'D:\ProjectsWork\agency\src\modules\page\page.pug'
и приходится перезапускать сборку.
вот сами задачи

// Modules, pages
gulp.watch('src/**/*.pug', gulp.series('pages'))
	.on('all', (event, filepath) => {
		global.emittyChangedFile = filepath;
	});

const gulp = require('gulp'),
emitty = require('emitty').setup('src', 'pug', {basedir: 'src/modules'}, {
scanner: { exclude: ['src/static' ] },
makeVinylFile: true
}),
path = require('path'),
fs = require('fs'),
config = require('../config'),
$ = require('gulp-load-plugins')();

gulp.task('pages', () =>

new Promise((resolve, reject) => {
	const sourceOptions = global.watch ? { read: false } : {};
	emitty.scan(global.emittyChangedFile).then(() => {
		config.pug.params.locals = getJsonData('./tmp/data.json');
		gulp.src(config.src.pug, sourceOptions)
			.pipe($.plumber({
				errorHandler: config.errorHandler
			}))
			.pipe($.if(global.isWatch, emitty.filter(global.emittyChangedFile)))
			.pipe($.pug(config.pug.params))
			.pipe($.posthtml(config.posthtmlConfig.plugins, config.posthtmlConfig.options))
			.pipe($.prettify(config.htmlPrettifyConfig))
			.pipe($.debug({title: 'pug to html'}))
			.pipe(gulp.dest(config.dest.root))
			.on('end', resolve)
			.on('error', reject);
	});
})

)

pug dependencies fail when line contains trailing spaces

In every pug file, if the extends/includes line contains one or more spaces at the end of the line, then emitty fails to parse the extended filename, and instead lists ".pug.pug".

a.pug:

//- There's a trailing space behind the "b" on the next line:
extends b 
- var title = "This is a.pug"

b.pug:

- var title = "This is b.pug"

gulpfile.js

const emittybug = require('emitty').setup('emitty-bug', 'pug');

gulp.task('emitty-bug', () =>
{
  emittybug.scan().then(() => {
    console.log(emittybug.storage());
    console.log('====================');
    console.log(emittybug.resolver.getDependencies('emitty-bug/a.pug'));
    console.log('--------------------');
    console.log(emittybug.resolver.getDependencies('emitty-bug/b.pug'));
    console.log('====================');
    console.log('a depends on b ? ' + emittybug.resolver.checkDependency(
      'emitty-bug/a.pug', 'emitty-bug/b.pug'));
    console.log('b depends on a ? ' + emittybug.resolver.checkDependency(
      'emitty-bug/b.pug', 'emitty-bug/a.pug'));
  });
});

Output:

c:\dev\test>gulp emitty-bug
[00:26:20] Using gulpfile c:\dev\test\gulpfile.js
[00:26:20] Starting 'emitty-bug'...
[00:26:20] Finished 'emitty-bug' after 785 μs
{ 'emitty-bug/a.pug':
   { dependencies: [ 'emitty-bug/.pug.pug' ],
     ctime: 1505370371307 },
  'emitty-bug/b.pug': { dependencies: [], ctime: 1505370022172 } }
====================
[ 'emitty-bug/a.pug', 'emitty-bug/.pug.pug' ]
--------------------
[ 'emitty-bug/b.pug' ]
====================
a depends on b ? false
b depends on a ? false

Cannot read property 'path' of undefind

------------------- Подключение модуля -------------------

function lazyRequireTask(taskName, path, options) {
  options = options || {};
  options.taskName = taskName;
  gulp.task(taskName, function (callback) {
    let task = require(path).call(this, options);
    return task(callback);
  })
}
lazyRequireTask('pug', './tasks/pug', {
  src: path.src.html,
  dst: path.build.html
});

------------------- Модуль pug.js -------------------

'use strict';
const $ = require('gulp-load-plugins')();
const gulp = require('gulp');
const combiner = require('stream-combiner2').obj;
const emitty = require('emitty').setup('src/html', 'pug', { makeVinylFile: true });
const isDevelopment = !process.env.NODE_ENV || process.env.NODE_ENV == 'development';

module.exports = function (options) {
  return function () {
    return combiner(
      gulp.src(options.src, { read: false }),
        $.if(global.watch, emitty.stream(
           global.emittyChangedFile.path, global.emittyChangedFile.stats)
         ),
        $.pug({ pretty: true }),
        gulp.dest(options.dst)
    )};
};

ругается на строку с global.emittyChangedFile.path

------------------- Вотчер -------------------

gulp.task('watch', function () {
  global.watch = true;
  gulp.watch(path.watch.html, gulp.series('pug'))
    .on('all', (event, filepath, stats) => {
      global.emittyChangedFile = {
        path: filepath,
        stats
      };
    });
});

Как заставить emitty компилировать все шаблоны

Есть задача для сборки шаблонов и есть json который пробрасывается в шаблонизатор.
При изменении json файлов нужно компилировать все шаблоны

В упрощенном виде это выглядит так

import gulp from "gulp";
import pug from "gulp-pug";
import gulpif from "gulp-if";
import { setup as emittySetup } from "@zoxon/emitty";

import getJsonData from "../util/getJsonData";

const emittyPug = emittySetup("source", "pug", {
  makeVinylFile: true
});

global.watch = false;
global.emittyChangedFile = {
  path: "",
  stats: null
};

export const pages = () => {
  const sourceOptions = global.watch ? { read: false } : {};

  return gulp
    .src("source/pages/**/*.pug", sourceOptions)
    .pipe(
      gulpif(
        global.watch,
        emittyPug.stream(
          global.emittyChangedFile.path,
          global.emittyChangedFile.stats
        )
      )
    )
    .pipe(pug({
      locals: getJsonData("./tmp/data.json")
    }))
    .pipe(gulp.dest("dest"));
};

gulp
    .watch("source/**/*.pug", gulp.series(pages, reload))
    .on("all", (event, filepath, stats) => {
      global.emittyChangedFile = {
        path: filepath,
        stats
      };
    });

  gulp.watch("source/**/*.json", gulp.series(pages));

Не компилирует файл

Пытаюсь внедрить emitty в свой проект, с конфигом ниньзя. Отрабатывает watcher и удачно ничего не компирирует. Иногда выдаёт предупрежения node. В чем может быть проблема?

screenshot_10
screenshot_11

версия ноды 7.10.00

Не работает с абсолютными путями

Для удобства работы, все пути и globы с которыми приходится работать у меня вынесены в отдельный объект примерно такого вида:

const emittyModule = require('emitty');

const paths = {
	root: path.join(__dirname, './src/main'),
	app: path.join(__dirname, './src/main/frontend'),
// ...
	pugPages: path.join(__dirname, './src/main/frontend/pages/*.pug'),
	pugs: path.join(__dirname, './src/main/java/**/*.pug'),
// ...
	pugsWatch: [
		path.join(__dirname, './src/main/frontend/pages/*.pug'),
		path.join(__dirname, './src/main/frontend/blocks/**/*.pug'),
		path.join(__dirname, './src/main/java/**/*.pug'),
	],
// ..
};
const emitty = emittyModule.setup(paths.root, 'pug', {basedir: paths.app});

Дальше эти пути используются везде, в том числе и в gulp.
Если в галп передавать абсолютны путь, то и в потоке файлы будут передаваться по абсолютному пути. emitty к этому явно не готов, так как индекс у него строится с приведением к относительному пути: https://github.com/mrmlnc/emitty/blob/master/src/services/scanner.ts#L101
а поиск по индексу производится без такого приведения. Не уверен что проблема только в одном месте, так как у себя полечил я ее костылем в виде приведения всех путей к относительному виду:

for (let key of Object.keys(paths)) {
	if (paths[key] instanceof Array) {
		for (let key2 of paths[key].keys()) {
			paths[key][key2] = path.relative(process.cwd(), paths[key][key2]);
		}
	}
	else {
		paths[key] = path.relative(process.cwd(), paths[key]);
	}
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.