shannonmoeller / gulp-hb

A sane Gulp plugin to compile Handlebars templates. Useful as a static site generator.
http://npm.im/gulp-hb
MIT License
147 stars 14 forks source link

Ignore partials #53

Closed MickL closed 7 years ago

MickL commented 7 years ago

I have one folder containing everything mixed(views and partials) and i don't want the partials to be compiled. But gulp-hb is compiling every file.

At gulp-compile-handlebars there is an option ignorePartials: true which does exactly this. Does gulp-hb has something similiar?

e.g.

But they are totally mixed so it would not be an option to exclude certain directories.

shannonmoeller commented 7 years ago

gulp-hb assumes that you're providing globs to exactly match the files you want compiled or included as partials. I'd recommend splitting up your files into separate directories, or possibly using a different extension. Perhaps .html for pages and .hbs for partials.

I'm not familiar with how gulp-compile-handlebars's ignorePartials flag works, but it almost looks like it just suppresses the missing partial warning.

MickL commented 7 years ago

The two provided solutions are no option for our projects. The structure follows something like Angular with nested components. There will be no special directory since it is mixed. Maybe we could use a prefix like "_*.hbs" but gulp.src doesn't accept excludes.

Is there any chance you will implement this like gulp-compile-handlebars did?

I don't think there is a missing partial warning. The partial is registered thats all it needs. It just should not get rendered to .html.

shannonmoeller commented 7 years ago

I'm pretty sure that gulp.src will let you do something like this:

gulp
    .src([
        'src/**/*.hbs',
        '!**/layout/**',
        '!**/partials/**',
    ])
    .pipe(hb( ... ))
    .pipe(gulp.dest('dest'));

Would that solve the issue?

MickL commented 7 years ago

gulp.src(['**/*.hbs', '!**/_*.hbs']) does.

Anyway I would leave this issue open and love to see this implemented. gulp-compile-handlebars is pretty small maybe you can adopt the logic.

Thanks for your quick responses!

shannonmoeller commented 7 years ago

PRs welcome. :)

shannonmoeller commented 7 years ago

@MickL The ignorePartials flag of gulp-compile-handlebars doesn't seem to do what you're asking for. It appears to mock unknown partials such that the template isn't touched. For example, given these two files:

foo.hbs:

{{> header}}
<p>Hi from foo</p>
{{> footer}}

header.hbs:

<h1>Header</h1>

gulp-compile-handlebars would output:

<h1>Header</h1>
<p>Hi from foo</p>
{{> footer}}

It ignored that the footer.hbs partial didn't exist and left the {{> footer}} in the file instead of removing it or throwing an error.


Closing this issue since changing the gulp.src glob pattern addressed the original issue and is the intended way to use gulp-hb.