【问题标题】:Moving files from multiple directories using Gulp copies the directories as well使用 Gulp 从多个目录移动文件也会复制目录
【发布时间】:2019-06-09 23:16:48
【问题描述】:

我正在设置 gulp 以将我所有的 html 文件从不同的模块移动到一个视图文件夹中。在模块文件夹中,每个模块文件夹具有相同的结构

模块名称/客户端/视图/anyFile.html

我已经编写了 gulp 任务“move-html”。

gulp.task('move-html', function(){
    return gulp.src('./modules/*/client/views/*.html')
    .pipe(htmlmin({ collapseWhitespace: true }))
    .pipe(gulp.dest('./public/views'));
});

我希望将所有模块中的所有 html 文件复制到 ./public/views 但是,我发现整个模块结构都被复制了。

预期: index.html

实际输出: 应用程序 |-客户 |-查看次数 |-index.html

我猜这与 module/ 之后的星号有关,但找不到任何替代方式的答案。

当我在 gulp.src 中使用文件名时,它可以正常工作,例如./modules/app/client/views/*.html

【问题讨论】:

    标签: gulp


    【解决方案1】:

    您说得对,* 之前的路径部分在这里很重要。它将形成路径的base。但这不是你想要的。您想要消除包含并遵循* 的路径部分。最简单的方法是使用gulp-flatten,这是一个可以删除指定父目录的包。

    在您的情况下,您可以像这样简单地删除它们:

    .pipe(flatten())  
    

    只保留文件名本身,然后您可以将其放入您想要的任何目录中。所以:

    const flatten = require("gulp-flatten");
    
    gulp.task('move-html', function(){
      return gulp.src('./modules/**/client/views/*.html')
        .pipe(htmlmin({ collapseWhitespace: true }))
    
        .pipe(flatten())
    
        .pipe(gulp.dest('./public/views'));
    });
    

    现在你会得到你想要的./public/views/*.html

    【讨论】:

    • 非常感谢您的快速回复,这正是我所需要的。
    • 如果您发现它有用且准确,也不要忘记接受答案。谢谢。 (点击复选标记)
    • 完成。再次感谢芽
    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2010-10-09
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多