我已经从MSBUILD中排除了node_modules,但它仍然会遍历目录并花费很长时间



在某个时候,我的项目构建开始花费了很长时间。这不是一个大项目,它与位于项目根目录的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的大多数文件都是系统项,如NoneContent。这些文件显示在解决方案资源管理器上,并由msbuild扫描。

本文档中列出了系统构建操作。

您所做的是使新的InstallInclude项不包含来自node_modulespackages的文件。但是系统项包含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/**/*"
]

}

最新更新