mrmlnc / emitty Goto Github PK
View Code? Open in Web Editor NEWA platform for finding dependencies between files and building tools for incremental compilation or build.
License: MIT License
A platform for finding dependencies between files and building tools for incremental compilation or build.
License: MIT License
Подскажите, что я делаю не так, из документации не очень понятно, как правильно настроить 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'));
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
В общем, очень сильно понравилась идея 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 } }
Привет, правильно ли я понимаю, что в документации не правильно написан пример использования 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'] });
Now expandGlobPatterns
function is called every time.
Здравсвуйте!
Появился странный баг, еле отловил. Есть 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 файлах.
If we provide true
as third parameter of the stream
method - emitty will be work only as filter (will not scan a directory).
Уже использовал раньше эмитти, с настройками проблем не было.
На новом проекте установился 4 PUG и обновление файлов после emitty.filter не происходит.
Пока откатил версию 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);
});
})
)
Есть задача для сборки шаблонов и есть 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));
Look at https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.macchiato for example.
Для удобства работы, все пути и 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]);
}
}
Поставил последнюю версию ноды 8.9.0, собственно, когда запускаю задачу, gulp доходит до момента компиляции pug файлов - выпадает ошибка.
Сам конфиг можно глянуть тут: https://github.com/TheUnchainedPug/pug-sass-gulp/blob/master/tasks/views.js
Буду благодарен за помощь.
------------------- Подключение модуля -------------------
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
};
});
});
Look at the master
branch.
Import file detection is not working under the following conditions.
/* 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.
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 работать с browserSync правильно?
При сохранении файла запускается задача pug, вотчер видит активность, запускает pug и reload и на этом все, если я повторно сохраняю больше ничего не происходит, в консоле тишина. Будто бы все зависло.
Скрин:
Если убираю reload с таска watch и добавляю его в таск pug, происходит следующие:
Как видите происходит одна компиляция всех файлов с зависимостями и 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;
});
});
Здравствуйте, искал в интернете про кеширование в 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, да и в программировании в общем, поэтому не могу разобраться. Заранее спасибо за ответ.
При запуске gulp watch и сохранении любого pug файла консоль сообщает об успешном завершении таска 'templates', но в папку build ничего не падает, pug не компилируется. Если убрать 'global.watch = true;', то компилируется абсолютно всё, инкрементальный подход не работает. В чём может быть проблема? Делал всё по примеру =)))
Тестовый репозиторий: https://github.com/a-gunderin/incremental-html-template
Здравствуйте. Подскажите пожалуйста как данный плагин emitty подключить в webpack для pug.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.