我想对不在./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文件进行缩小)。
感谢所有帮助。提前谢谢。
答案 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...
我会更新文档,因为我刚注意到其中没有选项的例子。