Nx의 Angular 라이브러리에서 보조 진입점을 사용하는 이유와 방법
Nx Devtools는 최근version 13.1 Angular 라이브러리를 위한 매우 편리한 생성기와 함께 제공되는 릴리스creates secondary entrypoints for your Angular Libraries를 쉽게 사용할 수 있습니다. 이 블로그 게시물에서는 이 새로운 기능을 사용해야 하는 이유와 방법에 대해 설명합니다.
보조 진입점이 의미 있는 이유는 무엇입니까?
보조 진입점을 추가하면 기본적으로 Angular 라이브러리가
Angular Material
처럼 여러 청크로 분할됩니다.예:
// One entrypoint:
import { MatButtonModule, MatCardModule } from '@angular/material';
// With secondary entrypoints:
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
이 아이디어는 전혀 새로운 것이 아닙니다. 이 옵션은
ng-packagr
의 시작 단계부터 이미 존재합니다. 보조 진입점을 활용하여 더 나은 아키텍처, 트리 쉐이킹 지원, 더 작은 번들 크기 및 더 빠른 애플리케이션을 목표로 합니다.데모 👀
그 영향을 보여주기 위해 작은 예를 준비했습니다.
따라서 작은
greeter
라이브러리와 이 인사말 라이브러리에서 구성 요소 하나만 사용하는 간단한 테스트 앱을 만들었습니다.다음은
simple greeter
및 fancy greeter
를 포함하는 인사 라이브러리입니다.// simple-greeter.component.ts
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
@Component({
selector: 'kauppfbi-blogs-simple-greeter',
template: ` <p>Nice to meet you, {{ name }}!</p> `,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class SimpleGreeterComponent {
@Input() name!: string;
}
// fancy-greeter.component.ts
...
import moment from 'moment';
@Component({
selector: 'kauppfbi-blogs-fancy-greeter',
template: `
<p>Nice to meet you, {{ name }}!</p>
<p>Today is the {{ time }}</p>
`,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class FancyGreeterComponent implements OnInit {
time = '';
@Input() name!: string;
ngOnInit(): void {
this.time = moment().format('DD.MM.YYYY');
}
}
둘 다 라이브러리의
index.ts
파일(공용 API)로 내보냅니다.export * from './lib/simple-greeter/simple-greeter.module';
export * from './lib/simple-greeter/simple-greeter.component';
export * from './lib/fancy-greeter/fancy-greeter.module';
export * from './lib/fancy-greeter/fancy-greeter.component';
fancy greeter
가 moment
를 수입한다는 것을 알아차렸을 것입니다. 이것이 어디로 연결되는지 이미 알고 있습니다.우리의
test-app
도 간단하게 유지됩니다.// app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { SimpleGreeterModule } from '@kauppfbi-blogs/greeter';
import { AppComponent } from './app.component';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule, SimpleGreeterModule],
bootstrap: [AppComponent],
})
export class AppModule {}
// app.component.ts
@Component({
selector: 'kauppfbi-blogs-root',
template: `<kauppfbi-blogs-simple-greeter [name]="name"></kauppfbi-blogs-simple-greeter>`,
})
export class AppComponent {
name = 'Duke';
}
데모를 완료하기 위해
webpack-bundle-analyzer
를 사용하여 앱의 프로덕션 번들을 검사합니다.# build app with production configuration and generate bundle statistics
npx nx test-app:build:production --stats-json
# inspect the bundle
npx webpack-bundle-analyzer dist/apps/test-app/stats.json
이렇게 하면 앱의 청크가 포함된 새 웹페이지가 열립니다.
보시다시피 우리의 번들은
moment
를 사용하지 않았지만 간단한 인사말을 사용했지만 크게 fancy greeter
로 구성됩니다. 🐵새로운 발전기를 사용하는 방법?
이제 알고 있듯이 Angular 라이브러리에서 보조 진입점을 사용하는 것이 합리적인 이유를 사용하는 방법을 살펴보겠습니다.
하나의 명령일 뿐이므로 매우 간단합니다.
npx nx generate @nrwl/angular:library-secondary-entry-point \
--name=my-secondary-entrypoint \
--library=my-library
또는 Nx 콘솔:
이 명령은 새
src
파일에서 내보낸 Readme
, package.json
및 module
가 있는 index.ts
폴더를 포함하는 entrypint의 이름으로 새 폴더를 스캐폴딩합니다. 또한 전체 라이브러리 프로젝트의 lintFilePattern
를 조정하고 pathMapping
에서 올바른 tsconfig.base.json
를 생성합니다.이제 기존 모듈을 여기로 이동하거나 새 모듈을 만들 수 있습니다.
우리의 사용 사례에서는 코드를 이동하는 데 2분이면 충분했습니다.
결과를 분석해 보겠습니다.
우선 번들 크기가 상당히 줄어든 것을 확인할 수 있습니다. 좋습니다. 이것은 단지 데모일 뿐이며 요즘에는
moment
를 전혀 사용하지 않는 것이 좋습니다. 그러나 더 중요한 것은 필요한 코드만 로드하고 솔루션으로 적절한 트리 쉐이킹을 지원할 수 있다는 것을 확인했습니다!이미 끝났습니다. 행복한 코딩하세요! 🚀
GitHub 리포지토리
모든 코드는 Github의 public repository에서 사용할 수 있습니다.
greeter library
here 및 test-app
here 을 찾을 수 있습니다.추가 링크 🔗
seondary entrypoints
에 대해 자세히 알아보려면 다음 블로그 게시물을 확인하세요.Reference
이 문제에 관하여(Nx의 Angular 라이브러리에서 보조 진입점을 사용하는 이유와 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kauppfbi_96/why-and-how-to-use-secondary-entrypoints-in-your-angular-libraries-in-nx-3bb2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)