Giter VIP home page Giter VIP logo

gulp-clean's Introduction

Deprecated in favor of https://github.com/gulpjs/gulp/blob/master/docs/recipes/delete-files-folder.md

gulp-clean Build Status NPM version

Removes files and folders.

Install

Install with npm.

npm install --save-dev gulp-clean

Examples

var gulp = require('gulp');
var clean = require('gulp-clean');

gulp.task('default', function () {
	return gulp.src('app/tmp', {read: false})
		.pipe(clean());
});

Option read:false prevents gulp from reading the contents of the file and makes this task a lot faster. If you need the file and its contents after cleaning in the same stream, do not set the read option to false.

var gulp = require('gulp');
var clean = require('gulp-clean');

gulp.task('default', function () {
	return gulp.src('app/tmp/index.js')
		.pipe(clean({force: true}))
		.pipe(gulp.dest('dist'));
});
For safety files and folders outside the current working directory can be removed only with option force set to true.

Clean as a dependency:

var gulp = require('gulp');
var clean = require('gulp-clean');

gulp.task('clean-scripts', function () {
  return gulp.src('app/tmp/*.js', {read: false})
    .pipe(clean());
});

gulp.task('scripts', ['clean-scripts'], function () {
  gulp.src('app/scripts/*.js')
    .pipe(gulp.dest('app/tmp'));
});

gulp.task('default', ['scripts']);

Make sure to return the stream so that gulp knows the clean task is asynchronous and waits for it to terminate before starting the dependent one.

License

MIT @ Peter Vilja

gulp-clean's People

Contributors

b-long avatar bcaudan avatar calvinmetcalf avatar mathbruyen avatar pdehaan avatar peter-vilja avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

gulp-clean's Issues

Subsequent tasks fail sometimes

Hello!

I'm experiencing some errors when using gulp-clean:

[gulp] Plumber found unhandled error: Error: EPERM, open 'S:\Project\gulpjs.dummy\public\static\image\cat.gif'
[gulp] Plumber found unhandled error: Error: EEXIST, mkdir 'S:\Project\gulpjs.dummy\public\static\image'
[gulp] Plumber found unhandled error: Error: EEXIST, mkdir 'S:\Project\gulpjs.dummy\public\static\image'
[gulp] Plumber found unhandled error: Error: EEXIST, mkdir 'S:\Project\gulpjs.dummy\public\static\image'
[gulp] Plumber found unhandled error: Error: EEXIST, mkdir 'S:\Project\gulpjs.dummy\public\static\image'

I'm not sure why this happens. My gulpfile can be found here:
https://github.com/thasmo/gulpjs.dummy/blob/master/gulpfile.js

I'm trying to deleted a directory before running other tasks, but somehow the subsequent tasks do not create the desired directories/files after running gulp-clean. It seems like gulp-clean somehow interferes with the other tasks.

Any idea what that could be?

Event 'end' not fired

For my project I need to reuse parts of my Gulp file for other tasks, for example cleanJs():

function cleanJs(cb) {
    gulp.src(..., {read: false})
        .pipe(clean())
        .on('end', function() {
            console.log('never called');
            cb();
        });
}

gulp.task('one task', function(cb) {
    cleanJs(cb);
    ...
});

gulp.task('other task', function(cb) {
    cleanJs(cb);
    ...
});

This does not seem to work. Not sure what the case is here or if I am doing something wrong.

ENOENT on ** globs

Hi guys.

Here is simple clean task:

gulp.task('clean', function () {
  return gulp.src('js/**', {read: false})
    .pipe(clean({force: true}));
});

My issue is hierarchy, for example

js/
js/modules/1.js

in this case, modules removes first, and when clean try to remove 1.js, ENOENT throwed.

Is there a way to handle ** globs in correct order(files, then dirs)?
Or is there other glob to remove all in folder?

Thanks.

unhandled 'error' event

I got this error while running gulp clean task.

// Clean.
gulp.task('clean', function() {
    gulp.src(['client/dist'], {read: false}).pipe(clean());
});
events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: Unable to delete "/Users/fraserxu/work/Octokan/client/dist" file (ENOTEMPTY, rmdir '/Users/fraserxu/work/Octokan/client/dist/assets/fonts').
    at /Users/fraserxu/work/Octokan/node_modules/gulp-clean/index.js:20:21
    at CB (/Users/fraserxu/work/Octokan/node_modules/gulp-clean/node_modules/rimraf/rimraf.js:42:5)
    at /Users/fraserxu/work/Octokan/node_modules/gulp-clean/node_modules/rimraf/rimraf.js:135:18
    at CB (/Users/fraserxu/work/Octokan/node_modules/gulp-clean/node_modules/rimraf/rimraf.js:42:5)
    at /Users/fraserxu/work/Octokan/node_modules/gulp-clean/node_modules/rimraf/rimraf.js:135:18
    at CB (/Users/fraserxu/work/Octokan/node_modules/gulp-clean/node_modules/rimraf/rimraf.js:42:5)
    at Object.oncomplete (fs.js:107:15)

error thrown when trying to delete a file that is gone.

gulp-clean gets the listing of files to delete:

build/x
build/x/this.js

it seems the deletion of build/x gets rid of everything and when clean tries to delete build/x/this.js it gives an error. WHY? it's already gone! Perhaps clean should sort the list in reverse length order before doing its work or have an option to ignore / warn on files that are missing.

slow to delete folders on windows

running this batch file will delete them 1/4 of the time so its a problem with gulp-clean or its dependencies.

del /f/s/q folder > nul
rmdir /s/q folder

Fail to clean file tree in one pass

I have to run gulp clean multiple times to get my build directory cleaned up. I get the following error:

 ⮀ gulp clean
[02:34:32] Using gulpfile ~/Development/Projects/it/employee-portal-web/Gulpfile.js
[02:34:32] Starting 'clean'...
[02:34:32] Finished 'clean' after 6.57 ms

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: ENOENT, stat '/Users/bkuberek/Development/Projects/it/employee-portal-web/build/fonts/fontawesome-webfont.eot'

 ⮀ gulp clean 
[02:34:46] Using gulpfile ~/Development/Projects/it/employee-portal-web/Gulpfile.js
[02:34:46] Starting 'clean'...
[02:34:46] Finished 'clean' after 6.76 ms

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: ENOENT, stat '/Users/bkuberek/Development/Projects/it/employee-portal-web/build/views/people/person_profile.html'

 ⮀ gulp clean
[02:34:59] Using gulpfile ~/Development/Projects/it/employee-portal-web/Gulpfile.js
[02:34:59] Starting 'clean'...
[02:34:59] Finished 'clean' after 7.11 ms

Here is my task:

gulp.task('clean', function () {
  gulp.src([PATH.build + '/**', PATH.dist + '/**'], {read: false}).pipe(gClean({force: true}));
});

Advocate use of read: false

var gulp = require('gulp');
var clean = require('gulp-clean');

gulp.task('default', function() {
    gulp.src(['app/tmp']. {read: false})
        .pipe(clean());
});

This will be a lot faster since there it actually won't hit the file system to read the contents of the file

Not deleting anything on W10

Hi, I implemented a task like this
gulp.task('clean'), function () { return gulp.src('web/**').pipe(clean.clean({force: true})); };

Whenever I call it with "gulp clean" it tells me "starting 'clean'" and finished clean after 44us but it never deleted anything.

I am on Windows 10 64bit

How prevent specific folder/file from deletion

I want to delete everything but a folder and its files, I couldn't find a way of doing this and I found nothing that could help me.

That's what I have now:

function cleanServer(){
	return gulp.src(['!../root/dev/render/cache/*.cache', '../root/dev/'], {read: false, force: true, allowEmpty: true})
	.pipe(clean({force: true}))
		.on('error', errFn)
}
  • Node: 5.3.0
  • NPM: v8.4.0
  • Gulp CLI version 1.3.0
  • Gulp Local version 4.0.0

How could I delete everything but the cache folder and its files?

semver/semver.browser.js.gz: Error: Duplicate resources

This occurs from semver which is a denedency of gulp-clean

 [email protected]
 │ ├─┬ [email protected]
 │ │ ├─┬ [email protected]
 │ │ │ └─┬ [email protected]
 │ │ │   ├─┬ [email protected]
 │ │ │   │ ├── [email protected]

[app/node_modules/semver/semver.browser.js] /Users/ishandutta2007/Documents/Projects/bb-ns-ng-dr/platforms/android/src/main/assets/app/node_modules/semver/semver.browser.js [app/node_modules/semver/semver.browser.js] /Users/ishandutta2007/Documents/Projects/bb-ns-ng-dr/platforms/android/src/main/assets/app/node_modules/semver/semver.browser.js.gz: Error: Duplicate resources
at com.android.ide.common.res2.DataSet.checkItems(DataSet.java:466)
at com.android.ide.common.res2.DataSet.loadFromFiles(DataSet.java:258)
at com.android.ide.common.res2.AssetSet.loadFromFiles(AssetSet.java:30)
at com.android.build.gradle.tasks.MergeSourceSetFolders.doFullTaskAction(MergeSourceSetFolders.java:104)
at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:88)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:163)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:123)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:95)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:76)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:236)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:228)
at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:61)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:228)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:215)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:77)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:58)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:32)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:113)
at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
at org.gradle.initialization.DefaultGradleLauncher$3.execute(DefaultGradleLauncher.java:196)
at org.gradle.initialization.DefaultGradleLauncher$3.execute(DefaultGradleLauncher.java:193)
at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:56)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:193)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:119)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:102)
at org.gradle.launcher.exec.GradleBuildController.run(GradleBuildController.java:71)
at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:41)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:49)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:44)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:29)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:47)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Contant no such file or directory

var delConfig = [].concat(config.build + '**/*', config.temp);
return gulp.src(delConfig, {read: false})
    .pipe($.clean());

config.build = ./build/
config.temp = ./src/client/.tmp/

Before I changed config.build + '**/* from config.build it just kept hitting my html views and giving me a no such file error and now it just does it on random files.

Errors when symlink is present

I think the problem is that gulp expands the files under the symlink, clean deletes the symlink, the files under the symlink go away, then clean errors when trying to delete those files.

I'm not sure whether gulp should have an option to not follow symlinks, or clean should either figure it out or suppress errors.

(I also submitted this against gulp-rimraf)

How to clean and backup a directory recursively?

I use the following code to clean an entire build directory and try to backup it recursively. But what I end up with as a backup is only the base directories without their contents. Is that possible at all?

/**
 * Wipe the build directory and create a backup
 */
    clean = {
        run: require("gulp-clean"),
        command: "clean",
        source: config.basedir + "build/*",
        target: config.basedir + "backup/build." + helpers.timestamp.now
    };

    gulp.task(clean.command, function() {
        return gulp
            .src(clean.source, {read: true})
            .pipe(clean.run({force: false}))
            .pipe(gulp.dest(clean.target));
    });

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.