[英]gulp-if javascript file but not in specific directory for gulp-useref
我想對不在./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文件上進行縮小)。
所有幫助表示贊賞。 提前致謝。
面對真正的問題更新
好的,這是重點。 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())
這樣,您可以對所有非組件執行單獨的任務,然后執行常用過程。
代碼未經過測試,但您可以查看文檔 。
我認為真正的問題是var assets = useref.assets();
將連接的文件存儲在assets
。 因此,單個文件的路徑將丟失,並且使用這些路徑的任何gulp-if語句都是無用的。
useref.assets(noconcat: true)
有一個選項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中指定)。
useref.assets()
將連接文件存儲在資產中是正確的。 但是,現在有一個選項可以將非連接文件傳遞到流中。 不確定這是否能解決問題,但在之前發布的另一個示例中,選項未正確傳遞。 選項應作為對象傳入,因此它應如下所示:
var assets = useref.assets({ noconcat: true });
return gulp.src('src/index.html')
.pipe(assets)
.pipe(gulpif(['*.js', '!./src/components/**'], uglify())
.pipe...
我將更新文檔,因為我只是注意到它沒有選項的例子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.