2017-12-18 5 views
1

현재 Angular CLI &을 통해 생성되는 각형 응용 프로그램에서 webpack을 사용하고 있습니다.각 도메인 모델

우리는 employee.model.ts 등의 데이터를 보유하는 50 개 이상의 모델 타이프 라이터 클래스를 가지고, 우리의 프로젝트에 등

person.model.ts 현재 그것은 모든 다른 모듈에 여기 저기 흩어져있다. 우리는 모든 모델을 하나의 각도 모듈 &에 넣기로 결정했습니다. 그런 다음 다른 모든 모듈은 하나의 특정 모듈에서이 도메인 모델을 가져와야합니다.

어떻게해야합니까?

tsconfig.json 파일에서 typescript 별칭 기능과 관련된 몇 가지 게시물을 읽었으며 경로 속성을 추가 할 수 있습니다. 그래서 여기까지 내가 지금까지 시도한 것이있다.

ProjectDirectory/src/app 

ProjectDirectory/src/app/models 

모델 폴더, employee.model.ts을 포함 & 50 개 이상의 다른 모델을 person.model.ts.

내가 다른 구성 요소에 노력

{ 
    "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/*"] 
    } 
    } 
} 

가져 오기 문을 tsconfig.js.

import { Employee } from '@my-models'; //<== DOESN'T WORK & THROWS ERROR. 

오류

src/app/app.module.ts (20,26): Cannot find module '@my-models'. 

한 곳 & 이러한에서

import {Xyz} from './././././abc.module'; 

감사합니다 모두 같은 상대 경로가없는 청소기 import 문을 모든 모델을 구성 할 수있는 깨끗한 방법이 있나요 질문을 읽는 데 시간이 걸릴 수 있도록 사전에 준비하십시오.

참고 : 다음 기사는 읽었지만 작동하지 않았습니다.

https://decembersoft.com/posts/say-goodbye-to-relative-paths-in-typescript-imports/

https://www.typescriptlang.org/docs/handbook/module-resolution.html

+1

당신은 할 수 있습니다

export * from './abc.module.ts'; // re-export all of its exports export * from './xyz.module.ts'; // re-export all of its exports ... 

지금 가져와야 무엇 배럴에서 온다 : 당신의 models 폴더에서

은 해당 폴더에 포함 된 모든 클래스를 내보내는 index.ts 파일을 추가 할 수 있습니다 재사용 가능한 각도 모듈을 생성하십시오. 이 작업을 쉽게 수행하려면 ng-packagr : https : //www.npmjs.com/package/ng-packagr을 방문하십시오. 그러나이 작업을 수행 하시겠습니까? Google 스타일 가이드 및 LIFT 원칙 (https://angular.io/guide/styleguide#lift)은 모든 모델을 한 곳에서, 모든 서비스를 한 곳에서 처리하는 등의 전통적인 접근 방식에서 벗어나도록 권장합니다. 대신, 기능적으로 관련된 코드를 최대한 가깝게 유지하십시오. – pixelbits

+0

LIFT를 따라 가면 많은 중첩 된 import 문이 필요 없다는 것을 알 수 있습니다 (예 :'import {...} from .. '../../../../ ..) 문제 /../약간.모듈이 떨어져 간다.) – pixelbits

+0

pixelbit을 올바른 방향으로 가리켜 주셔서 감사합니다. 그러나 동일한 모듈을 반환하는 다른 모듈에있는 다른 서비스에서 사용할 수있는 특정 도메인 모델이 있습니다. 우리는 모든 모듈에서 이러한 모델을 복제하고 싶지 않습니다. 그래서 내가 도메인 모델이 필요한 모듈에 상관없이보다 깨끗한 import 문을 사용할 수있는 솔루션을 찾고 있습니다. – hp8888

답변

1

이 문제를 처리하기 위해 권장되는 방법은 barrel을 사용하는 것입니다.

import { Abc, Xyz } from './path-to-models'; 
+0

질문에 답변 해 주셔서 감사합니다. 내 시나리오에서 이것이 도움이 될 수 있다고 생각합니다. 나는 models라는 폴더를 만들고 & 안에 들어있는 모든 것을 넣고 & 언급 한 것처럼 배럴을 만들 수 있습니다. 그러나 응답하지 않은 부분 중 하나는 '@ mycompanyname-models'에서'import {xyz, abc} '와 같은 예쁜 import 문을 얻는 방법입니다. 이것은 import 문을 쓰고있는 타이프 스크립트 파일의 위치에 관계없이 작동합니다. 아직도 가능합니까? – hp8888

+0

나는 이것을 스스로 테스트하지는 않았지만 여전히 가능해야한다고 생각한다. [이 스레드] (https://github.com/angular/angular-cli/issues/1465) 및 특히 [이 댓글] (https://github.com/angular/angular-cli/issues/)을 통해 읽으십시오. 1465 # issuecomment-350019210), 올바른 설정으로'tsconfig.json'에서 제대로 작동하지만, AOT에 문제가있는 것 같습니다. – Und3rTow

+1

Thanks @ Und3rTow. 게시 한 github 링크에 대해 언급 한 제안 및 제안을 따르면서 완벽하게 작동했습니다. 도와 주셔서 정말 고맙습니다. – hp8888