寻找复制gulp文件并根据父目录重命名的方法


91

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

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?

谢谢

Answers:


131

最好的方法是base在采购文件时进行配置,如下所示:

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

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

(此外,/**/*.js如果要包含所有JS文件,也可以使用...)


6
必须有一种更动态的方式来执行此操作-如果src文件来自两个不同的目录,而您想将其目录保存在dest中呢?
伊万·杜斯特

1
@IvanDurst我使用OP(答案)代码来管理此特定案例。使用基本配置使用从gulp文件到独立文件以及./folder-example/**完整文件夹和文件的相对路径。
Caio Wilson

210

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

以gulp复制文件/文件夹

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

2
嗯...我的吞咽说此任务已完成,但输出文件不存在。
Tyguy15年

4
您必须返回流以让Gulp知道任务何时完成。
Merott 2015年

2
我很困惑,为什么说“不是答案”的答案比公认的回答问题的答案具有更多的投票权。我不确定我们是否应该使用旨在使搜索引擎做某些特定事情而不是提供问题答案的答案来使问题杂乱无章。我认为这是搜索引擎的工作,可以使他们在爬网时所获得的东西有用。只需$ 0.02美元
jinglesthula 2015年

9
@jinglesthula这对于通过搜索引擎解决此问题的人来说是一项有用的服务,无论搜索引擎的工作状况如何。我很感激。
jbkly

1
哈哈刚刚意识到这比正确的问题或正确的答案更受欢迎:P
Kirk Strobeck '16

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

为我工作!


..甚至,这就是答案。
Kirk Strobeck'3

2
...所以有人可以重写它,因此它工作的是,这样的人来到这个页面找的代码,准确的片段实际上可以使用它?
伊万·杜斯特

那么... src / dest glob中是否允许使用parens和$ n“ backreferences”?他们不是正则表达式,afaik。这看起来像我在寻找的东西,但是Vinyl-fs文档在.src()和.dest()选项以及它们所允许的内容以及它们的工作方式上相当简洁。
jinglesthula

3

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

.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')

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


0

并行复制文件

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/')),
)
);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.