我想配置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来形成参数。
怎么做?
答案 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)
我建议您使用一些构建系统,因为它应该有插件,允许通过计算哈希或检查上次修改时间来检查文件是否被修改。
例如,使用带有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
将不会执行散列未更改的文件。