如何在gulp中注入js和css时为index.html提供写入权限?

时间:2016-08-04 06:18:32

标签: javascript html gulp

我在私有服务器中使用perforce进行代码检查,因此在生成构建之后(例如,当只读取index.html时),我的gulp任务失败并出现以下错误。

[INFO] [11:30:19] Error: EPERM: operation not permitted, open 'C:\MyProjectDir\index.html'

一旦我签出文件或取消选中只读属性(使用Windows框),gulp任务就会成功完成。有没有办法通过gulp任务来改变它的权限,以避免这种人工干预?

PS:我使用过chmod(777)

Gulp文件(注入发生的末端部分)

var gulp = require('gulp'),
    gutil = require('gulp-util'),
    uglify = require('gulp-uglify'),
    minify = require('gulp-minify-css'),
    concatVendor = require('gulp-concat-vendor'),
    concatCss = require('gulp-concat-css'),
    rev = require('gulp-rev'),
    clone = require('gulp-clone'),
    inject = require('gulp-inject'),
    del = require('del'),
    runSequence = require('run-sequence'),
    chmod = require('gulp-chmod'),
    series = require('stream-series'),
    ngAnnotate = require('gulp-ng-annotate'),
    rename = require("gulp-rename");
...
gulp.task('index', ['gulp-js-files', 'gulp-css-files'], function() {
    var target = gulp.src(mainIndexFile);
    return target.pipe(chmod(777)).pipe(inject(series(vendorCss, customCss, vendorJs), { ignorePath: ['MyProjectDir'], addRootSlash: false }))
        .pipe(gulp.dest(mainDestination));
});
...

以管理员模式运行cmd

enter image description here

1 个答案:

答案 0 :(得分:4)

一种选择是使用gulp-exec删除attrib -r的只读标记,然后在注入数据后重新设置attrib +r(如果必要)。

以下是一个例子:

gulp.task('remove-readonly-attributes', function() {
    require("child_process").exec("attrib -r <dir-name>\*.* /s");
});