【问题标题】:How to gulp zip multiple folders and exclude some files?如何吞下多个文件夹并排除一些文件?
【发布时间】:2017-03-12 16:55:59
【问题描述】:

我是使用 Gulp 的初学者,我不太了解什么是可能的,什么是不可能的。我想实现以下目标:

我对 1 个项目的设置:

.dist
├── client-1
│ ├──campaign-1
│ │ ├── project-a
│ │ │ ├── css(文件夹)
│ │ │ ├── js(文件夹)
│ │ │ ├── 图片(文件夹)
│ │ │ ├── index.html
│ │ │ └── preview.html

(每个项目都有相同的结构。我有多个客户,他们的名字不同,活动也不同。)

!!我想为每个项目制作一个包含所有文件和文件夹的 zip 文件,preview.html 文件除外。如果名称可以是项目的名称,那就更好了。

.dist
├── client-1
│ ├──campaign-1
│ │ ├── project-a
│ │ │ ├── css(文件夹)
│ │ │ ├── js(文件夹)
│ │ │ ├── 图片(文件夹)
│ │ │ ├── index.html
│ │ │ ├── preview.html
│ │ │ └── project-a.zip(新)

如果我解压缩 zip 文件,我希望看到以下内容(不在文件夹内):

  • css(文件夹和内容)
  • js(文件夹和内容)
  • 图片(文件夹和内容)
  • index.html

如何设置 Gulp 任务来为我执行此压缩?

【问题讨论】:

  • 你好@SvenSchoenung,还有特定的文件夹之间有通配符文件夹吗?
  • 您是想知道如何做到这一点,还是只是想知道您的目标是否不可能实现?
  • 我想知道这个目标是否以及如何实现。 @亨利
  • 好吧,我是这么认为的。正如@SvenSchoenung 所说,您需要gulp-zip 进行压缩,并且(如该链接问题的答案)您将使用!negation glob 排除preview.htmls。要单独执行每个项目,请使用gulp-flatMap。要在项目之后命名 zip,您将执行类似于 this question 的答案(gulp-flatMap 的旧名称为 gulp-foreach)。

标签: gulp zip


【解决方案1】:

您可以在 gulp-zip 的帮助下完成此操作。

如果您想从压缩中排除特定文件或文件夹,您可以使用正则表达式。 检查一次,Excluding files/directories from Gulp task

见下文:

const gulp = require('gulp');
const zip = require('gulp-zip');

gulp.task('default', () => {
  return gulp.src([ 'js/**/*.js', '!js/**/*.min.js' ]) // Here I'm excluding .min.js files
    .pipe(zip('archive.zip'))
    .pipe(gulp.dest('dist'));
});

如果您想排除或包含任何特定的文件夹或文件,您也可以使用正则表达式来做到这一点。比方说,如果你想从 zip 中排除以下划线('_')符号开头的文件夹,你可以这样做,

gulp.src('js/[^_]*/*.js'); // Here I'm excluding folders that start with '_' symbol

就像我们在 javascript 中写的一样,同样的正则表达式也可以在这里工作。 希望这会有所帮助:)

【讨论】:

  • 谢谢,它是解决方案的一部分,但我仍然想在文件结构的特定“深度”定位特定文件。
  • 您想一次性压缩所有项目还是一次执行一个项目?
  • Cinnakotla 一次在一个广告系列中为每个项目创建一个 zip 会很好... :-)。因为如果它会压缩所有项目并且我每次都会添加更多项目,它只会加起来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
相关资源
最近更新 更多