Angular多应用项目指定路径生成组件,避免自动添加src/app
这个问题在Angular多项目工作区里确实很容易碰到,我给你几个实用的解决思路:
方法1:指定目标项目并使用相对路径
Angular CLI默认会基于当前默认项目的sourceRoot来生成文件,所以你需要明确告诉CLI要操作哪个应用,这样它就会用该应用的源码根目录来拼接路径,而不是默认的src/app。
假设你的工作区结构是这样的:
your-workspace/ ├── projects/ │ ├── main-app/ │ │ └── src/ │ │ └── app/ │ └── admin-app/ │ └── src/ │ └── app/
如果要在admin-app的app/components目录下生成一个user-list组件,直接运行:
ng generate component components/user-list --project admin-app
CLI会自动基于admin-app的sourceRoot(也就是projects/admin-app/src)来生成文件,最终路径就是projects/admin-app/src/app/components/user-list,完全符合预期。
方法2:用--path参数强制指定生成路径
如果你不想依赖项目的默认配置,想直接指定精确的生成位置,可以用--path参数,注意路径要从项目根目录开始写,并且加上./前缀(避免CLI自动拼接默认路径)。
比如要在admin-app的src/shared/ui目录下生成组件:
ng generate component user-card --path ./projects/admin-app/src/shared/ui
这样CLI会直接把组件生成到你指定的路径下,不会额外添加src/app前缀。
方法3:修改目标项目的sourceRoot配置(可选)
如果你的某个应用的源码结构和默认的src/app不一样,比如想把所有组件都放到src/shared下,可以修改angular.json中该项目的sourceRoot字段:
{ "projects": { "admin-app": { "root": "projects/admin-app", "sourceRoot": "projects/admin-app/src/shared", // 修改这里 // ...其他配置 } } }
之后你用--project admin-app生成组件时,CLI就会默认把组件放到projects/admin-app/src/shared目录下,不用每次手动写路径。不过这个改动会影响整个项目的CLI生成行为,建议先确认项目结构再调整。
额外注意事项
- 执行命令时一定要在项目根目录下运行,否则路径会出错
- 如果要把组件注册到指定模块,还可以加上
--module参数,比如--module admin-app/src/app/app.module.ts - 避免直接写不带前缀的绝对路径(比如
/projects/admin-app/...),在Windows系统下可能会识别错误,优先用./开头的相对路径
内容的提问来源于stack exchange,提问作者Angad

