我正在使用Visual Studio任務運行器(2015)運行綁定到構建之前的Gulp任務。取消生成如果任務運行程序資源管理器任務失敗
我已經設置好了,當gulp任務失敗時,它會發送退出代碼1,最後它會說「進程以代碼1結束」。但是構建仍在繼續。
這將取消在團隊城市中的構建,所以似乎與Visual Studio中的Task Runner相關聯。
如何防止構建發生,如果它退出與代碼以外的代碼0?
我正在使用Visual Studio任務運行器(2015)運行綁定到構建之前的Gulp任務。取消生成如果任務運行程序資源管理器任務失敗
我已經設置好了,當gulp任務失敗時,它會發送退出代碼1,最後它會說「進程以代碼1結束」。但是構建仍在繼續。
這將取消在團隊城市中的構建,所以似乎與Visual Studio中的Task Runner相關聯。
如何防止構建發生,如果它退出與代碼以外的代碼0?
你是對的,這似乎是一個任務運行者問題。如果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之一。npm install -g gulp
。請參閱jonas.ninja的answer瞭解如何將此安裝構建到命令中(或者不需要全局依賴的替代方法)。我在上面實現了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"
}
我建立失敗與一飲而盡工作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"
}
}
這給了我這個時候出現錯誤(除了構建失敗),這是足以讓我進一步挖掘如果/必要...
由於相對於更詳細的錯誤信息運行通過命令行或任務運行同一任務時,我得到...
我想這溶膠可以改進,但我想分享,因爲我沒有在其他地方看過很多。
乾杯。
沒想過這個選項,謝謝 – John