gulp-assemble & gulp-注意当对数据、包含或布局进行更改时不重新编译站点
gulp-assemble & gulp-watch not recompiling site when changes are made to data, includes or layouts
我在使用 gulp-assemble
和 gulp-watch
时遇到问题。我希望 gulp
观看整个 assemble 源目录(data
、includes
、layouts
和 pages
)并在任何时候重新编译站点文件更改。
我能够让 pages
正常工作,但是 gulp
在对 data
、includes
或layouts
个文件。
我已将 watch
任务添加到 gulp-assemble
存储库中的 example gulpfile.js:
var gulp = require('gulp');
var htmlmin = require('gulp-htmlmin');
var extname = require('gulp-extname');
var assemble = require('assemble');
var middleware = require('./examples/middleware');
var gulpAssemble = require('./');
// setup items on the assemble object
assemble.data({site: {title: 'Blog'}});
assemble.data(['test/fixtures/data/*.{json,yml}']);
assemble.layouts(['test/fixtures/layouts/*.hbs']);
assemble.partials(['test/fixtures/includes/*.hbs']);
// arbitrary middleware that runs when files loaded
assemble.onLoad(/index\.hbs/, middleware(assemble));
// render templates in `test/fixtures`
gulp.task('default', function () {
gulp.src('test/fixtures/pages/*.hbs')
.pipe(gulpAssemble(assemble, { layout: 'default' }))
.pipe(htmlmin({collapseWhitespace: true}))
.pipe(extname())
.pipe(gulp.dest('_gh_pages/'));
});
// ============================================================
// my watch task
// ============================================================
gulp.task('watch', ['default'], function() {
gulp.watch('test/fixtures/**/*.{hbs,yml,json}', ['default']);
});
如果我 运行 gulp watch
并将更改保存到 pages
目录中的任何 .hbs
文件,我看到 gulp
触发 default
在我的终端输出中,我看到 _gh_pages
中的 .html
文件随着更改而更新。
但是,如果我将更改保存到 data
、includes
或 layouts
目录,我看到 gulp
在我的终端输出中触发了 default
,但是我看到 _gh_pages
.html
文件没有变化。我必须手动 运行 gulp default
任务才能将更改应用到 _gh_pages
文件。
我需要更改什么才能获得所需的行为?
gulp-watch 只会在默认任务的函数内部执行代码,因此要重新加载数据和布局等内容,您需要将这些代码块移动到函数内部(就在 gulp.src).
之前
var gulp = require('gulp');
var htmlmin = require('gulp-htmlmin');
var extname = require('gulp-extname');
var assemble = require('assemble');
var middleware = require('./examples/middleware');
var gulpAssemble = require('./');
// arbitrary middleware that runs when files loaded
assemble.onLoad(/index\.hbs/, middleware(assemble));
// render templates in `test/fixtures`
gulp.task('default', function () {
// setup items on the assemble object
assemble.data({site: {title: 'Blog'}});
assemble.data(['test/fixtures/data/*.{json,yml}']);
assemble.layouts(['test/fixtures/layouts/*.hbs']);
assemble.partials(['test/fixtures/includes/*.hbs']);
gulp.src('test/fixtures/pages/*.hbs')
.pipe(gulpAssemble(assemble, { layout: 'default' }))
.pipe(htmlmin({collapseWhitespace: true}))
.pipe(extname())
.pipe(gulp.dest('_gh_pages/'));
});
// ============================================================
// my watch task
// ============================================================
gulp.task('watch', ['default'], function() {
gulp.watch('test/fixtures/**/*.{hbs,yml,json}', ['default']);
});
我在使用 gulp-assemble
和 gulp-watch
时遇到问题。我希望 gulp
观看整个 assemble 源目录(data
、includes
、layouts
和 pages
)并在任何时候重新编译站点文件更改。
我能够让 pages
正常工作,但是 gulp
在对 data
、includes
或layouts
个文件。
我已将 watch
任务添加到 gulp-assemble
存储库中的 example gulpfile.js:
var gulp = require('gulp');
var htmlmin = require('gulp-htmlmin');
var extname = require('gulp-extname');
var assemble = require('assemble');
var middleware = require('./examples/middleware');
var gulpAssemble = require('./');
// setup items on the assemble object
assemble.data({site: {title: 'Blog'}});
assemble.data(['test/fixtures/data/*.{json,yml}']);
assemble.layouts(['test/fixtures/layouts/*.hbs']);
assemble.partials(['test/fixtures/includes/*.hbs']);
// arbitrary middleware that runs when files loaded
assemble.onLoad(/index\.hbs/, middleware(assemble));
// render templates in `test/fixtures`
gulp.task('default', function () {
gulp.src('test/fixtures/pages/*.hbs')
.pipe(gulpAssemble(assemble, { layout: 'default' }))
.pipe(htmlmin({collapseWhitespace: true}))
.pipe(extname())
.pipe(gulp.dest('_gh_pages/'));
});
// ============================================================
// my watch task
// ============================================================
gulp.task('watch', ['default'], function() {
gulp.watch('test/fixtures/**/*.{hbs,yml,json}', ['default']);
});
如果我 运行 gulp watch
并将更改保存到 pages
目录中的任何 .hbs
文件,我看到 gulp
触发 default
在我的终端输出中,我看到 _gh_pages
中的 .html
文件随着更改而更新。
但是,如果我将更改保存到 data
、includes
或 layouts
目录,我看到 gulp
在我的终端输出中触发了 default
,但是我看到 _gh_pages
.html
文件没有变化。我必须手动 运行 gulp default
任务才能将更改应用到 _gh_pages
文件。
我需要更改什么才能获得所需的行为?
gulp-watch 只会在默认任务的函数内部执行代码,因此要重新加载数据和布局等内容,您需要将这些代码块移动到函数内部(就在 gulp.src).
之前var gulp = require('gulp');
var htmlmin = require('gulp-htmlmin');
var extname = require('gulp-extname');
var assemble = require('assemble');
var middleware = require('./examples/middleware');
var gulpAssemble = require('./');
// arbitrary middleware that runs when files loaded
assemble.onLoad(/index\.hbs/, middleware(assemble));
// render templates in `test/fixtures`
gulp.task('default', function () {
// setup items on the assemble object
assemble.data({site: {title: 'Blog'}});
assemble.data(['test/fixtures/data/*.{json,yml}']);
assemble.layouts(['test/fixtures/layouts/*.hbs']);
assemble.partials(['test/fixtures/includes/*.hbs']);
gulp.src('test/fixtures/pages/*.hbs')
.pipe(gulpAssemble(assemble, { layout: 'default' }))
.pipe(htmlmin({collapseWhitespace: true}))
.pipe(extname())
.pipe(gulp.dest('_gh_pages/'));
});
// ============================================================
// my watch task
// ============================================================
gulp.task('watch', ['default'], function() {
gulp.watch('test/fixtures/**/*.{hbs,yml,json}', ['default']);
});