gulp-if javascript文件但不在gulp-useref的特定目录中

时间:2015-04-08 13:28:47

标签: javascript gulp

我想对不在./src/components目录中的javascript文件运行minifaction。我试过这个:

    gulp.task('index', function () {
    var assets = useref.assets();

    return gulp.src('src/index.html')
        .pipe(assets)
        .pipe(gulpif('!./src/components/** && *.js', uglify()))
        .pipe(gulpif('*.css', minifyCss()))
        .pipe(assets.restore())
        .pipe(useref())
        .pipe(gulp.dest('dist'));
});

但它似乎没有起作用(即无论如何它都会在./src/components中对js文件进行缩小)。

感谢所有帮助。提前谢谢。

3 个答案:

答案 0 :(得分:6)

面对真正的问题更新

好的,这是重点。 gulp-if使用gulp-match来评估条件。在那里你可以使用一组globs:

.pipe(gulpif(['*.js', '!./src/components/**'], uglify())

仍为其他人:

gulp-if可能是错误的做法。我建议一个流队列。

var queue = require('streamqueue')

...

return queue.queue(
    // all the JS files without components
    gulp.src(['**/*.js', '!./src/components/**/'])
        .pipe(uglify()),
    // all JS files in components
    gulp.src('./src/components/**/*.js')
)
.done()
.pipe(doSomething())

这样,您可以对所有非组件执行单独的任务,然后执行常用过程。

代码未经过测试,但您可以查看docs

答案 1 :(得分:1)

我认为真正的问题是var assets = useref.assets();将连接的文件存储在assets中。因此,单个文件的路径将丢失,并且使用这些路径的任何gulp-if语句都是无用的。

useref.assets(noconcat: true)有一个选项。我以为我可以使用:

var assets = useref.assets(noconcat: true);

return gulp.src('src/index.html')
.pipe(assets)
.pipe(gulpif(['*.js', '!./src/components/**'], uglify())
.pipe...

但这也不起作用。我不确定为什么(可能没有存储文件的完整路径?)。

无论我最终使用的解决方案是使用gulp-usemin。 gulp-usemin可以做我想在我原来的帖子中完成的事情:

gulp.task('usemin', function() {
    return gulp.src(paths.index)
        .pipe(usemin({
            js1: [uglify(), 'concat'],
            js2: ['concat'],
            css: [minifyCss(), 'concat']
        }))
        .pipe(gulp.dest('dist/'));
});

其中js1和js2是管道ID(在html中指定)。

答案 2 :(得分:1)

useref.assets()将连接文件存储在资产中是正确的。但是,现在有一个选项可以将非连接文件传递到流中。不确定这是否能解决问题,但在之前发布的另一个示例中,选项未正确传递。选项应作为对象传入,因此它应如下所示:

var assets = useref.assets({ noconcat: true });

return gulp.src('src/index.html')
    .pipe(assets)
    .pipe(gulpif(['*.js', '!./src/components/**'], uglify())
    .pipe...

我会更新文档,因为我刚注意到其中没有选项的例子。