SlideShare a Scribd company logo
1 of 11
Download to read offline
Routing
이상훈
18.10.27
2018.10.27
자신이 제작한 라이브러리를 npm 저장소에 퍼
블리싱하고 다른 프로젝트에서 npm install을 통
해 해당 라이브러리를 사용 할 수 있도록 하는 방
법에 대해 알아본다.
들어가기에 앞서..
Angular CLI 6 버전부터 Angular CLI의 빌드 시
스템에 ng-packagr라는 라이브러리를 연결하여
이를 구현할 수 있는 기능을 지원한다.
들어가기에 앞서..
ng-packagr: Angular 라이브러리 코드를 다른 모듈에서 import하여 사용
할 수 있도록 Angular Package Format으로 변경해주는 라이브러리
ng generate library lib-name
라이브러리 스켈레톤 코드 추가
projects/lib-name 하위에 라이브러리 스켈레
톤 코드 생성
NgModule 안에 컴포넌트나 서비스 등이 있
는 기존 Angular 어플리케이션과 동일한 구조
라이브러리 생성
angular.json에 프로젝트 추가
projects 속성에 lib-name가 추가
package.json에 의존성 추가
ng-packagr를 포함한 라이브러리를 빌드 할
수 있도록 하는 몇가지 의존성이 추가
tsconfig.json에 빌드 경로 추가
빌드 결과 경로가 추가
라이브러리 생성
Angular CLI를 통해 라이브러리를 빌드하거나 테스트, 린
트 등을 수행할 수 있다.
ng build lib-name
ng test lib-name
ng lint lib-name
라이브러리 빌드
일반적으로 라이브러리가 어떤 메커니즘에 의해 사용할
수 있었을까?
npm 저장소에 있는 라이브러리를 사용하려면 다음과 같
은 단계가 있다.
npm install lib-name을 통해 해당 라이브러리를 설
치하여 node_modules폴더에 넣음
app에서 import {something} from ‘lib-name’의 방
식으로 import
App에서 라이브러리 사용
이 후에 Angular CLI는 import된 라이브러리를 찾기 위해 먼저 tsconfig에
명시된 경로에서 검색을 한 후 그 다음으로 node_modules에서 찾는다.
이 때, 라이브러리를 빌드하면 그 결과 파일은 node_modules에 들어 가
지 않으므로 tsconfig에 명시된 경로를 빌드 시스템에 알려준다.
이 의미는 라이브러리를 빌드하지 않으면 app에서는 절대 사용할 수 없
다는 것
예를 들어 github 저장소에서 클론 후, IDE에서npm install을 수행하면
lib-name은 import가 되지 않아 에러가 발생한다.
또한 라이브러리가 변경이 되어도 빌드하지 않으면 app에서는 변경된 라이
브러리가 반영되지 않는다. 따라서 라이브러리를 수정했다면 먼저 이것을 재
빌드 해야한다.
App에서 라이브러리 사용
라이브러리를 수정 후 매번 ng build를 수행하는 것은 매
우 귀찮고 시간도 꽤 걸리는 작업이다.
Angular CLI 6.2부터는 증분 빌드가 가능
-- watch 옵션을 통해 파일이 변경될 때마다 수정된 파일
을 부분 빌드
ng build lib-name --watch
이 기능을 사용하려면 tsconfig.lib.json 파일에서 다음과
같은 설정이 필요하다.
자동 빌드 수행
"angularCompilerOptions" : {
"enabledResourceInlining": true
}
라이브러리를 빌드 한 후 빌드 결과 폴더에서 npm
저장소에 퍼블리싱 명령을 수행한다.
ng build lib-name
cd dist/lib-name
npm publish
기존에 npm에 퍼블리싱을 하지 않았다면 유저 계
정을 먼저 생성한다.
npm adduser
https://npmjs.com/~username에서 계정이 생
성된 것을 확인할 수 있음
라이브러리 퍼블리싱
Angular 어플리케이션을 개발 시에 자주 반복되
었던 테이블 모듈이나 리치폼 기반의 입력박스
모듈 등을 재사용 가능하게 리팩토링을 한 후 이
것을 라이브러리화해서 사용하였다.
이때, 각각 라이브러리들은 독립적으로 구성되기
때문에 결합도가 상당히 낮아지고 단위 시험을
하기에도, 추후에 유지보수 하기에도 매우 괜찮
아진 구조가 된 것을 경험을 할 수 있었다.
후기

More Related Content

What's hot

Svn 버전관리 프로그램_매뉴얼
Svn 버전관리 프로그램_매뉴얼Svn 버전관리 프로그램_매뉴얼
Svn 버전관리 프로그램_매뉴얼jeongseokoh
 
Git & Github Seminar-2
Git & Github Seminar-2Git & Github Seminar-2
Git & Github Seminar-2sangyun han
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)Ildoo Kim
 
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기Youngbin Han
 
Svn 사용하기
Svn 사용하기Svn 사용하기
Svn 사용하기Jung-Ho Kim
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Juwon Kim
 
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAPcho hyun jong
 
Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Hyunjun Roh
 
Git로 협업하기
Git로 협업하기Git로 협업하기
Git로 협업하기Kim Byoungsu
 
[기초] GIT 교육 자료
[기초] GIT 교육 자료[기초] GIT 교육 자료
[기초] GIT 교육 자료JUNPIL PARK
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교Junyoung Lee
 
Git의 개념과 사용
Git의 개념과 사용Git의 개념과 사용
Git의 개념과 사용환민 홍
 
Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)승용 윤
 
알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1Hansol Kang
 
How to use SVN in project
How to use SVN in projectHow to use SVN in project
How to use SVN in projectKang-jin Cho
 
네이버 SVN 설치
네이버 SVN 설치네이버 SVN 설치
네이버 SVN 설치Hyunmin Park
 

What's hot (20)

Svn 버전관리 프로그램_매뉴얼
Svn 버전관리 프로그램_매뉴얼Svn 버전관리 프로그램_매뉴얼
Svn 버전관리 프로그램_매뉴얼
 
Git & Github Seminar-2
Git & Github Seminar-2Git & Github Seminar-2
Git & Github Seminar-2
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)
 
Svn
SvnSvn
Svn
 
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
 
Svn 사용하기
Svn 사용하기Svn 사용하기
Svn 사용하기
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화
 
Grunt
GruntGrunt
Grunt
 
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
 
Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)
 
Git로 협업하기
Git로 협업하기Git로 협업하기
Git로 협업하기
 
[기초] GIT 교육 자료
[기초] GIT 교육 자료[기초] GIT 교육 자료
[기초] GIT 교육 자료
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교
 
Git의 개념과 사용
Git의 개념과 사용Git의 개념과 사용
Git의 개념과 사용
 
Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)Git이란 (Git 소개 및 기초 이론)
Git이란 (Git 소개 및 기초 이론)
 
알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1알아두면 쓸모있는 깃허브 1
알아두면 쓸모있는 깃허브 1
 
Grunt.js Review
Grunt.js ReviewGrunt.js Review
Grunt.js Review
 
How to use SVN in project
How to use SVN in projectHow to use SVN in project
How to use SVN in project
 
네이버 SVN 설치
네이버 SVN 설치네이버 SVN 설치
네이버 SVN 설치
 

Similar to Angular Library

LucideWorks Banana 소개
LucideWorks Banana 소개 LucideWorks Banana 소개
LucideWorks Banana 소개 SuHyun Jeon
 
Dagger with multi modules
Dagger with multi modulesDagger with multi modules
Dagger with multi modulesYoung-Hyuk Yoo
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Dong Chan Shin
 
안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기DongHwan Yu
 
GAE 위에서 DJANGO 사용하기
GAE 위에서 DJANGO 사용하기GAE 위에서 DJANGO 사용하기
GAE 위에서 DJANGO 사용하기Tae-lim Oh
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page ApplicationSangmin Yoon
 
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 KubernetesTommy Lee
 
Angular CodeLab 두번째
Angular CodeLab 두번째Angular CodeLab 두번째
Angular CodeLab 두번째SangHun Lee
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJSEunYoung Kim
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodedpTablo
 
[170403 2주차]C언어 A반
[170403 2주차]C언어 A반[170403 2주차]C언어 A반
[170403 2주차]C언어 A반arundine
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.장현 한
 
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍ymtech
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기nexusz99
 
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)NAVER D2
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자Sewon Ann
 

Similar to Angular Library (20)

LucideWorks Banana 소개
LucideWorks Banana 소개 LucideWorks Banana 소개
LucideWorks Banana 소개
 
Dagger with multi modules
Dagger with multi modulesDagger with multi modules
Dagger with multi modules
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1
 
안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기
 
GAE 위에서 DJANGO 사용하기
GAE 위에서 DJANGO 사용하기GAE 위에서 DJANGO 사용하기
GAE 위에서 DJANGO 사용하기
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
 
Angular CodeLab 두번째
Angular CodeLab 두번째Angular CodeLab 두번째
Angular CodeLab 두번째
 
AWS DevDay 실습 가이드 - 서버리스
AWS DevDay 실습 가이드 - 서버리스AWS DevDay 실습 가이드 - 서버리스
AWS DevDay 실습 가이드 - 서버리스
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCode
 
[170403 2주차]C언어 A반
[170403 2주차]C언어 A반[170403 2주차]C언어 A반
[170403 2주차]C언어 A반
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.
 
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
 
System+os study 4
System+os study 4System+os study 4
System+os study 4
 
Goorm소개
Goorm소개Goorm소개
Goorm소개
 
Spring boot DI
Spring boot DISpring boot DI
Spring boot DI
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기
 
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
 

More from SangHun Lee

PWA 파헤치기
PWA 파헤치기PWA 파헤치기
PWA 파헤치기SangHun Lee
 
Angular CodeLab 첫번째
Angular CodeLab 첫번째Angular CodeLab 첫번째
Angular CodeLab 첫번째SangHun Lee
 
Angular Popular Tools
Angular Popular ToolsAngular Popular Tools
Angular Popular ToolsSangHun Lee
 
Chrome 69 updates
Chrome 69 updatesChrome 69 updates
Chrome 69 updatesSangHun Lee
 
Angular Component Interaction
Angular Component InteractionAngular Component Interaction
Angular Component InteractionSangHun Lee
 
Chrome 68 updates
Chrome 68 updatesChrome 68 updates
Chrome 68 updatesSangHun Lee
 
Reactive Programming with Rxjs
Reactive Programming with RxjsReactive Programming with Rxjs
Reactive Programming with RxjsSangHun Lee
 
Angular Features and New Things
Angular Features and New ThingsAngular Features and New Things
Angular Features and New ThingsSangHun Lee
 
SSG광고의 오마주_에드워드 호퍼
SSG광고의 오마주_에드워드 호퍼SSG광고의 오마주_에드워드 호퍼
SSG광고의 오마주_에드워드 호퍼SangHun Lee
 
[IOS말고 Android] Inflation을 이용하여 부분 Activity 띄우기
[IOS말고 Android] Inflation을 이용하여 부분 Activity 띄우기[IOS말고 Android] Inflation을 이용하여 부분 Activity 띄우기
[IOS말고 Android] Inflation을 이용하여 부분 Activity 띄우기SangHun Lee
 
Ror 4주차(루비맛보기, form 태그)
Ror 4주차(루비맛보기, form 태그)Ror 4주차(루비맛보기, form 태그)
Ror 4주차(루비맛보기, form 태그)SangHun Lee
 
Ror 2주차(컨트롤러 생성)
Ror 2주차(컨트롤러 생성)Ror 2주차(컨트롤러 생성)
Ror 2주차(컨트롤러 생성)SangHun Lee
 
루비온레일즈_01_간단한 정적인 홈페이지 제작
루비온레일즈_01_간단한 정적인 홈페이지 제작루비온레일즈_01_간단한 정적인 홈페이지 제작
루비온레일즈_01_간단한 정적인 홈페이지 제작SangHun Lee
 
Basic of web ref.웹을지탱하는기술_02
Basic of web ref.웹을지탱하는기술_02Basic of web ref.웹을지탱하는기술_02
Basic of web ref.웹을지탱하는기술_02SangHun Lee
 
Eclipse rcp 정리(enabled when, contextmenu)
Eclipse rcp 정리(enabled when, contextmenu)Eclipse rcp 정리(enabled when, contextmenu)
Eclipse rcp 정리(enabled when, contextmenu)SangHun Lee
 
Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01SangHun Lee
 

More from SangHun Lee (20)

PWA 파헤치기
PWA 파헤치기PWA 파헤치기
PWA 파헤치기
 
Angular CodeLab 첫번째
Angular CodeLab 첫번째Angular CodeLab 첫번째
Angular CodeLab 첫번째
 
Angular Popular Tools
Angular Popular ToolsAngular Popular Tools
Angular Popular Tools
 
Chrome 69 updates
Chrome 69 updatesChrome 69 updates
Chrome 69 updates
 
Angular Component Interaction
Angular Component InteractionAngular Component Interaction
Angular Component Interaction
 
Chrome 68 updates
Chrome 68 updatesChrome 68 updates
Chrome 68 updates
 
Reactive Programming with Rxjs
Reactive Programming with RxjsReactive Programming with Rxjs
Reactive Programming with Rxjs
 
Angular Features and New Things
Angular Features and New ThingsAngular Features and New Things
Angular Features and New Things
 
SSG광고의 오마주_에드워드 호퍼
SSG광고의 오마주_에드워드 호퍼SSG광고의 오마주_에드워드 호퍼
SSG광고의 오마주_에드워드 호퍼
 
[IOS말고 Android] Inflation을 이용하여 부분 Activity 띄우기
[IOS말고 Android] Inflation을 이용하여 부분 Activity 띄우기[IOS말고 Android] Inflation을 이용하여 부분 Activity 띄우기
[IOS말고 Android] Inflation을 이용하여 부분 Activity 띄우기
 
Ror 4주차(루비맛보기, form 태그)
Ror 4주차(루비맛보기, form 태그)Ror 4주차(루비맛보기, form 태그)
Ror 4주차(루비맛보기, form 태그)
 
Ror 2주차(컨트롤러 생성)
Ror 2주차(컨트롤러 생성)Ror 2주차(컨트롤러 생성)
Ror 2주차(컨트롤러 생성)
 
루비온레일즈_01_간단한 정적인 홈페이지 제작
루비온레일즈_01_간단한 정적인 홈페이지 제작루비온레일즈_01_간단한 정적인 홈페이지 제작
루비온레일즈_01_간단한 정적인 홈페이지 제작
 
Basic of web ref.웹을지탱하는기술_02
Basic of web ref.웹을지탱하는기술_02Basic of web ref.웹을지탱하는기술_02
Basic of web ref.웹을지탱하는기술_02
 
Eclipse gef
Eclipse gefEclipse gef
Eclipse gef
 
Gef 정리
Gef 정리Gef 정리
Gef 정리
 
Eclipse rcp 정리(enabled when, contextmenu)
Eclipse rcp 정리(enabled when, contextmenu)Eclipse rcp 정리(enabled when, contextmenu)
Eclipse rcp 정리(enabled when, contextmenu)
 
2015.07.01
2015.07.012015.07.01
2015.07.01
 
Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01
 
Html5 video
Html5 videoHtml5 video
Html5 video
 

Angular Library

  • 2. 자신이 제작한 라이브러리를 npm 저장소에 퍼 블리싱하고 다른 프로젝트에서 npm install을 통 해 해당 라이브러리를 사용 할 수 있도록 하는 방 법에 대해 알아본다. 들어가기에 앞서..
  • 3. Angular CLI 6 버전부터 Angular CLI의 빌드 시 스템에 ng-packagr라는 라이브러리를 연결하여 이를 구현할 수 있는 기능을 지원한다. 들어가기에 앞서.. ng-packagr: Angular 라이브러리 코드를 다른 모듈에서 import하여 사용 할 수 있도록 Angular Package Format으로 변경해주는 라이브러리
  • 4. ng generate library lib-name 라이브러리 스켈레톤 코드 추가 projects/lib-name 하위에 라이브러리 스켈레 톤 코드 생성 NgModule 안에 컴포넌트나 서비스 등이 있 는 기존 Angular 어플리케이션과 동일한 구조 라이브러리 생성
  • 5. angular.json에 프로젝트 추가 projects 속성에 lib-name가 추가 package.json에 의존성 추가 ng-packagr를 포함한 라이브러리를 빌드 할 수 있도록 하는 몇가지 의존성이 추가 tsconfig.json에 빌드 경로 추가 빌드 결과 경로가 추가 라이브러리 생성
  • 6. Angular CLI를 통해 라이브러리를 빌드하거나 테스트, 린 트 등을 수행할 수 있다. ng build lib-name ng test lib-name ng lint lib-name 라이브러리 빌드
  • 7. 일반적으로 라이브러리가 어떤 메커니즘에 의해 사용할 수 있었을까? npm 저장소에 있는 라이브러리를 사용하려면 다음과 같 은 단계가 있다. npm install lib-name을 통해 해당 라이브러리를 설 치하여 node_modules폴더에 넣음 app에서 import {something} from ‘lib-name’의 방 식으로 import App에서 라이브러리 사용
  • 8. 이 후에 Angular CLI는 import된 라이브러리를 찾기 위해 먼저 tsconfig에 명시된 경로에서 검색을 한 후 그 다음으로 node_modules에서 찾는다. 이 때, 라이브러리를 빌드하면 그 결과 파일은 node_modules에 들어 가 지 않으므로 tsconfig에 명시된 경로를 빌드 시스템에 알려준다. 이 의미는 라이브러리를 빌드하지 않으면 app에서는 절대 사용할 수 없 다는 것 예를 들어 github 저장소에서 클론 후, IDE에서npm install을 수행하면 lib-name은 import가 되지 않아 에러가 발생한다. 또한 라이브러리가 변경이 되어도 빌드하지 않으면 app에서는 변경된 라이 브러리가 반영되지 않는다. 따라서 라이브러리를 수정했다면 먼저 이것을 재 빌드 해야한다. App에서 라이브러리 사용
  • 9. 라이브러리를 수정 후 매번 ng build를 수행하는 것은 매 우 귀찮고 시간도 꽤 걸리는 작업이다. Angular CLI 6.2부터는 증분 빌드가 가능 -- watch 옵션을 통해 파일이 변경될 때마다 수정된 파일 을 부분 빌드 ng build lib-name --watch 이 기능을 사용하려면 tsconfig.lib.json 파일에서 다음과 같은 설정이 필요하다. 자동 빌드 수행 "angularCompilerOptions" : { "enabledResourceInlining": true }
  • 10. 라이브러리를 빌드 한 후 빌드 결과 폴더에서 npm 저장소에 퍼블리싱 명령을 수행한다. ng build lib-name cd dist/lib-name npm publish 기존에 npm에 퍼블리싱을 하지 않았다면 유저 계 정을 먼저 생성한다. npm adduser https://npmjs.com/~username에서 계정이 생 성된 것을 확인할 수 있음 라이브러리 퍼블리싱
  • 11. Angular 어플리케이션을 개발 시에 자주 반복되 었던 테이블 모듈이나 리치폼 기반의 입력박스 모듈 등을 재사용 가능하게 리팩토링을 한 후 이 것을 라이브러리화해서 사용하였다. 이때, 각각 라이브러리들은 독립적으로 구성되기 때문에 결합도가 상당히 낮아지고 단위 시험을 하기에도, 추후에 유지보수 하기에도 매우 괜찮 아진 구조가 된 것을 경험을 할 수 있었다. 후기