如何在gulp.src.options.base中动态解析路径

时间:2016-08-01 15:10:57

标签: javascript gulp main-bower-files

我尝试使用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 写为regexp,解析供应商字体的路径并在 / fonts 之前采用所有路径。怎么做?

供应商文件夹具有下一个结构:

/bower_components
   /lib1
      /fonts
         font1.woff
   /lib2
      /fonts
         font2.otf
   /lib3
      /fonts
         font3.ttf

1 个答案:

答案 0 :(得分:1)

  

因此,理想的情况是将base编写为regexp,解析供应商字体的路径并在/ fonts之前获取所有路径。怎么做?

不可能。 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