2016-09-29 67 views
0

我使用此gulp插件使用nunjucks使HTML管理更容易。模板路徑中的全局透明模式不適用於nunjucks與吞嚥

https://github.com/carlosl/gulp-nunjucks-render

gulp.task('default', function() { 
    return gulp.src('src/templates/*.html') 
    .pipe(nunjucksRender({ 
     path: ['src/templates/'] // String or Array 
    })) 
    .pipe(gulp.dest('dist')); 
}); 

我想保持我的模板和特定頁面的諧音頁面在不同的文件夾目錄下,所以我嘗試這樣做,以保持路徑

path: ['src/templates/', 'src/common-partials/', 'src/pages/**/**/includes/'] 

,但它不工作。

Template render error: (unknown path) 
    Error: template not found: component1.nunjucks 

我的設置

enter image description here

回答

1

path選項不支持globbing。你必須通過每個單獨的路徑:

gulp.task('default', function() { 
    return gulp.src('src/templates/*.html') 
    .pipe(nunjucksRender({ 
     path: ['src/templates/', 'src/pages/section_name/sub-page/includes'] 
    })) 
    .pipe(gulp.dest('dist')); 
}); 

如果你真的想將它傳遞給gulp-nunjucks-render前使用通配符您可以使用glob模塊解決每個水珠:

var glob = require('glob'); 

gulp.task('default', function() { 
    var includeDirs = ['src/templates/', 'src/pages/**/includes']; 

    return gulp.src('src/templates/*.html') 
    .pipe(nunjucksRender({ 
     path: includeDirs.reduce(function(dirs, g) { 
     return dirs.concat(glob.sync(g)); 
     }, []) 
    })) 
    .pipe(gulp.dest('dist')); 
}); 
1

我覺得兩個/**/**/可能是問題。 **模式匹配路徑字符串中的多個級別,所以我不確定行中的兩個行爲應該是什麼。以下應符合您的目錄:

'src/pages/**/includes/' 

也就是說,如果nunjucks支持擺在首位通配符(我無法找到的文檔中的任何提及)。

+0

'SRC /頁/ * */includes /'也行不通,同樣的錯誤 –

+0

你可以嘗試一個更簡單的路徑嗎?例如'src/**'。也許nunjucks在這種情況下確實不支持globbing。 – nils