【问题标题】:Looking for way to copy files in gulp and rename based on parent directory寻找在 gulp 中复制文件并根据父目录重命名的方法
【发布时间】:2014-02-09 01:08:13
【问题描述】:

对于每个模块,我都有一些需要复制到构建目录的文件,并且正在寻找一种方法来最大限度地减少重复代码:

gulp.src('./client/src/modules/signup/index.js')
  .pipe(gulp.dest('./build/public/js/signup'));

gulp.src('./client/src/modules/admin/index.js')
  .pipe(gulp.dest('./build/public/js/admin'));

到这样的事情:

gulp.src('./client/src/modules/(.*)/index.js')
  .pipe(gulp.dest('./build/public/js/$1'));

显然上述方法不起作用,那么有没有办法做到这一点,或者一个已经做到这一点的 npm?

谢谢

【问题讨论】:

    标签: node.js gulp


    【解决方案1】:
    return gulp.src('./client/src/modules/(.*)/index.js')  
      .pipe(gulp.dest('./build/public/js/$1'));
    

    为我工作!

    【讨论】:

    • .. 即便如此,这就是答案。
    • ...所以有人可以重写它,让它确实按原样工作,所以来到这个页面寻找确切的sn-p代码的人可以实际使用它吗?
    • 那么... src/dest glob 中是否允许使用括号和 $n “反向引用”?他们不是正则表达式,afaik。这看起来像我正在寻找的东西,但是vinyl-fs 文档对 .src() 和 .dest() 选项以及它们允许的内容以及它们的工作方式相当简洁。
    【解决方案2】:

    最好的方法是在获取文件时配置base,如下所示:

    gulp.src('./client/src/modules/**/index.js', {base: './client/src/modules'})
      .pipe(gulp.dest('./build/public/js/'));
    

    这告诉gulp 使用模块目录作为确定相对路径的起点。

    (另外,如果你想包含所有的JS文件,你可以使用/**/*.js...)

    【讨论】:

    • 必须有一种更动态的方式来执行此操作 - 当 src 文件来自 2 个不同的目录并且您希望将它们的目录保留在 dest 中时怎么办?
    • @IvanDurst 我使用 OP(答案)代码管理了这个特定案例。使用基本配置使用从 gulp 文件到独立文件和 ./folder-example/** 完整文件夹和文件的相对路径。
    【解决方案3】:

    不是答案,但适用于该问题在搜索结果中的出现。

    在 gulp 中复制文件/文件夹

    gulp.task('copy', () => gulp
      .src('index.js')
      .pipe(gulp.dest('dist'))
    );
    

    【讨论】:

    • 嗯...我的 gulp 说这个任务完成了,但是输出文件不存在。
    • 你必须返回流,让 Gulp 知道任务何时完成。
    • 我很困惑为什么说“不是答案”的答案比回答问题的公认答案有更多的赞成票。我不确定我们应该用旨在使搜索引擎做一些特定事情而不是提供问题答案的答案来混乱 SO。我认为搜索引擎的工作是利用他们在抓取网站时获得的信息做出有用的事情。只是我的 0.02 美元
    • @jinglesthula 对于那些通过搜索引擎解决这个问题的人来说,这是一项有用的服务,无论搜索引擎的工作做得如何。我很感激。
    • 哈哈刚刚意识到这比正确的问题或正确的答案更受欢迎:P
    【解决方案4】:

    用于保留输入目录树将被保留。

    .pipe(gulp.dest(function(file) {
        var src = path.resolve(SRC_FOLDER);
        var final_dist = file.base.replace(src, '');
        return DIST_FOLDER + final_dist;
    }))
    

    使用这个,你可以输入src:.src(SRC_FOLDER + '/**/*.js')

    其他答案对我不起作用(例如在src()} 上使用base:,因为某些插件会使目录树变平。

    【讨论】:

      【解决方案5】:

      并行复制文件

      gulp.task('copy', gulp.parallel(
      () =>  gulp.src('*.json').pipe(gulp.dest('build/')),
      () =>  gulp.src('*.ico').pipe(gulp.dest('build/')),
      () =>  gulp.src('img/**/*').pipe(gulp.dest('build/img/')),
      )
      );
      

      【讨论】:

        猜你喜欢
        • 2018-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-07
        • 1970-01-01
        • 2021-07-14
        • 2013-10-25
        • 1970-01-01
        相关资源
        最近更新 更多