2015-11-17 56 views
14

我正在使用Visual Studio任務運行器(2015)運行綁定到構建之前的Gulp任務。取消生成如果任務運行程序資源管理器任務失敗

我已經設置好了,當gulp任務失敗時,它會發送退出代碼1,最後它會說「進程以代碼1結束」。但是構建仍在繼續。

這將取消在團隊城市中的構建,所以似乎與Visual Studio中的Task Runner相關聯。

如何防止構建發生,如果它退出與代碼以外的代碼0?

回答

14

你是對的,這似乎是一個任務運行者問題。如果BeforeBuild任務失敗,則任務運行器不會與MSBuild通信以停止構建。

爲了解決這個問題,您可以通過項目的預生成事件來運行您的Gulp任務,而不是通過Task Runner綁定。

集的預定生成事件

對於類庫,可以訪問編譯通過右鍵單擊您的項目並選擇Properties -> Compile -> Build Events...活動。

對於web項目,它們位於Properties -> Build Events

這裏是我用來調用在預生成事件的咕嘟咕嘟任務,這將阻止的MSBuild運行,如果有故障退出命令:

gulp -b $(ProjectDir) --gulpfile $(ProjectDir)gulpfile.js my-task

此命令調用咕嘟咕嘟傳遞絕對工作目錄路徑和gulpfile.js

注:

  • 我發現各種背景和工作試圖用一個更直線上升命令狀gulp my-task目錄問題。
  • $(ProjectDir)Macros for Build Commands之一。
  • 假設Gulp全球安裝:npm install -g gulp。請參閱jonas.ninjaanswer瞭解如何將此安裝構建到命令中(或者不需要全局依賴的替代方法)。
+0

沒想過這個選項,謝謝 – John

2

我在上面實現了davidmdem的解決方案,這在我的系統中很棒。我在全球安裝了gulp,但其中一位同事沒有,所以預建事件將會失敗。從Task Runner Explorer運行gulp使用項目級別的 gulp安裝,但從預生成腳本運行gulp使用全局 gulp安裝。

爲了防止局勢的新的開發者沒有安裝一飲而盡哪裏,我擴大davidmdem的預構建腳本如下: (gulp --version || npm install -g [email protected]) & gulp -b $(ProjectDir) --gulpfile $(ProjectDir)gulpfile.js my-task

此命令安裝一飲而盡(3.9.0版本相匹配的項目 - 如果它尚未安裝,則僅限於。現在,在建立項目之前,你不得不考慮大量的事情!


(更新:)

的替代(在我看來:更好)的解決這個問題是使用npm作爲中介。從上面的例子繼續修改,我有一個從命令行調用的吞嚥任務my-task。這刪除了全局gulp依賴關係,如果gulp失敗,仍然會正確停止msbuild。

預生成事件:

npm run build 

的package.json:

"scripts": { 
    "build": "gulp min" 
} 
2

我建立失敗與一飲而盡工作jshint(不夠好對我來說,也許足夠了別人)。我想它可能會擴展到包括任務亞軍中的所有任務。

這是我用/沒有...

this頁,我說/我項目以.json,其鉤到預生成事件編輯這個...

"scripts": { 
    "prebuild": [ "gulp default" ] 
    } 

this頁,我包括我的jshint任務

// ============================= 
// jsHint - error detection 
// ============================= 
gulp.task("jshint", function() { 
    var jshGlobals = [ 
     '$', 
     'jQuery', 
     'window', 
     'document', 
     'Element', 
     'Node', 
     'console' 
    ]; 

    gulp.src([paths.jsFiles, norefs]) 
     .pipe(jshint({ 
      predef: jshGlobals, 
      undef: true, 
      eqnull: true 
     })) 
     .pipe(jshint.reporter('jshint-stylish')) 
     .pipe(jshint.reporter('fail')) 
}); 

後兩行是在以下...最重要的。如果您尚未擁有它,您將需要npm install jshint-stylish

另外,對於jshint-stylish,你可以讓VS爲你處理它。下面添加到您的以.json所示爲jshint-stylish行...

{ 
    "name": "ASP.NET", 
    "version": "0.0.0", 
    "devDependencies": { 
    "es6-promise": "~3.1.2", 
    "gulp": "^3.8.11", 
    "del": "^2.2.0", 
    "jshint": "~2.9.1", 
    "jshint-stylish": "~2.1.0", 
    "gulp-jshint": "~2.0.0", 
    "gulp-flatten": "~0.2.0", 
    "gulp-rename": "~1.2.2", 
    "gulp-cssmin": "0.1.7", 
    "gulp-uglify": "1.2.0", 
    "gulp-postcss": "~6.1.0", 
    "autoprefixer": "~6.3.3" 
    } 
} 

這給了我這個時候出現錯誤(除了構建失敗),這是足以讓我進一步挖掘如果/必要... vs error list window after build

由於相對於更詳細的錯誤信息運行通過命令行或任務運行同一任務時,我得到... gulp default task output via cmd.exe

我想這溶膠可以改進,但我想分享,因爲我沒有在其他地方看過很多。

乾杯。

相關問題