tsconfig.json中**/node_modules/*配置的作用是什么?
为什么tsconfig.json的exclude需要同时配置两条node_modules相关规则
两个规则的匹配范围完全不同,作用是覆盖所有场景下的依赖目录排除需求:
- 规则
"node_modules"仅匹配项目根目录下一级的node_modules文件夹,只能排除根目录的依赖代码,对嵌套在子目录里的node_modules无效 - 规则
"**/node_modules/*"是跨层级通配规则:- 其中
**表示匹配任意深度的子目录 - 整体作用是排除项目所有层级子目录中嵌套的
node_modules文件夹
- 其中
日常开发中出现嵌套node_modules的场景非常常见:
- 采用monorepo架构的项目,每个子业务包/工具包目录下都会存在独立的
node_modules - 本地调试公共依赖包时,会将其他带
node_modules的项目放到当前项目的子目录下 - 部分第三方脚手架、构建工具会在工作目录下生成带有
node_modules的缓存目录
如果不添加第二条规则,这些嵌套的依赖代码依然会被TypeScript编译器、VS Code的JS/TS语法检查扫描到,不仅会大幅拖慢代码检查、类型计算的速度,还大概率会出现类型定义冲突、冗余报错提示的异常问题。
另外补充:TypeScript默认的exclude规则已经包含了根目录node_modules,官方建议显式配置两条规则,是为了适配自定义rootDir、特殊目录结构等非常规场景,避免出现漏排除的情况。
内容的提问来源于stack exchange,提问作者Federico Peralta
相关产品推荐
相关产品推荐

