Gulp src 忽略部分 glob 路径以进行递归复制

标签 gulp copy glob

我想将一些 openui5 资源文件从 Bower 包复制到我的输出文件夹中。它们都有一个共同的前缀(openui5-)。它们都有一个名为“资源”的子文件夹。我想将该内容从该子文件夹复制到输出中的一个常见“资源”文件夹。

我想使用 glob 来通过 gulp 复制它们。现在我必须明确给出每条路径

['bower_components/openui5-sap.m/resources/**/*',
 'bower_components/openui5-sap.ui.core/resources/**/*',
 'bower_components/openui5-themelib_sap_belize/resources/**/*']

我想使用这样的模式:

'bower_components/openui5-*/resources/**/*'

但是如果我这样做,我也会复制完整的模块名称,所以我的资源文件夹如下所示:

out/resources/
+ -- openui5-sap.m/resources/...
+ -- openui5-sap.ui.core/resources/...
+ -- openui5-themelib_sap_belize/resources/...

据我了解,这是因为默认情况下 gulp.src 会采用第一个 glob(位于模块名称中)并从那里生成递归结构。

有没有办法忽略输出的部分 glob 模式或使用另一个 glob 修剪输出路径?

我尝试并搜索了任何解决方案,但我找不到任何东西。

gulp-rename 似乎使整个层次结构变得扁平:

gulp.task('copyui5resources', function() {
    gulp.src('bower_components/openui5-*/**/*')
        .pipe(rename({ dirname: '' }))
        .pipe(gulp.dest('out/resources'));
});

使用基本选项也没有帮助。似乎只复制了其中的一部分:

gulp.task('copyui5resources', function() {
    gulp.src('bower_components/openui5-*/**/*', {base: 'bower_components/openui5-*'})
        .pipe(gulp.dest('out/resources'));
});

这是一张屏幕截图,其中包含我的输入文件夹结构和到目前为止的 gulp 任务。感谢您的帮助!

Folder structure

最佳答案

尝试使用gulp-rename,您的方向是正确的。但是,dirname 选项对于您想要完成的任务来说不够强大,因为它只能替换整个目录结构。您只想替换其中的一部分。

对于像这样的情况,gulp-rename 可以提供一个函数,该函数允许您使用 JavaScript 提供的所有功能(包括 string.replace)来更改 dirname ()

这意味着你可以这样做:

var gulp = require('gulp');
var rename = require('gulp-rename');

gulp.task('default', function() {
  return gulp.src('bower_components/openui5-*/resources/**/*')
    .pipe(rename(f => f.dirname = f.dirname.replace(/openui5-.*?\//, '')))
    .pipe(gulp.dest('out/'));
});

关于Gulp src 忽略部分 glob 路径以进行递归复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42637102/

相关文章:

linux - 从 Vertica 的复制脚本中删除页脚

javascript - 想要将 Rally 故事从一个项目复制到另一个项目

bitbucket - 在 bitbucket 管道中使用 glob 模式来匹配语义标签

javascript - 使用多种模式时出现 Node 全局错误

javascript - 如何获取 Webpack 中每个 block 包含的所有文件(或模块)的列表

javascript - 为什么 Browsersync 会实时重新加载一个编译任务而不是另一个?

javascript - 如何防止 `gulp-uglify` 移动我的全局变量?

javascript - 如何使用 gulp 正确清理项目?

ios - 从 CollectionView 单元格复制时出错(Swift)

bash - 有没有等同于 zsh 文件类型通配的 bash?