【问题标题】:gulp Copy from multiple locations, dont preserve structuregulp 从多个位置复制,不保留结构
【发布时间】:2016-05-18 06:50:55
【问题描述】:

我正在尝试使用 gulp 将文件从多个位置复制到一个中心位置。我不想保留它们被复制的目录路径结构,除了从我复制的目录中的目录(希望这是有道理的)。

所以在我的示例中,我只想保留在 images 目录中找到的任何结构。

我有:

    var files = [
        'path/to/wp/my-mu-plugins/**/build/theme/images/**/*',
        'path/to/wptheme/build/theme/images/**/*',
        'bower_components/jquery-ui/themes/base/images/**/*',
        'bower_components/jquery-ui/themes/ui-lightness/images/**/*',
    ];

    return gulp.src(files)
        .pipe(gulp.dest('public_html/assets/images/'));

我尝试了不同的组合来改变 basename、base、dir 并使用 glob 将它们拉入 - 但我总是最终得到一个平面结构或我从中复制的整个结构。

我需要什么魔法组合来实现这一点 - 或者这不可能?

谢谢 =)

编辑:我认为我的问题在于path/to/wp/my-mu-plugins/** 路径,这就是麻烦开始的地方......

【问题讨论】:

    标签: node.js gulp


    【解决方案1】:

    当写入dest() 位置时,gulp 会从每个文件的路径中删除一个基本路径。如果没有提供明确的基本路径,gulp(实际上是vinyl-fs)会假定第一个 glob 之前的所有内容都是基本路径。

    在您的情况下,这意味着 'path/to/wp/my-mu-plugins/' 被假定为与 'path/to/wp/my-mu-plugins/**/build/theme/images/**/*' 匹配的所有内容的基本路径。

    虽然您可以使用base option to src() 指定显式基本路径,但这对您来说并没有多大用处,因为基本选项不支持通配符并且您不知道与'my-mu-plugins/**' 匹配的子目录或子目录数量。 .

    但是,您可以使用基本选项来禁用默认行为,然后使用 gulp-rename 从路径中删除所有内容,包括 /images/ 文件夹:

    gulp.task('default', function() {
      return gulp.src(files, { base:'./' })
        .pipe(rename(function(path) {
          path.dirname = path.dirname.replace(/(.*)?\/images\/?/, '');
        }))
        .pipe(gulp.dest('public_html/assets/images/'));
    });
    

    【讨论】:

    • 谢谢斯文!工作了一个款待!我将正则表达式更新为.replace(/(.*)?(\\|\/)images(\\|\/)?/, ''),以考虑到路径使用 \ 作为路径目录分隔符。猜这是我的 windows box 故障?
    • 是的,这是 Windows 的事情。如果您希望 Gulpfile 在所有平台上工作(以防它必须在 Linux 机器上运行),您可以使用 nodejs path module 而不是正则表达式 |。一旦你 var path = require('path'); 模块,你可以通过 path.sep 获取路径分隔符,这将是 Windows 上的 \ 和 Unix 系统上的 /。
    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多