在 gulp 任务中删除文件

2022-01-12 00:00:00 build javascript gulp

我有一个 gulp 任务,我想获取一些源文件并将它们复制到 build/premiumbuild/free 然后从构建/免费.

我的尝试是这样做的:

gulp.task("build", ["clean"], function () {gulp.src(["src/*", "!src/composer.*", "LICENSE"]).pipe(gulp.dest("build/premium")).pipe(del(["build/free/plugins/*", "!build/free/plugins/index.php"])).pipe(gulp.dest("build/free"));});

这会导致错误:

TypeError: dest.on 不是函数在 DestroyableTransform.Stream.pipe (stream.js:45:8)在 Gulp.<匿名>(/Users/gezim/projects/myproj/gulpfile.js:9:6)

如何在删除端口时完成此操作?有没有更好的方法来做到这一点?

解决方案

我会使用 gulp-filter 只删除不应该从第二个目的地复制的内容.

我将任务的意图解释为希望 src 中存在的所有内容都存在于 build/premium 中.但是,build/free 应该排除最初在 src/plugins 中但仍应包含 src/plugins/index.php 的所有内容.p>

这是一个有效的 gulpfile:

var gulp = require("gulp");var filter = require("gulp-filter");变种德尔=要求(德尔");gulp.task("干净", function () {返回德尔(构建");});gulp.task("build", ["clean"], function () {返回 gulp.src(["src/**", "!src/composer.*", "LICENSE"]).pipe(gulp.dest("build/premium")).pipe(filter(["**", "!plugins/**", "plugins/index.php"])).pipe(gulp.dest("build/free"));});

传递给 filter 的模式是 relative 路径.由于 gulp.src 模式具有 src/** 这意味着它们是相对于 src 的.

还要注意,del 不能直接传递给 .pipe(),因为它返回一个承诺.它可以从任务中返回,就像 clean 任务一样.

I have a gulp task in which I want to take some source files and copy them to build/premium and build/free and then remove some extra files from build/free.

My attempt at that was doing this:

gulp.task("build", ["clean"], function () {
  gulp.src(["src/*", "!src/composer.*", "LICENSE"])
    .pipe(gulp.dest("build/premium"))
    .pipe(del(["build/free/plugins/*", "!build/free/plugins/index.php"]))
    .pipe(gulp.dest("build/free"));
});

Which results in an error:

TypeError: dest.on is not a function
    at DestroyableTransform.Stream.pipe (stream.js:45:8)
    at Gulp.<anonymous> (/Users/gezim/projects/myproj/gulpfile.js:9:6)

How do I accomplish this the deleting port? Is there a better way altogether to do this?

解决方案

I would use gulp-filter to drop only what should not be copied from the 2nd destination.

I interpreted the intent of the task as wanting everything present in src to be present in build/premium. However, build/free should exclude everything which was originally in src/plugins but should still include src/plugins/index.php.

Here is a working gulpfile:

var gulp = require("gulp");
var filter = require("gulp-filter");
var del = require("del");

gulp.task("clean", function () {
  return del("build");
});

gulp.task("build", ["clean"], function () {
  return gulp.src(["src/**", "!src/composer.*", "LICENSE"])
    .pipe(gulp.dest("build/premium"))
    .pipe(filter(["**", "!plugins/**", "plugins/index.php"]))
    .pipe(gulp.dest("build/free"));
});

The patterns passed to filter are relative paths. Since the gulp.src pattern has src/** it means they are relative to src.

Note also that del cannot be passed straight to .pipe() as it returns a promise. It can be returned from a task, like the clean task does.

相关文章