기본 콘텐츠로 건너뛰기

Angular 라이브러리 배포

Angular 라이브러리 배포

# Angular 라이브러리

Angular를 사용하다 보면 다른 사람이 만든 컴포넌트를 npm으로 설치해 사용하거나 하는 일들이 종종 있는데, 이 컴포넌트를 배포하는 방식이 바로 Angular Library를 만들어서 배포하는 것

컴포넌트, 모듈 등을 라이브러리화 해서 배포할 수 있도록 한다

# Angular 프로젝트 만들기

Angular 라이브러리를 생성하기 위해선 우선 Angular 프로젝트를 생성해줘야 한다

ng new {project-name}

# Angular 라이브러리 만들기

ng generate library {library-name}

위 명령어를 이용하면 Angular 라이브러리 생성 완료

/projects/{library-name} 폴더 안에 라이브러리가 생성 된다

만약 ng new 명령어로 프로젝트를 생성하지 않은 상태에서 위 명령어를 실행하면 angular.json 파일이 없기 때문에 에러가 발생한다

아래는 ng new sample-app, ng generate library sample-library 명령어로 라이브러리를 생성했을 때의 폴더 구조

# angular.json

angular.json 파일을 열어보면 projects 필드에 "sample-library"가 추가된 것을 확인할 수 있다

여기서 library에 관한 설정들을 할 수 있지만 기본적으로는 건드릴 필요가 없음

라이브러리 루트 폴더가 변경 될 때나 prefix 수정이 필요할 때 바꿔주면 된다

"sample-library": { "projectType": "library", "root": "projects/sample-library", "sourceRoot": "projects/sample-library/src", "prefix": "lib", "architect": { "build": { "builder": "@angular-devkit/build-ng-packagr:build", "options": { "tsConfig": "projects/sample-library/tsconfig.lib.json", "project": "projects/sample-library/ng-package.json" } }, "test": { "builder": "@angular-devkit/build-angular:karma", "options": { "main": "projects/sample-library/src/test.ts", "tsConfig": "projects/sample-library/tsconfig.spec.json", "karmaConfig": "projects/sample-library/karma.conf.js" } }, "lint": { "builder": "@angular-devkit/build-angular:tslint", "options": { "tsConfig": [ "projects/sample-library/tsconfig.lib.json", "projects/sample-library/tsconfig.spec.json" ], "exclude": [ "**/node_modules/**" ] } } } }

그리고 위에서 root와 sourceRoot 필드를 보면 projects 폴더 내에 있는 요소들만 바라보도록 되어있기 때문에 라이브러리에서 외부 모듈을 사용해야 한다면 projects/sample-library/src/package.json 파일과 projects/sample-library/src/ng-package.json 파일을 수정해줘야 한다

# 외부 모듈 추가

우선 Angular 프로젝트 루트 폴더에서 npm 명령어를 이용해 패키지를 설치해준다

여기선 예시로 d3 패키지를 설치해보자

d3와 @types/d3를 모두 설치한다

npm intsall d3 npm install --save-dev @types/d3

그리고 projects/sample-library/src/package.json 파일의 peerDependencies 부분에 두 모듈을 추가해준다

{ "name": "sample-library", "version": "0.0.1", "peerDependencies": { "@angular/common": "^8.2.0", "@angular/core": "^8.2.0", "d3": "^5.12.0", "@types/d3": "^5.7.2" } }

이 부분이 약간 이상한게 .. 지금 이 글을 쓸 때 사용한 Angular 버전은 8이고, 처음 라이브러리를 배포해 본 건 Angular 6 버전인데 적용법이 조금 다른 것 같다

Angular 6에선 위와 같이 했더니 외부 모듈은 명시적으로 whitelist를 작성해줘야 한다 - 정확히는 기억 안 나지만 비슷한 문구 - 는 에러가 발생했었고, 이에 따라 projects/sample-library/src/package.json 파일이 아래와 같이 작성되도록 projects/sample-library/src 폴더 내에서 npm install 명령어를 실행하고,

{ "name": "sample-library", "version": "0.0.1", "peerDependencies": { "@angular/common": "^8.2.0", "@angular/core": "^8.2.0" }, "dependencies": { "d3": "^5.12.0" }, "devDependencies": { "@types/d3": "^5.7.2" } }

projects/sample-library/src/ng-package.json 파일을 아래와 같이 수정 했었다

{ "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", "dest": "../../dist/sample-library", "lib": { "entryFile": "src/public-api.ts" }, "whitelistedNonPeerDependencies": [ "d3", "@types/d3" ] }

이 부분이 버전에 따른 차이인지 아니면 이전에 내가 잘못한 부분인지는 추가 확인이 필요할 듯

만약 잘못했다면 .. 수상과 멀어지는 소리가 들린다 ...

# public-api.ts

외부, 즉 다른 Angular 프로젝트에서 불러올 수 있도록 하려는 모듈, 컴포넌트, 서비스 등은 public-api.ts 파일에 작성해준다

/* * Public API Surface of sample-library */ export * from './lib/sample-library.service'; export * from './lib/sample-library.component'; export * from './lib/sample-library.module';

# Build

ng bulid {library-name}

빌드는 간단하게 위와 같이 할 수 있다

정상적으로 빌드가 되면 dist/{library-name} 폴더가 생성되고, 해당 폴더를 npm에 배포하거나 다른 프로젝트에 설치해서 사용할 수 있다

from http://devs-diary.tistory.com/39 by ccl(A) rewrite - 2020-03-06 03:54:28

댓글

이 블로그의 인기 게시물

[020] 파동함수를 쓰기

[020] 파동함수를 쓰기 [020] 파동함수를 쓰기 [020] 파동함수를 알면 우리가 원하는 뭔가를 알 수 있다고 했는데, 정작 파동을 함수로 쓰는 것은 아직 다루지 않았고, 양자역학 내용을 좀 더 진행하려면 왜 파동이 삼각함수로 써 지는지를 한번은 정리를 해야겠다. 수학이 많이 나올 예정이다. 앞에서 파동함수를 아래 형태로 쓸 수 있다고 했었는데, 왜 이런 형태가 되는지 알아보자. [020-01] 파동함수 사인파의 일반형은 코사인 (cos) 을 이용해 쓰지만, 사인 (sin) 과 코사인은 위상차이만 있는 함수들이고, 우리는 앞으로 사인을 이용해 문제를 풀 예정이라 사인을 이용하기로 한다. 파동함수는 양자역학에서 갑자기 나온 말이 아니고, 원래 파동을 함수의 형태로 쓴 것을 파동함수라고 부른다. 파동-입자 이중성을 가지니까 기존에 파동을 함수의 형태로 쓰던 그 모양을 가져다 쓴 것. 주교재의 16장에 있는 내용이다. [020-02] 펄스 - Pulse 아래와 같이 하나의 진동이 왼쪽에서 오른쪽으로 진행하는 상황을 생각해보자. 시간 t 일 때, 위치 x 의 밧줄의 높이를 y 라 하고, 셋의 관계를 기호로 쓰면, 그러면 아래의 관계가 성립한다. 이게 무슨말이냐면, 시간 t 일 때 위치 x 의 밧줄의 높이 와 시간 0 일 때 위치 x-vt 의 밧줄의 높이가 같다 는 말인데, 그림으로 보면, 왼쪽은 시간 0, 오른쪽은 시간 t 이고, t 일 때 P 의 높이와 0 일 때 높이가 같다는 것. [020-03] 파동을 식으로 써보자. 아래의 파동을 보자. 지금 내용부터는 사인이든 코사인이든 상관없는데, 위 그림이 사인이니까 아래의 식 으로 쓸 수 있다. A는 진폭이고, 주기, 진동수, 파장 같은 값을 아직 모르니까 a 는 아직 정해지지 않은 값 이다. 일반적으로 알고있는 삼각함수는 가로축이 각도 이지만, 우리는 공간을 진행하고 있는 파동을 다루니까 위의 형태로 써진다고 생각하자. x=0 에서 진폭이 ...

(주)편두리 채용 정보: PYUNDOORI에서 핫한 개발자분들을 모십니다.

(주)편두리 채용 정보: PYUNDOORI에서 핫한 개발자분들을 모십니다. - 좋아요 아래와 같은 업무를 훌륭히 감당하실 분을 모십니다.서비스 관련 DB 모델링, DB 최적화 작업서버 & DB 관리Frontend & Backend 인터페이스의 최적화 작업 화합과 성장을 같이! - Angular JS의 경험 - Node.js - javascript 능숙자 - DRMS 사용 능숙자 더 많은 내용은 더 많은 내용은 더팀스 에서 확인하세요! from http://theteams.tistory.com/742 by ccl(A) rewrite - 2020-03-22 12:20:20