【问题标题】:I have excluded node_modules from MSBUILD, but it still traverses the directory and takes forever我已经从 MSBUILD 中排除了 node_modules,但它仍然遍历目录并且需要永远
【发布时间】:2021-03-20 23:35:12
【问题描述】:

在某些时候,我的项目构建开始需要很长时间。项目不大,与项目根目录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。这过去需要

【问题讨论】:

  • 你的项目是net framework web项目吗?
  • @PerryQian-MSFT 是的。现在看看你的答案:)
  • 期待任何反馈,我们愿意进一步帮助您:)
  • @PerryQian-MSFT 仍然需要很长时间。我更进一步,将node_modules 文件夹标记为隐藏文件夹,但这也不起作用。这是一个小项目,所以这很奇怪。它最近开始发生,节点模块文件夹是我能想到的唯一罪魁祸首。我今天会彻底删除文件夹以确认
  • 实际上,删除 node modules 文件夹是我的回答。而且由于您不希望构建过程中的整个文件夹。为了更好的方法,您应该将删除项目放在proj 文件的顶部。至少,在InstallInclude 项目之前。此外,您可以尝试排除tsconfig.jsontsconfig.spec.json 上的node_modules 文件夹。查看更新答案。

标签: asp.net visual-studio msbuild msbuild-task


【解决方案1】:

我认为问题在于InstallInclude 是您的自定义项而不是系统项。而node_modules 的大部分文件都是NoneContent 之类的系统项。这些文件显示在解决方案资源管理器中,并由msbuild 扫描。

系统构建操作列在this document 下。

您所做的是使新的InstallInclude 项目不包含来自node_modulespackages 的文件。但是系统项包含node_modules文件夹,所以它会一直扫描文件夹。

建议

您应该从系统项中排除该文件夹。

对于 new-sdk 项目,DefaultItemExcludes 确实有效,但它不适用于网络框架项目。

如果您的项目以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/**/*"
  ]
  
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多