如何仅在修改后的文件上运行 tslint

Posted

技术标签:

【中文标题】如何仅在修改后的文件上运行 tslint【英文标题】:How to run tslint only on modified files 【发布时间】:2017-08-01 15:34:07 【问题描述】:

我想将 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 来形成论点。

怎么做?

【问题讨论】:

【参考方案1】:

试试 xargs

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

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

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

【讨论】:

感谢您的回答,但我的配置无法正常工作。 xargs 适用于 *nix 系统。是否有任何通用的 npm 解决方案,或者我必须为每个系统引入几个特定于平台的命令? 尝试以编程方式使用 tslint 然后npmjs.com/package/tslint#library-1【参考方案2】:

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

例如,使用gulp 与gulp-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

【讨论】:

以上是关于如何仅在修改后的文件上运行 tslint的主要内容,如果未能解决你的问题,请参考以下文章

仅在修改列时触发 SQL 更新

如何运行 tslint.json?

如何使用 apktool 在 Mac 上签署修改后的 apk

如何仅在安装和修改时执行条件自定义操作?

CURL 仅在已修改时获取文件

如何在保持原始文件扩展名的同时保存修改后的图像文件名