簡體   English   中英

如何防止visual studio 2017構建javascript?

[英]How to prevent visual studio 2017 from build javascript?

我今天升級到 VS2017,每次我在我的 Web 應用程序項目中更改某些內容時,我都會看到這一點 - 構建再次構建我的所有 javascript(我使用 webpack 作為客戶端)。 這很酷,但需要很多時間,所以我很樂意配置它以停止構建 javascript(我會在它發生變化時自己構建它)。

簡單的答案

在您的 csproj 文件中,將以下行添加到現有的 PropertyGroup 塊中:

<PropertyGroup>
     <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
</PropertyGroup>

如果將.ts.tsx文件添加到您的項目導致您的項目文件被修改,您可能需要應用以下修復。 有關更多詳細信息,請參閱錯誤報告

 <ItemGroup>
      <None Remove="**/*.ts;**/*.tsx" />
      <Content Remove="**/*.ts;**/*.tsx" />
      <TypeScriptCompile Include="**/*.ts;**/*.tsx" />
 </ItemGroup>

tsconfig.json文件添加到您的項目根目錄,並確保設置了以下設置:

"compileOnSave": false,

最后,重啟 Visual Studio


詳情

Nuget 在[ProjectName].csproj.nuget.g.targetsobj目錄中創建一個名為[ProjectName].csproj.nuget.g.targets的生成目標文件。 此目標文件正在導入Microsoft.NET.Sdk.Web.ProjectSystem.targets ,而后者又導入Microsoft.TypeScript.targets

Microsoft.TypeScript.targets文件中,下面這行有一條注釋,讓我們知道如果這個屬性設置為 true,那么 TypeScript 編譯任務將什么都不做:

<!-- Makes the TypeScript compilation task a no-op -->
<TypeScriptCompileBlocked Condition="'$(TypeScriptCompileBlocked)' == ''">false</TypeScriptCompileBlocked>

我正在使用 webpack 的 ts-loader 來編譯和打包我的 TypeScript 文件。 所以我不再需要 Visual Studio 在每次構建時執行的自動編譯。 在 Visual Studio 2017 中,我剛剛從 tsconfig.json 中注釋掉了以下行以停止自動編譯:

"outDir": "./wwwroot/build/",

TypeScriptCompileBlocked設置為true對我來說還不夠。 什么工作是去項目屬性 - 有一個 TypeScript Build 選項卡,您可以在其中配置 TS 編譯,包括 Compile On Save 選項:

在此處輸入圖片說明

它導致以下內容被添加到csproj文件中:

<TypeScriptTarget>ES5</TypeScriptTarget>
<TypeScriptJSXEmit>None</TypeScriptJSXEmit>
<TypeScriptModuleKind>ES6</TypeScriptModuleKind>
<TypeScriptCompileOnSaveEnabled>False</TypeScriptCompileOnSaveEnabled>
<TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny>
<TypeScriptRemoveComments>False</TypeScriptRemoveComments>
<TypeScriptOutFile />
<TypeScriptOutDir />
<TypeScriptGeneratesDeclarations>False</TypeScriptGeneratesDeclarations>
<TypeScriptNoEmitOnError>True</TypeScriptNoEmitOnError>
<TypeScriptSourceMap>True</TypeScriptSourceMap>
<TypeScriptMapRoot />
<TypeScriptSourceRoot />

我遇到了同樣的問題 - 每次 Visual Studio 重建項目時,Webpack 都會重建我的 Typescript 文件,盡管有

<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>

在我的項目文件中,和

"compileOnSave": false,
  "buildOnSave": false

在我的 tsconfig.json 文件中。

原來這是因為我安裝了 NPM Task Runner VS 擴展( https://marketplace.visualstudio.com/items?itemName=MadsKristensen.NPMTaskRunner ),並且在 Task Runner Explorer 中有一個綁定到“Before Build”的構建任務' 事件。 我不需要這個擴展,所以我只是卸載了它。

注意:我不需要 Webpack 在 VS 構建上重建,因為我讓它監視我的文件並在我進行更改時重建,通過此擴展名: https ://marketplace.visualstudio.com/items?itemName=MadsKristensen.WebPackTaskRunner

抱怨 .ts 文件的錯誤:當我嘗試重建包含一些打字稿文件的 VS2017 Web 項目時出現構建錯誤。 錯誤看起來像這些Error TS1005 (TS) '?' expected. C:\\...\\...project1 (tsconfig or jsconfig project) C:\\\\...\\...project1 \\node_modules\\@storybook\\addon-knobs\\dist\\type-defs.d.ts Error TS1005 (TS) '?' expected. C:\\...\\...project1 (tsconfig or jsconfig project) C:\\\\...\\...project1 \\node_modules\\@storybook\\addon-knobs\\dist\\type-defs.d.ts

沒有真正有幫助的答案......到目前為止:在花費數小時在堆棧中上下搜索之后,我意識到將錯誤的項目文件與另一個也有打字稿但沒有編譯錯誤的項目文件進行比較可能很簡單。

這很簡單..但它有效:

以下是步驟:

  1. 卸載項目和編輯的項目文件

  2. 搜索“TypeScript”(精確大小寫和精確單詞選項)並找到兩個匹配的導入:

    <Import Project="$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\TypeScript\\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\TypeScript\\Microsoft.TypeScript.Default.props')" />

<Import Project="$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\TypeScript\\Microsoft.TypeScript.targets" Condition="Exists('$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\TypeScript\\Microsoft.TypeScript.targets')" />

  1. 然后我去了編譯 .ts 文件沒有問題的項目,看看,它的條件不同:

    <Import Project="$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\TypeScript\\Microsoft.TypeScript.targets" Condition="false" />

  2. 所以我只是用 3) 中的一個替換了 Import 並重新加載了項目並按預期成功編譯。

在完美的世界中, Condition="Exists ('$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\TypeScript\\Microsoft.TypeScript.targets')" 可能與Condition="false"完全相同,但有不是,即使在我的機器中也不存在這樣的文件夾(C:\\Program Files (x86)\\MSBuild\\15.0)。

有時,常識比深入的知識更有幫助,這就是那個時候。

就我而言(Visual Studio 2017 15.9.25),我必須將以下屬性添加到 .csproj

<PropertyGroup>
   <TypeScriptCompileOnSaveEnabled>false</TypeScriptCompileOnSaveEnabled>
</PropertyGroup>

更多詳情:

我閱讀了這篇文章https://www.typescriptlang.org/docs/handbook/compiler-options-in-msbuild.html並意識到 VS 將基於文件Microsoft.TypeScript.targets構建 TS 。

在這個文件中,我看到它也基於這個屬性來控制 Compile-on-Save TypeScriptCompileOnSaveEnabled 因此,在 .csproj 中將此屬性設置為false將在保存時停止編譯打字稿。 (請注意,在執行此操作之前,我已經嘗試在 tsconfig.json 文件中設置"compileOnSave": false ,但沒有幫助)

完成以下設置以及 TypeScriptCompileBlocked 為 true。

在應用程序的 .csproj 文件中將以下條件設置為 false。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM