2015-11-04 142 views
1

我在我的解決方案目錄中有一個tslint.json文件,我試圖創建下面就https://www.npmjs.com/package/tslintWebEssentials tslint自定義規則

我創建了一個「nonImportsRule.ts」的指導方針的自定義規則,複製了來自鏈接的代碼並添加了「不導入」:對我的tslint.json文件爲true,但是該規則未被拾取。

該指南說需要指定一個rulesDirectory,但我不知道應該在哪裏配置它?

此外 - 是否有可能設置Web Essentials破壞構建,如果tslint規則被違反?

+0

您使用的是什麼版本的tslint?另外,你如何運行tslint? – JKillian

+0

我正在使用Visual Studio 2013中的WebEssentials 2013.5來運行tslint –

回答

1

好吧,我沒有使用的Web擴展要點,但網絡分析儀:https://visualstudiogallery.msdn.microsoft.com/6edc26d4-47d8-4987-82ee-7c820d79be1d

所以我不能回答這個問題,100%,但我想在這裏總結一下我的自定義規則tslint經驗。首先,從文檔中不完全清楚的是,整個事情取決於node.js。

  1. 所以首先你需要安裝節點js。這會給你npm命令到你的命令行。
  2. 用npm tslint和typescript安裝後。 https://github.com/palantir/tslint這裏是例子。這些將在「c:\ Users [用戶名] \ AppData \ Roaming \ npm \ node_modules中創建文件」
  3. 進入「c:\ Users [用戶名] \ AppData \ Roaming \ npm \ node_modules \ tslint \ lib \規則\」。在這裏創建noImportRule.ts。複製下面的內容:

    import * as ts from "typescript"; 
    import * as Lint from "../lint"; 
    
    export class Rule extends Lint.Rules.AbstractRule { 
        public static FAILURE_STRING = "import statement forbidden EDE"; 
    
        public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] { 
        return this.applyWithWalker(new NoImportsWalker(sourceFile,  this.getOptions())); 
        } 
        } 
    
    // The walker takes care of all the work. 
    class NoImportsWalker extends Lint.RuleWalker { 
    public visitImportDeclaration(node: ts.ImportDeclaration) { 
    // create a failure at the current position 
    this.addFailure(this.createFailure(node.getStart(), node.getWidth(), Rule.FAILURE_STRING)); 
    
    // call the base version of this visitor to actually parse this node 
    super.visitImportDeclaration(node); 
    } 
    } 
    

注意的是,在例如進口皮棉沒有用,不會用這種方式工作相對路徑給出。 4.激發命令:「tsc -m commonjs --noImplicitAny。\ noImportsRule.ts」。這將編譯您的自定義規則的ts。你會得到一堆編譯錯誤,例如:../enableDisableRules.d.ts(1,21):錯誤TS2307:找不到模塊'打字稿'。這是一個很好的問題,爲什麼這些拋出,但忘了他們,js文件將生成無論如何。 5.將「no-imports」:true添加到您的tslint.json中(現在這應該是自定義的)。使用命令行中的命令: tslint -c'sample.tslint.json'test.ts 您將得到: test.ts [1,1]:import語句禁止。所以你制定了自定義規則! :)

這都是從命令行工作。另外,我制定了自定義規則與WebAnalyzer一起工作,至少是暫時的。 我需要在這裏複製我的自定義規則的文件: c:\ Users [用戶名] \ AppData \ Local \ Temp \ WebAnalyzer1.6.65 \ node_modules \ tslint \ lib \ rules \當然配置WebAnalyzer tslint.json以包含自定義規則。 我不知道Web Essentials擴展如何使這整個事情與tslint工作,但我想一些類似的方式:)。某處應該有一個文件夾(node_modules \ tslint \ lib \ rules),其中包含tslint使用的規則。在那裏你需要複製你的自定義的。 當然,最優雅的解決方案是修改Web Essentials擴展本身,並通過visual studio配置tslint的自定義規則目錄。(所以我的解決方案只是一種變通方法)

這是我在Visual Studio警告的名單自定義規則,例如:

enter image description here

3

我有一個同類的問題。我想使用TSLint擴展,tslint-microsoft-contrib和codelyzer,以及Web分析器。這沒有奏效。找出原因的第一步是在server.js中進行修改,這可以在C:\ Users \ [User] \ AppData \ Local \ Temp \ WebAnalyzer1.7.75中找到。我改變了TSLint功能分爲:

tslint: function (configFile, files) { 
    // Try catch tslint errors 
    try { 

     var tslint = require("tslint"); 
     var options = { 
      formatter: "json", 
      configuration: JSON.parse(fs.readFileSync(configFile, "utf8").trim()) 
     }; 

     var results = []; 

     for (var i = 0; i < files.length; i++) { 
      var file = files[i]; 
      var ll = new tslint(file, fs.readFileSync(file, "utf8"), options); 
      results = results.concat(JSON.parse(ll.lint().output)); 
     } 

    } catch(error) { 
     // Return tslint error to visual studio so we can get some ideas for counter measures. 
     var result = JSON.parse('[{"endPosition": {"character": 0,"line": 0,"position": 0},"failure": "INSTALL ERROR","name": "/","ruleName": "INSTALL ERROR","startPosition": {"character": 0,"line": 0,"position": 0}}]'); 
     result[0].failure = error.message; 
     return result; 
    } 

    return results; 
}, 

的交替導致在Visual Studio錯誤列表錯誤反饋當我運行Web分析器。不要忘記在應用這個變更後,用任務管理器強制一個新的node.exe實例。反饋含鉛,對我的特殊情況,在下面的目錄下安裝NPM包:

套餐:

  • 「codelyzer」: 「0.0.12」
  • 「tslint」:「^3.7.3"
  • 「tslint - 微軟的contrib」: 「^ 2.0.2」
  • 「打字稿」: 「^ 1.8.9」

目錄:

  • C:\用戶\ [用戶] \應用程序數據\本地的\ Temp \ WebAnalyzer1.7.75
  • C:\ Program Files文件(x86)的\微軟的Visual Studio 14.0 \ Common7 \ IDE

在此之後,Web Analyzer能夠使用與我的grunt任務相同的tslint規則。希望更新版本的Web Analyzer能夠更加優雅地解決我的問題。