0

我有一个 Gulp 任务,它呈现一个包含 Lodash 模板的文件并将其放在我的构建目录中。我使用gulp-template进行渲染。

为了正确渲染,我的模板需要从我的构建目录中传递一个文件列表。我使用glob得到这个列表。由于 glob API 是异步的,我不得不像这样编写我的任务:

gulp.task('render', function() {
    glob('src/**/*.js', function (err, appJsFiles) {

        // Get rid of the first path component.
        appJsFiles = _.map(appJsFiles, function(f) {
            return f.slice(6);
        });

        // Render the file.
        gulp.src('src/template.html')
            .pipe(template({
                scripts: appJsFiles,
                styles: ['style1.css', 'style2.css', 'style3.css']
            }))
            .pipe(gulp.dest(config.build_dir));
    });
});

这对我来说似乎很不雅。有没有更好的方法来编写这个任务?

4

2 回答 2

2

解决您的特定问题的最简单方法是使用glob 的同步模式,该模式位于您链接到的文档中。然后返回结果gulp.src

gulp.task('render', function() {
    var appJsFiles = _.map(glob.sync('src/**/*.js'), function(f) {
        return f.slice(6);
    });
    // Render the file.
    return gulp.src('src/template.html')
        .pipe(template({
            scripts: appJsFiles,
            styles: ['style1.css', 'style2.css', 'style3.css']
        }))
        .pipe(gulp.dest(config.build_dir));
});
于 2014-02-25T15:43:08.563 回答
0

如果您希望任务异步运行,请接收回调。

gulp.task('render', function(cb) {
    glob('src/**/*.js', function (err, appJsFiles) {
        if (err) {
            return cb(err);
        }

        // Get rid of the first path component.
        appJsFiles = _.map(appJsFiles, function(f) {
            return f.slice(6);
        });

        // Render the file.
        gulp.src('src/template.html')
            .pipe(template({
                scripts: appJsFiles,
                styles: ['style1.css', 'style2.css', 'style3.css']
            }))
            .pipe(gulp.dest(config.build_dir))
            .on('end', cb);
   });
});
于 2014-03-05T01:13:29.177 回答