如何仅对已修改的文件运行tslint

时间:2017-03-11 07:54:06

标签: javascript npm tslint

我想配置tslint只在git修改过的文件上运行。 在packages.json中,我将'lint'任务定义为:

{
  "scripts": {
     "lint": "tslint \"./src/**/*.{ts,tsx}\"",
     ...
  },
  "dependencies": {
     "tslint": "4.3.1",
     ... 
  },
  ...
}

所以lint任务工作正常,但它通过硬编码掩码处理项目中的所有文件。假设我有一个javascript listModified.js,它会生成git修改过的文件列表。如何将js生成的字符串作为参数传递给tslint?

我不能在这里使用管道,因为tslint接受参数而不是管道。我没有使用eval来形成参数。

怎么做?

2 个答案:

答案 0 :(得分:2)

尝试xargs

echo "file1.ts\nfile2.ts" | xargs tslint

显然,你也可以使用 git status git log 来生成要检查的文件列表

如果您的系统中没有xargs,请尝试使用常规的JavaScript API https://www.npmjs.com/package/tslint#library-1

答案 1 :(得分:1)

我建议您使用一些构建系统,因为它应该有插件,允许通过计算哈希或检查上次修改时间来检查文件是否被修改。

例如,使用带有gulpgulp-tslint插件的gulp-changed-in-place和用于读取和写入JSON文件的jsonfile包:

var changedInPlace = require('gulp-changed-in-place'),
    gulpTsLint = require('gulp-tslint'),
    jsonfile = require('jsonfile');

var tsHashFile = 'ts.hash.json';
gulp.task('tslint', function (cb) {
    jsonfile.readFile(tsHashFile, function (err, obj) {
        var firstPass = false;
        if (err) {
            firstPass = true;
            obj = {};
        }
        return gulp.src(tsGlob)
            .pipe(changedInPlace({
                cache: obj,
                firstPass: firstPass
            }))
            .pipe(gulpTsLint())
            .pipe(gulpTsLint.report())
            .on('end', function (event) {
                jsonfile.writeFile(tsHashFile, obj, function () {
                    cb(event);
                });
            });
    });
});

tsHashFile用于持久计算哈希值,当您再次运行gulp tslint时,tslint将不会执行散列未更改的文件。