如何使用Gulp复制多个文件并保留文件夹结构

85

我正在尝试使用Gulp将文件从一个文件夹复制到另一个文件夹:

gulp.task('move-css',function(){
  return gulp.src([
    './source/css/one.css',
    './source/other/css/two.css'

    ]).pipe(gulp.dest('./public/assets/css/'));
});

以上代码将 one.csstwo.css 复制到 public/assets/css 文件夹。

如果我使用 gulp.src('./source/css/*.css'),它会将所有 CSS 文件复制到 public/assets/css 文件夹中,这不是我想要的。

如何选择多个文件并保留文件夹结构?


@lal CSS文件可以位于不同的文件夹中,因此在这种情况下正则表达式是无用的,我个人认为。 - NullPoiиteя
问题是多个文件夹中的文件是否被复制到一个名为 public/assets/css 的文件夹中? - Anulal S
是的,没错,我想要做那个。 - NullPoiиteя
3个回答

158
为了实现这一点,请指定base

¶ base - 指定相对于当前工作目录的文件夹。默认值是glob开始的位置。在保存到.dest()时,这将用于确定文件名。


在您的情况下,它应该是:
gulp.task('move-css',function(){
  return gulp.src([
      './source/css/one.css',
      './source/other/css/two.css'
  ],  {base: './source/'}) 
  .pipe(gulp.dest('./public/assets/'));
});

文件夹结构:

.
├── gulpfile.js
├── source
│   ├── css
│   └── other
│       └── css
└── public
    └── assets

24
如果你的文件有完全不同的目录结构(例如['./lib/one.js', './models/two.js']),你可以添加{base: '.'}来保持它们的完整结构。 - Tim
如何解析 src 中的每个文件、文件夹和子文件夹? - Reign.85
1
请使用双星号 gulp.src('**/*.*') 检查源代码。 - Anulal S

1

我使用gulp-flatten,并使用以下配置:

var gulp = require('gulp'),
    gulpFlatten = require('gulp-flatten');

var routeSources = {
  dist:  './public/',
  app: './app/',
  html_views: {
    path: 'app/views/**/*.*',
    dist: 'public/views/'
  }
};

gulp.task('copy-html-views', task_Copy_html_views);
function task_Copy_html_views() {
  return gulp.src([routeSources.html_views.path])
      .pipe(gulpFlatten({ includeParents: 1 }))
      .pipe(gulp.dest(routeSources.html_views.dist));
}

在那里,您可以查看有关gulp-flatten的文档:链接


-3
   gulp.task('move-css',function(){
      return gulp
                  .src([ 'source/**'], { base: './' })
                  .pipe(gulp.dest('./public/assets/css/'));
    });

你自己的代码在调用gulp.src时没有包含源代码树的完整目录结构'source/**'和基本路径{base:'./'},导致该函数失败。其他部分都是正确的。
gulp.task('move-css',function(){
  return gulp.src([
    './source/css/one.css',
    './source/other/css/two.css'

    ]).pipe(gulp.dest('./public/assets/css/'));
});

SO不赞成仅有代码的回答。为了长期价值,帮助未来的访问者学习并将这些知识应用到自己的问题中,并增加点赞的机会,请考虑在您的回答中添加解释,突出您回答中涉及到OP问题的部分。 - SherylHohman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接