1

我一直在尝试将网站从使用 Jekyll 切换到使用Gulp & Jade;它主要使用 Jekyll,因为它的模板方便,但 Jekyll 的真正用途是作为博客,所以它的更多功能指向这一点。在其中开发公司网站是可行的,但watch除非您使用开发服务器,否则会缺少类似的东西。它还具有使用 Jade 语法的优势,npm尽管 Jekyll 无疑有 Jade 插件。

Jekyll 很好地指出的一件事是mydomain.com/about,我们习惯于在路由动态站点(例如 with mod_rewrite)中使用的规范 URL 结构 ag 可以通过目录结构非常容易地实现:./about/index.html

这确实意味着站点可以生成大量文件夹,因此迁移到 Jade 我希望将其保持在最低限度。这是用于从文件gulp jade生成的代码:.html.jade

gulp.task('jade',function(callback){
    gulp.src('./jade/*.jade')
    .pipe(jade({
        pretty: true,
        markdown:marked
    }))
    .pipe(gulp.dest('./public/'));

    callback();
});

我怎样才能改变它以获得:

jade/index.jade -> public/index.html
jade/about.jade -> public/about/index.html
jade/another-page.jade -> public/another/page/index.html
4

1 回答 1

4

对于以前的项目,我使用该gulp-rename库来允许将配置文件快速切换到构建目录。事实证明,它不仅仅是正则表达式,而且将函数传递给它会为您提供一个有用的对象

path={
  basename:'about',
  dirname:'',
  extname:'html'
} 

更改这些值会更改重命名,不需要return值。因此,通过快速检查主index.jade文件,我们可以快速拆分并加入以形成目录路径,gulp.dest如果它不存在,它将为我们创建。

var jade=require('gulp-jade');
var rename=require('gulp-rename');
gulp.task('jade',function(callback){
    gulp.src('./jade/*.jade')
    .pipe(jade({
        pretty: true,
        markdown:marked
    }))
    .pipe(rename(function(path){
        if (path.basename=='index'){
            return;
        }
        path.dirname=path.basename.split('-').join('/');
        path.basename="index";
    }))
    .pipe(gulp.dest('./public/'));

    callback();
});
于 2014-10-03T14:57:59.500 回答