Gulp:如何将 filename.pug 构建为 filename/index。html

Gulp: How can I build filename.pug to filename/index.html

现在我正在使用 gulp-pug

gulp.task('html', function(){
    return gulp.src(['src/**/*.pug', ...ignorePug])
        .pipe(pug())
        .pipe(gulp.dest('build'))
});

如何构建我的 HTML,使文件名成为文件夹名。

示例:

src/index.pug -> build/index.html
src/team.pug -> build/team/index.html
src/somepage.pug -> build/somepage/index.html

更新

我在这里发布了一个 npm 包和 gulp 插件来解决这个确切的问题:https://www.npmjs.com/package/gulp-url-builder


原答案

我有同样的愿望并编写了一个函数,该函数使用 gulp-rename 在处理文件路径时重写文件路径。

在你运行 pug(), 运行 rename() 具有此功能后:

// custom pathbuilder function
const pathbuilder = (path) => {
    if ('index' !== path.basename) {
        path.dirname = path.basename.split('_').join('/')
        path.basename = 'index'
    }
}

gulp.task('html', function(){
    return gulp.src(['src/**/*.pug', ...ignorePug])
        .pipe( pug() )
        .pipe( rename((path) => { pathbuilder(path) }) )
        .pipe( gulp.dest('build') )
})

它可以满足您的需求。此外,您可以使用下划线来深入目录。

src/index.pug          -> build/index.html
src/team.pug           -> build/team/index.html
src/team_alexander.pug -> build/team/alexander/index.html
src/somepage.pug       -> build/somepage/index.html

确保先安装并要求重命名包。