2016-09-01 7 views
1

Я понимаю, что этот вопрос задан раньше, но я не нашел ответа, который специально решает эту проблему.Файлы не найдены в вашей рабочей области или у вас нет прав на доступ к ним

Я использую Visual Studio 2015 Update 3 для проекта с Core 1 (MVC 6), Angular2, а проект находится в TFS. Я использую Gulp-watch для копирования файлов html/css/js, когда я работаю над ними, и это работает больше всего того времени. У меня есть большая часть wwwroot в моем файле .tfignore, включая папку «app», где все эти файлы копируются/очищаются с помощью gulp и gulp-watch. Я знаю, что настройки tfignore работают, потому что TFS не пытается зафиксировать эти файлы. Однако, когда Gulp выполняет очистку в этой папке, я получаю «не может быть найден в вашей рабочей области или у вас нет доступа к ней». Эта проверка TFS замедляет процесс, когда я строю, и этого достаточно, чтобы его исправить, но время от времени процесс Gulp-Watch терпит неудачу, потому что у него нет прав на копирование определенного html-файла. Ошибка копирования gulp-watch - EPERM: operation not permitted, open 'dashboard.component.html' at Error (native) Process terminated with code 1. Если я очистку, а затем повторно запустил копию Gulp, у вас нет разрешений. Я думаю, что, возможно, TFS играет определенную роль в этой проблеме, даже если эти файлы tfignored.

PS. Я читал, что вы можете использовать gulp-plumber, чтобы избежать ошибок при ошибках, но я пытаюсь выяснить, что вызывает ошибки TFS в wwwroot и, надеюсь, в результате исправить ошибки частого копирования файлов.

Глоток код в вопросе:

var appDestPath = './wwwroot/app/'; 

gulp.task('clearAppDestinationFolderHtml', 
    function() { 
     return gulp.src(appDestPath + '**/*.html') 
      .pipe(clean()); 
    }); 

gulp.task('clearAppDestinationFolderCss', 
    function() { 
     return gulp.src(appDestPath + '**/*.css') 
      .pipe(clean()); 
    }); 

gulp.task('moveHtml', function() { 
    gulp.start('clearAppDestinationFolderHtml'); 
    gulp.src(['app/**/*.html']).pipe(gulp.dest('./wwwroot/app/')); 
}); 

gulp.task('moveCss', function() { 
    gulp.start('clearAppDestinationFolderCss'); 
    gulp.src(['app/**/*.css']).pipe(gulp.dest('./wwwroot/app/')); 
}); 

gulp.task('watch', function() { 
    gulp.watch('app/**/*.html', ['moveHtml']); 
    gulp.watch('app/**/*.css', ['moveCss']); 
}); 

Очистка папки назначения было добавлено только при попытке решить эту проблему. Я понимаю, что чистка работает одновременно с копией и может вызвать собственные проблемы. Совсем недавно я попробовал этот код, а также скопировать только конкретный файл изменен, и в конечном итоге с той же ошибкой, как и прежде (operation not permitted, open 'wwwroot\app\User\Components\app.component.ts'):

gulp.task('watch2', function() { 
    return gulp.watch('./app/**/*', function(obj){ 
     if(obj.type === 'changed') { 
      gulp.src(obj.path, { "base": "./app/"}) 
      .pipe(gulp.dest(appDestPath)); 
     } 
    }) 
}); 

Кроме того, здесь мой .tfignore файл:

wwwroot/app 
wwwroot/scripts 
wwwroot/libs 
wwwroot/_references.js 
app/*.js 
app/*.js.map 
typings 
+0

Можете ли вы разместить код 'gulp-watch'? Ошибка 'operation not allowed' заключается в том, что этот .html-файл доступен только для чтения и/или под управлением источника. – Barryman9000

+0

@ Barryman9000 Исходная папка находится под контролем источника, но папка назначения не находится под контролем источника. – Crob

+0

О, так что ошибка, вероятно, не связана с TFS. Вы пытались настроить чистые задачи перед тем, как пытаться переместить файлы? Я предполагаю, что это как-то пытается очистить файлы, которые больше не существуют. .tfignore работает только для локальной рабочей области, но пока ваши файлы назначения не находятся в исходном управлении, я не думаю, что это вызывает эту ошибку. – Barryman9000

ответ

1

Если вы «только перемещение файлов в каталог /app, они, вероятно, по-прежнему доступны для чтения. Файлы под управлением источника TFS доступны только для чтения. Если это так, плагин gulp-chmod может удалить этот флаг только для чтения.

Кроме того, gulp-clean устарел в пользу del.

Что касается зависимости, то это не трудно сделать с глотком 3. Вы можете использовать плагин под названием run-sequence (который является временной мерой, пока Глоток-не будет отпущен), или вы можете просто установить зависимость от задачи

var gulp = require('gulp'), 
    $ = require('gulp-load-plugins')(), 
    del = require('del'), 
    appDestPath = './app/'; 


gulp.task('clean:html',() => { 
    return del([ 
     appDestPath + '**/*.html' 
    ]); 
}); 

gulp.task('clean:css',() => { 
    return del([ 
     appDestPath + '**/*.css' 
    ]); 
}); 

gulp.task('moveHtml', ['clean:html'], function() { 
    gulp.src(['src/**/*.html']) 
     .pipe($.chmod(666)) 
     .pipe(gulp.dest('./app/')); 
}); 

gulp.task('moveCss', ['clean:css'], function() { 
    gulp.src(['src/**/*.css']) 
     .pipe($.chmod(666)) 
     .pipe(gulp.dest('./app/')); 
}); 

gulp.task('watch',() => { 
    gulp.watch('src/**/*.html', ['moveHtml']); 
    gulp.watch('src/**/*.css', ['moveCss']); 
}); 
Смежные вопросы