Angular 6中创建可跨库使用的领域模型的最佳实践咨询
在Angular 6+中共享领域模型(接口/类)的最佳实践
我在Angular 6+项目里处理共享领域模型的时候也遇到过和你一样的问题——不像Angular 5那样能随便跨模块导入,下面是我亲测有效的几种方案,你可以根据项目规模和需求来选:
方案1:创建Angular Library(官方推荐,适合中大型项目/多项目复用)
这是Angular官方主推的共享代码方式,能完美解决模块隔离和导入问题:
- 先用Angular CLI生成一个库:
ng generate library domain-models - 把你的领域模型(接口、类)放到库的
src/lib目录下,比如新建language.model.ts:export interface ILanguage { first: string; second?: string; } export class Language { first: string = ''; second?: string; } - 关键一步:在库的
public-api.ts文件里导出这些模型,这样外部应用才能访问到:export * from './lib/language.model'; // 后续新增的模型都在这里添加导出语句 - 构建库:
构建后的产物会放在ng build domain-modelsdist/domain-models目录下 - 在主应用或者其他项目里直接导入使用:
import { ILanguage, Language } from 'domain-models'; - 本地开发时,想实时同步库的修改?可以用监听模式构建:
同时启动主应用的ng build domain-models --watchng serve,修改库的代码会自动同步到主应用里。
方案2:共享目录+路径别名(适合小型单一项目)
如果你的项目规模不大,不想折腾库的话,这种方式简单直接:
- 在项目根目录创建
src/shared/models目录,把所有领域模型文件都放在这里 - 打开
tsconfig.json,在compilerOptions里配置路径别名,方便快速导入:{ "compilerOptions": { // 其他配置项... "paths": { "@domain/*": ["src/shared/models/*"] } } } - 之后在项目里就能这样导入模型:
注意:这种方式在多项目workspace里可能会有依赖引用的问题,更适合单一应用场景。import { ILanguage, Language } from '@domain/language.model';
方案3:发布到npm仓库(适合跨项目长期复用)
如果你的领域模型需要在多个独立的Angular项目里共享,把库发布到npm仓库是最优解:
- 先完善库的
package.json,确保名称、版本、描述等信息正确 - 登录npm(如果是私有仓库,记得配置对应的registry):
npm login - 进入构建后的库目录,执行发布命令:
cd dist/domain-models && npm publish - 其他项目只需要安装这个包就能使用:
然后和方案1一样导入即可。npm install domain-models
一些额外的注意事项
- 不管用哪种方案,都要保证接口和类的定义一致,比如可选属性
second?: string在接口和类里要保持相同的标记,避免类型错误 - 使用Angular Library时,要确保
tsconfig.lib.json的编译选项正确,尤其是declaration: true,这样才能生成正确的类型定义文件(.d.ts) - 如果是多项目workspace,建议用方案1的Library方式,能更好地管理代码依赖和版本。
内容的提问来源于stack exchange,提问作者st_clair_clarke
相关产品推荐
相关产品推荐

