Javascript 角域模型
目前我正在开发angular应用程序,它是通过angular CLI生成的&它正在使用webpack 我们有50多个ModelTypeScript类来保存employee.model.ts、person.model.ts等数据 目前在我们的项目中,它分散在不同的模块中。我们决定将所有模型放在一个角度模块中&然后所有其他模块应该从一个特定模块导入这些域模型 我如何做到这一点 我读过几篇关于typescript别名特性的文章,在tsconfig.json文件中我可以添加path属性。这就是我迄今为止所做的尝试Javascript 角域模型,javascript,angular,typescript,angular-cli,Javascript,Angular,Typescript,Angular Cli,目前我正在开发angular应用程序,它是通过angular CLI生成的&它正在使用webpack 我们有50多个ModelTypeScript类来保存employee.model.ts、person.model.ts等数据 目前在我们的项目中,它分散在不同的模块中。我们决定将所有模型放在一个角度模块中&然后所有其他模块应该从一个特定模块导入这些域模型 我如何做到这一点 我读过几篇关于typescript别名特性的文章,在tsconfig.json文件中我可以添加path属性。这就是我迄今为止
ProjectDirectory/src/app
ProjectDirectory/src/app/models
模型文件夹包含employee.model.ts、person.model.ts和50+其他模型
tsconfig.js
{
"compileOnSave": false,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": ["node_modules/@types"],
"lib": ["es2017", "dom"],
"baseUrl": "src",
"paths": {
"@my-models/*": ["models/*"]
}
}
}
我在其他组件上尝试的导入语句
import { Employee } from '@my-models'; //<== DOESN'T WORK & THROWS ERROR.
是否有任何干净的方法将所有模型组织在一个位置&使用没有相对路径的干净导入语句,例如
import {Xyz} from './././././abc.module';
提前感谢大家花时间阅读问题
注意:我读了下面的文章,但它不起作用
建议的处理方法是使用 在您的
models
文件夹中,您可以添加一个index.ts
文件,该文件导出该文件夹中包含的所有类:
export * from './abc.module.ts'; // re-export all of its exports
export * from './xyz.module.ts'; // re-export all of its exports
...
现在需要进口的是桶:
import { Abc, Xyz } from './path-to-models';
您可以创建一个可重用的角度模块。请看ng Packager:这是一种简单的方法。但是,您确定要执行此操作吗?Google风格指南和LIFT原则()建议摒弃将所有模型放在一个地方、将所有服务放在一个地方等传统方法。相反,将功能相关的代码尽可能地放在一起。遵循LIFT时,您会发现不需要有这么多嵌套的导入语句(即,
import{…}from'../../../../../../../../some.module'
的问题消失了)感谢pixelbits为我指明了正确的方向。但是,我们有一些域模型,可以从位于不同模块中的不同服务使用,这些服务返回相同的模型。我们不希望在每个模块中都复制这样的模型。这就是为什么我在寻找一些解决方案,在这些解决方案中,无论在哪个模块中我需要这样的域模型,我都可以有更清晰的导入语句。感谢您花时间回答这个问题。我认为这对我的场景肯定有帮助。我可以创建一个名为models的文件夹,将所有的模型都放在里面,然后像你们提到的那样创建barrel。然而,还有一个问题没有得到解答,那就是如何从“@mycompanyname models”获取漂亮的导入语句,例如import{xyz,abc}。无论我在其中编写import语句的typescript文件的位置如何,这都会起作用。这仍然是可能的吗?我相信这仍然是可能的,尽管我自己还没有测试过。通读一遍,尤其是在tsconfig.json
中使用正确的配置,它应该可以工作,尽管AOT似乎有问题。谢谢@Und3rTow。在遵循您提到的建议和您发布的github链接上提出的建议后,效果非常好。我真的很感谢你的帮助。
import { Abc, Xyz } from './path-to-models';