在您的工作区中找不到文件,或者您无权访问它

时间:2016-09-01 14:00:43

标签: angular gulp gulp-watch asp.net-core-1.0

我之前已经意识到这个问题,但我还没有找到专门解决这个问题的答案。

我在使用Core 1(MVC 6),Angular2的项目上使用Visual Studio 2015 Update 3,该项目在TFS中。我正在使用Gulp-watch复制html / css / js文件,因为我处理它们并且这个大多数当时正常工作。我的.tfignore文件中有大部分wwwroot,包括我的" 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也可能在这个问题上发挥作用。

PS。我已经读过你可以使用gulp-plumber来避免错误的停止,但是我试图找出导致wwwroot中TFS错误的原因,并希望结果能够先解决频繁的文件复制错误

有问题的Gulp代码:

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

1 个答案:

答案 0 :(得分:1)

如果您只是将文件移动到/app目录,它们可能仍然是只读的。 TFS源代码控制下的文件是只读的。如果是这种情况,gulp-chmod插件可以删除该只读标志。

此外,gulp-clean已被弃用,转而使用del

至于依赖关系,gulp 3并不难。您可以使用名为run-sequence的插件(这是一个临时修复,直到gulp 4发布)或者你可以设置依赖任务

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']);
});