2017-03-11 2 views
2

gitで変更されたファイルでのみ実行するようにtslintを設定したいとします。変更されたファイルでのみtslintを実行する方法

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

のでlintタスクが正常に動作しますが、それはハードコードされたマスクによって、プロジェクト内のすべてのファイルを処理します。packages.jsonで 私はと「糸くず」タスクが定義されています。 gitで修正されたファイルのリストを生成するjavascript listModified.jsがあるとします。 jsによって生成された文字列を引数としてtslintに渡すにはどうすればよいですか?

tslintはパイプではなく引数を受け付けるので、ここではパイプを使用できません。私は議論を形作るためにevalを使用しなかった。

どうすればよいですか?

答えて

2

トライxargsの

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

明らかにあなたはまた、xargsのは、あなたのシステムで利用できない場合は、使用しようと

をチェックするファイルのリストを生成するためにgitの状態またはgitのログを使用することができます通常のjavascript API https://www.npmjs.com/package/tslint#library-1

+0

あなたの答えをありがとうが、私の設定では動作しません。 xargsは* nixシステムに適しています。共通のnpmソリューションがあるか、各システムに複数のプラットフォーム固有のコマンドを導入する必要がありますか? – Nyavro

+0

プログラムでtslintを使用し、https://www.npmjs.com/package/tslint#library-1 – wookieb

1

いくつかのビルドシステムを使用することをお勧めします。ハッシュを計算するか、最後に変更された時刻をチェックすることによってファイルが変更されたかどうかを確認することができます。例えば

、JSONファイルを読み書きするためにgulp-tslintgulp-changed-in-placeプラグイン、およびjsonfileパッケージとgulpを使用して:

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は、計算されたハッシュを永続化するために、あなたは再びtslintgulp tslintを実行するときに使用されることはありませんハッシュが変更されていないファイルに対して実行されます。

関連する問題