2016-08-04 32 views
0

Ich habe die folgenden Schluckaufgaben in meinem Projekt eingerichtet. Alles war gut, bis ich die dist:images Aufgaben hinzufügte.Gulp beschwert sich über das Verzeichnis, das bereits vorhanden ist, wenn ich saubere Aufgaben ausführen und bereitstellen muss

Jetzt kann jeder andere ausgeführt werden, wenn die dist:watch Aufgabe mit bewirkt, dass der Fehler

Error: EEXIST: file already exists, mkdir '/Users/toby/src/my-project/dist/imgs' 

Ich kann sehen, dass die saubere ihre Aufgabe erfüllen, bevor die anderen beginnen. Ich habe auch getestet, dass keine andere Aufgabe diesen Ordner erstellt ... also, wie kommt die dist:images Aufgabe ist dieses Verzeichnis erstellen und beschweren sich darüber!?!

Hier ist der Code ...

/** 
* dist:clean 
*/ 
gulp.task('dist:clean', function() { 
    del(config.distDir + "/**/*"); 
}); 

gulp.task('dist:html', ['dist:clean'], function() { 
    return gulp.src(config.htmlFiles) 
     .pipe(gulp.dest(config.distDir)); 
}); 

gulp.task('dist:images', ['dist:clean'], function() { 
    return gulp.src(config.imgFiles, {base: "web"}) 
     .pipe(gulp.dest(config.distDir)); 
}); 

gulp.task('dist:styles', ['dist:clean'], function() { 
    console.log(config.lessMainFile); 
    return gulp.src(config.lessMainFile) 
     .pipe(debug()) 
     .pipe(less().on('error', function (err) { 
      console.log(err); 
     })) 
     .pipe(cssmin().on('error', function (err) { 
      console.log(err); 
     })) 
     .pipe(rename({suffix: '.min'})) 
     .pipe(gulp.dest(config.distDir + "/css")); 
}); 

gulp.task('dist:src', ['dist:clean', 'src']); 

/** 
* dist:browserify 
*/ 
gulp.task("dist:browserify", ['dist:src'], function() { 
    return browserify({ 
     basedir  : '.', 
     debug  : true, 
     entries  : [config.buildJsDir + '/src/main.js'], 
     cache  : {}, 
     packageCache: {} 
    }) 
     .bundle() 
     .pipe(source('js/main.js')) 
     .pipe(gulp.dest(config.distDir)); 
}); 

gulp.task('dist', ['dist:html', 'dist:images', 'dist:styles', 'dist:src', 'dist:browserify']); 


gulp.task('dist:watch', ['dist'], function() { 
    return gulp.watch(config.srcAllTypeScript.concat(config.webDir + "/**/*"), ['dist']); 
}); 

Vielen Dank für Ihre Hilfe im Voraus

+1

Versuchen 'Rückkehr del (config.distDir + "/ **/*")' oder 'del.sync (config.distDir + "/ **/*")' in Ihrem 'dist: clean' Aufgabe. –

Antwort

-1

Die Lösung ganz verwandt ist zu schlucken und Aufgaben zu sehen. Sie löschen das Verzeichnis config.imgFiles jedes Mal, wenn sich eine Datei in jeder Aufgabe ändert, und Sie erstellen den Ordner auch jedes Mal, wenn sich eine Datei ändert, und Sie befinden sich somit in einem Race-Zustand des Betriebssystems.

Dies hat die dist:clean Aufgabe nur beim ersten Start des Build verwendet.

/** 
* dist:clean 
*/ 
gulp.task('dist:clean', function() { 
    del(config.distDir + "/**/*"); 
}); 

gulp.task('dist:html', function() { 
    return gulp.src(config.htmlFiles) 
     .pipe(gulp.dest(config.distDir)); 
}); 

gulp.task('dist:images', function() { 
    return gulp.src(config.imgFiles, {base: "web"}) 
     .pipe(gulp.dest(config.distDir)); 
}); 

gulp.task('dist:styles', function() { 
    console.log(config.lessMainFile); 
    return gulp.src(config.lessMainFile) 
     .pipe(debug()) 
     .pipe(less().on('error', function (err) { 
      console.log(err); 
     })) 
     .pipe(cssmin().on('error', function (err) { 
      console.log(err); 
     })) 
     .pipe(rename({suffix: '.min'})) 
     .pipe(gulp.dest(config.distDir + "/css")); 
}); 

gulp.task('dist:src', function() { 
    // I did not see any `dist:src` task, so I added a placeholder 
}); 

/** 
* dist:browserify 
*/ 
gulp.task('dist:browserify', function() { 
    return browserify({ 
     basedir  : '.', 
     debug  : true, 
     entries  : [config.buildJsDir + '/src/main.js'], 
     cache  : {}, 
     packageCache: {} 
    }) 
     .bundle() 
     .pipe(source('js/main.js')) 
     .pipe(gulp.dest(config.distDir)); 
}); 

gulp.task('dist', ['dist:html', 'dist:images', 'dist:styles', 'dist:src', 'dist:browserify']); 


gulp.task('dist:watch', ['dist'], function() { 
    return gulp.watch(config.srcAllTypeScript.concat(config.webDir + "/**/*"), ['dist']); 
}); 

gulp.task('build', ['dist:clean', 'dist', 'dist:watch']); 
+0

Das ist schlimmer als vorher. '['dist: clean', 'dist', 'dist: watch']' bedeutet, dass Sie "dist: clean" und "dist" ** gleichzeitig ausführen **. Es führt ** nicht ** dist: clean dist <. Lesen Sie die [Dokumente] (https://github.com/gulpjs/gulp/blob/master/docs/API.md#deps). –