如何在 gulp.src.options.base 中动态解析路径
How to parse path dynamically in gulp.src.options.base
我正在尝试使用 main-bower-files 编写基于 gulp 的应用程序。我想将我和供应商的所有资产文件复制到 %build_dir%/assets 文件夹,但字体文件应复制到 %build_dir %/assets/fonts。如果没有供应商文件,可以通过 gulp.src.options.base 选项轻松完成。但我不明白如何使用供应商文件来做到这一点。现在我有
gulp.task('assets', ['less'], function() {
return gulp.src('src/less/fonts/*', {base: 'src/less'})
.pipe(addSrc('src/assets/**.*'))
.pipe(addSrc(mainBowerFiles(/.*woff|woff2|otf|ttf/, {includeDev: true})))
.pipe(gulp.dest(buildDir + '/assets'));
});
但它将供应商字体复制到 %build_dir%/assets。
因此,理想情况是将 base 编写为解析供应商字体路径的正则表达式,并采用 /fonts 之前的所有路径。怎么做?
供应商文件夹具有下一个结构:
/bower_components
/lib1
/fonts
font1.woff
/lib2
/fonts
font2.otf
/lib3
/fonts
font3.ttf
So, ideal case is to write base as regexp that parses path to vendor fonts and take all path before /fonts. How to do it?
不可能。 base
选项不支持正则表达式。只有字符串。
无论如何您都不需要 base
选项。只需创建两个流,每个流都有自己的 gulp.dest()
。然后使用 merge-stream
:
合并这些流
var merge = require('merge-stream');
gulp.task('assets', ['less'], function() {
return merge(
gulp.src(['src/less/fonts/*'].concat(mainBowerFiles(/.*woff|woff2|otf|ttf/, {includeDev: true})))
.pipe(gulp.dest(buildDir + '/assets/fonts')),
gulp.src('src/assets/**.*')
.pipe(gulp.dest(buildDir + '/assets')));
});
这也意味着您不再需要 gulp-add-src
。
我正在尝试使用 main-bower-files 编写基于 gulp 的应用程序。我想将我和供应商的所有资产文件复制到 %build_dir%/assets 文件夹,但字体文件应复制到 %build_dir %/assets/fonts。如果没有供应商文件,可以通过 gulp.src.options.base 选项轻松完成。但我不明白如何使用供应商文件来做到这一点。现在我有
gulp.task('assets', ['less'], function() {
return gulp.src('src/less/fonts/*', {base: 'src/less'})
.pipe(addSrc('src/assets/**.*'))
.pipe(addSrc(mainBowerFiles(/.*woff|woff2|otf|ttf/, {includeDev: true})))
.pipe(gulp.dest(buildDir + '/assets'));
});
但它将供应商字体复制到 %build_dir%/assets。 因此,理想情况是将 base 编写为解析供应商字体路径的正则表达式,并采用 /fonts 之前的所有路径。怎么做?
供应商文件夹具有下一个结构:
/bower_components
/lib1
/fonts
font1.woff
/lib2
/fonts
font2.otf
/lib3
/fonts
font3.ttf
So, ideal case is to write base as regexp that parses path to vendor fonts and take all path before /fonts. How to do it?
不可能。 base
选项不支持正则表达式。只有字符串。
无论如何您都不需要 base
选项。只需创建两个流,每个流都有自己的 gulp.dest()
。然后使用 merge-stream
:
var merge = require('merge-stream');
gulp.task('assets', ['less'], function() {
return merge(
gulp.src(['src/less/fonts/*'].concat(mainBowerFiles(/.*woff|woff2|otf|ttf/, {includeDev: true})))
.pipe(gulp.dest(buildDir + '/assets/fonts')),
gulp.src('src/assets/**.*')
.pipe(gulp.dest(buildDir + '/assets')));
});
这也意味着您不再需要 gulp-add-src
。