在某个时候,我的项目构建开始花费了很长时间。这不是一个大项目,它与位于项目根目录的node_modules
目录直接相关,并被排除在项目之外!
<PropertyGroup>
<DefaultInstallExcludes>packages**</DefaultInstallExcludes>
<DefaultInstallExcludes>$(DefaultInstallExcludes);**node_modules**;node_modules**</DefaultInstallExcludes>
</PropertyGroup>
<ItemGroup>
<InstallInclude Include="***.ascx" Exclude="$(DefaultInstallExcludes)" />
<InstallInclude Include="***.asmx" Exclude="$(DefaultInstallExcludes)" />
<InstallInclude Include="***.css" Exclude="$(DefaultInstallExcludes)" />
<InstallInclude Include="***.html" Exclude="$(DefaultInstallExcludes)" />
<InstallInclude Include="***.aspx" Exclude="$(DefaultInstallExcludes)" />
<InstallInclude Include="***.js" Exclude="$(DefaultInstallExcludes)" />
<InstallInclude Include="**images**" Exclude="$(DefaultInstallExcludes)" />
</ItemGroup>
它似乎正确地排除了所有文件,但它仍然在扫描整个目录。如何让它在构建过程中完全忽略node_modules
文件夹?工具版本为3.5。这曾经需要<30秒,在某个时候开始需要大约10分钟。VS社区2019。
我认为问题是InstallInclude
是您的自定义项,而不是系统项。node_modules
的大多数文件都是系统项,如None
或Content
。这些文件显示在解决方案资源管理器上,并由msbuild扫描。
本文档中列出了系统构建操作。
您所做的是使新的InstallInclude
项不包含来自node_modules
和packages
的文件。但是系统项包含node_modules
文件夹,所以它总是扫描文件夹。
建议
您应该从系统项中排除该文件夹。
对于新的sdk项目,DefaultItemExcludes
确实有效,但它不适用于net框架项目。
如果您的项目目标为Net Framework
,则应使用任何系统项remove来删除这些文件。
使用此:
<ItemGroup>
<Content Remove="node_modules**" />
<Compile Remove="node_modules**" />
<EmbeddedResource Remove="node_modules**" />
<None Remove="node_modules**" />
<Compile Remove=node_modules**" />
<TypeScriptCompile Remove="node_modules**" />
.... any system item
</ItemGroup>
<PropertyGroup>
<DefaultInstallExcludes>packages**</DefaultInstallExcludes>
<DefaultInstallExcludes>$(DefaultInstallExcludes);**node_modules**;node_modules**</DefaultInstallExcludes>
</PropertyGroup>
<ItemGroup>
<InstallInclude Include="***.ascx" Exclude="$(DefaultInstallExcludes)" />
<InstallInclude Include="***.asmx" Exclude="$(DefaultInstallExcludes)" />
<InstallInclude Include="***.css" Exclude="$(DefaultInstallExcludes)" />
<InstallInclude Include="***.html" Exclude="$(DefaultInstallExcludes)" />
<InstallInclude Include="***.aspx" Exclude="$(DefaultInstallExcludes)" />
<InstallInclude Include="***.js" Exclude="$(DefaultInstallExcludes)" />
<InstallInclude Include="**images**" Exclude="$(DefaultInstallExcludes)" />
</ItemGroup>
从tsconfig文件中排除:
修改tsconfig.json
:
{
"compilerOptions": {
....
},
"include": [
...
],
"exclude": [
"node_modules"
],
.....
}
修改tsconfig.spec.json
文件:
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/spec",
"types": [
"jasmine"
]
},
"files": [
....
],
"include": [
....
],
"exclude": [
"node_modules/**/*"
]
}