Angular CLI构建时排除模块无效问题求助
排查Angular CLI 1.7.4多应用排除模块失效问题
我之前在Angular CLI 1.x版本的多应用项目里踩过类似的坑,结合你给出的配置细节,咱们一步步拆解问题和解决方案:
核心问题分析
你遇到的build-app未排除admin模块的情况,主要有两个关键原因:
- tsconfig exclude规则的写法局限性:TypeScript编译器对目录的排除逻辑需要明确的通配符才能递归排除子文件;
- Angular CLI 1.x多应用的资源处理逻辑:仅靠tsconfig的exclude不足以让CLI的打包工具(webpack)跳过这些文件,需要额外配置CLI层面的排除规则。
具体解决方案
1. 修正tsconfig.app.json的exclude规则
当前你写的"app/modules/admin/"只会排除目录本身,不会递归排除目录内的所有文件和子目录。修改为带通配符的路径:
{ "extends": "../tsconfig.json", "compilerOptions": { "outDir": "../out-tsc/app", "baseUrl": "./", "module": "es2015", "types": [] }, "exclude": [ "test.ts", "**/*.spec.ts", "app/modules/admin/**/*" // 用**/*递归排除所有子文件/目录 ] }
2. 在angular-cli.json的app应用配置中添加CLI级别的exclude
Angular CLI 1.x的多应用配置里支持exclude字段,这个配置是直接告诉打包工具跳过指定文件,弥补tsconfig的不足。修改第一个app的配置:
"apps": [ { "name": "app", "root": "src", "outDir": "/wwwroot", "assets": [ "assets", "favicon.ico" ], "index": "index.html", "main": "main.ts", "polyfills": "polyfills.ts", "test": "test.ts", "tsconfig": "tsconfig.app.json", "testTsconfig": "tsconfig.spec.json", "prefix": "app", "styles": [ "styles.scss" ], "scripts": [], "environmentSource": "environments/environment.ts", "environments": { "dev": "environments/environment.ts", "prod": "environments/environment.prod.ts" }, "exclude": [ "app/modules/admin/**/*" ] // 添加CLI层面的排除 }, // ... admin应用配置不变 ]
3. 检查入口文件的间接依赖
确保app应用的main.ts、路由配置或其他核心模块没有间接导入admin模块的代码。如果有任何模块引用了app/modules/admin下的文件,webpack会自动把这些文件打包进去,哪怕你配置了排除规则。
4. 修正package.json脚本的参数格式(可选但推荐)
Angular CLI 1.x的官方参数是双横线--app,虽然单横线可能兼容,但为了避免歧义,修改脚本:
"scripts": { "build-app": "ng build --app app --prod", "build-admin": "ng build --app admin --prod" }
验证方法
执行构建时加上--verbose参数,查看输出日志里是否还有admin模块的文件被处理:
npm run build-app -- --verbose
如果日志中不再出现app/modules/admin相关的编译或打包记录,说明排除规则生效了。
另外提个小建议:两个应用的outDir都是/wwwroot,会导致两次构建互相覆盖文件,建议给admin应用指定单独的输出目录,比如/wwwroot/admin。
内容的提问来源于stack exchange,提问作者Michael Wolf Hoffman
相关产品推荐
相关产品推荐

