Name | Version |
---|---|
Vue | 3.0.0 |
Node | 16.14.0 |
lerna | 4.0.0 |
yarn | 1.22.17 |
tsc | 4.5.4 |
--applications
ㄴ dml : 몰 프로젝트
ㄴ dsv : 서비스 프로젝트
--components
ㄴ comm-components : 공통 컴포넌트(Include)
ㄴ comm-search : 통합검색 컴포넌트(PreBuild)
--packages
ㄴ lru-cache : LruCache 패키지(PreBuild)
ㄴ mock-service : MockService 패키지(PreBuild)
ㄴ type-utils : 유틸 패키지(PreBuild)
PreBuild : 모듈에서 Bundler에 의해 빌드되어 타 프로젝트에 의존/주입
- 장점1 : 컴파일된 결과를 의존-> CI/CD시 빌드 불필요.
- 장점2 : Bundler에 의해 빌드된 결과물을 참조하므로 Module-Federation Remote로 제공 가능
- 단점 : 의존하고 있는 프로젝트(부모)에서 수정사항을 확인 하려면 컴파일 해줘야 한다.(스스로는 핫리로드로 확인 가능)
Include : 부모 프로젝트에 코드가 추가 되어 부모에서 빌드됨. 프레임워크나 번들러에 종속적일 수 있음.
- 장점: 핫 리로드 지원
- 단점1 : 컴파일 시점에 코드를 의존함, 추후 Module-Federation 전환 시 사용 불가.
- 단점2 : 절대경로(@)사용 불가 : 부모 프로젝트로 추가되어 빌드되므로 컴파일러가 혼동
ex) components/quassar/q-btn을 dml에서 사용 시 빌드 불가. dml은 quassar 프레임워크를 사용하지 않으므로 quassar 컴파일 불가.
applications/* 모듈간 의존하지 않아야 한다.
components/* 모듈간 의존하지 않아야 한다.
packages/* 모듈간 의존하지 않아야 한다.
packages/*는 다른 workspace에서도 자유롭게 참조 가능.
components/*는 applications workspace에서만 참조.
각모듈은 서로 내부에서 어떤일이 일어나는지 알 수 없어야 한다.
가능한 preBuild모듈타입을 지향하여 개발한다.
- nvm use 16.14.0
- npm install --global yarn@1.22.17
- npm install -g lerna@4.0.0
- npm install @vue/cli -g (@vue/cli 4.5.15 - Optional
- lerna bootstrap
- lerna run build
- yarn serve:dml
짱구란? : Master브랜치에 직접 푸시, 타 서비스 개발자 코드 침범, 타인에 코드를 리펙토링하는 패기넘치는 신입님들 등.. 이런 모든 상황을 모든 개발자에게 설명하고 이해시키는 것 자체가 상당한 일이며 가장 중요 한것은 그렇게 많은 시간을 들여 교육을 했다고 하더라도 짱구 문제는 계속해서 발생한다. 그럼 어떻게 해결 해야할까? 그렇다. 시스템에서 막아버리면 된다. 시스템은 실수도, 예외도 없으니 짱구들이 하지 말아야 할 것들을 명세해 놓으면 시스템은 알아서 짱구들을 걸러낼 것이다.
아래는 공통컴포넌트 개발자가 아닌 짱구가 공통컴포넌트 프로젝트에 커밋을 시도 할경우 제한하는 명세 코드
// {yourPath}/mono/.husky/pre-commit
readonly COMM_OWNER_HOST_NAMES=("godBeomPC")
>> whoami
commDeveloperPC
readonly COMM_OWNER_HOST_NAMES=("godBeomPC", "commDeveloperPC") // 추가
// installs
yarn add husky -W -D
// enableHusky
npx husky install
// package.json
"scripts": {
"prepare": "husky install"
//"postinstall": "husky install && cp -a .husky/. .git/hooks/" // if use GitKraken
}