react-monorepo
라는 이름의 최상단 디렉토리를 만들고 그 안에 libs
디렉토리와 여러 하위 디렉토리(assets
, components
, data
, page
, store
, styles
)를 생성하려면, Nx 명령어와 일반적인 디렉토리 생성 명령어를 조합해 사용할 수 있습니다. 여기서는 먼저 Nx 작업 공간을 생성하고, 그 안에서 필요한 라이브러리와 폴더 구조를 설정하는 방법을 설명하겠습니다.
최상단에 react-monorepo
라는 Nx 작업 공간을 생성합니다. Nx CLI를 사용하여 이 작업을 수행할 수 있습니다. 터미널에서 다음 명령어를 실행하세요:
npx create-nx-workspace react-monorepo --preset=empty
이 명령은 react-monorepo
라는 폴더를 생성하고, Nx 작업 공간을 초기화합니다. --preset=empty
옵션은 초기 프로젝트나 설정을 추가하지 않고 빈 작업 공간을 생성합니다.
libs
내부의 라이브러리 생성Nx CLI를 사용하여 libs
디렉토리 내에 필요한 라이브러리들을 생성할 수 있습니다. 예를 들어, components
라이브러리를 생성하려면 다음과 같은 명령어를 사용합니다:
nx generate @nrwl/js:lib components --directory=libs
이 명령은 libs/components
위치에 라이브러리를 생성합니다. 여기서 @nrwl/js:lib
는 JavaScript 라이브러리를 생성하기 위한 Nx의 스키마를 나타냅니다. React 컴포넌트 라이브러리를 만들기 위해서는 @nrwl/react:lib
를 사용할 수 있습니다. --directory=libs
옵션은 생성될 라이브러리의 위치를 지정합니다.
assets
, data
, page
, store
, styles
와 같은 나머지 폴더들은 특정 Nx 스키마에 속하지 않는 일반 디렉토리입니다. 이 폴더들은 직접 생성할 수 있습니다. Nx 프로젝트 내에서 특별한 빌드 프로세스나 의존성 관리가 필요하지 않은 경우, 터미널에서 일반적인 디렉토리 생성 명령어(mkdir
)를 사용하여 이들 폴더를 생성할 수 있습니다.
react-monorepo
디렉토리로 이동한 후, 다음 명령어를 실행하여 필요한 폴더들을 생성할 수 있습니다:
cd react-monorepo
mkdir -p libs/assets libs/data libs/page libs/store libs/styles
위의 단계를 통해 원하는 디렉토리 구조를 Nx 모노레포 내에 성공적으로 구성할 수 있습니다. 이 구조를 바탕으로 공용 컴포넌트, 스타일, 데이터 등을 효율적으로 관리하고 재사용할 수 있게 됩니다.
nx generate @nrwl/js:lib
또는 nx generate @nrwl/react:lib
와 같은 명령어를 사용하여 libs
디렉토리 내에 라이브러리를 생성할 때, @nrwl/js:lib
또는 @nrwl/react:lib
와 같은 표현을 "스키마(Schema)"라고 부릅니다. 스키마는 Nx 또는 Angular CLI에서 제공하는, 프로젝트 또는 라이브러리 생성, 구성 변경 등을 위한 미리 정의된 명령어 세트 또는 템플릿을 의미합니다. 스키마를 사용하면 특정 유형의 프로젝트 또는 라이브러리에 필요한 기본 파일, 설정, 디렉토리 구조 등을 자동으로 생성하고 구성할 수 있습니다.
assets
, data
디렉토리 등)의 경우, 필요에 따라 직접 디렉토리와 파일을 생성하여 더 큰 유연성을 가질 수 있습니다.따라서, 프로젝트의 특정 부분(예: 공용 컴포넌트 라이브러리)에 대해 Nx의 자동화된 도구와 모범 사례를 활용하고자 한다면 스키마를 사용하는 것이 좋습니다. 반면, 특별한 빌드 프로세스나 설정이 필요하지 않은 자산이나, 프로젝트의 특수한 구조를 구성하고자 한다면 직접 디렉토리와 파일을 생성하는 방법을 선택할 수 있습니다.
nx generate @nrwl/js:lib components --directory=libs --verbose
명령어를 실행할 때, 아래와 같은 번들러 선택 옵션이 제공됩니다:
NX Generating @nrwl/js:library
✔ Which unit test runner would you like to use? · jest
? Which bundler would you like to use to build the library? Choose 'none' to skip build setup.
- swc
- tsc
- rollup
- vite
- esbuild
- none
Create React App (CRA)와 JavaScript를 기반으로 하고 있다면, 여러분의 프로젝트에 가장 적합한 라이브러리 번들러를 선택하는 것이 중요합니다. 주어진 옵션 중에서, CRA와 JavaScript 환경에 가장 잘 맞는 번들러는 다음과 같은 이유로 swc
또는 tsc
(TypeScript Compiler)를 추천합니다:
tsc
는 JavaScript 파일을 처리할 수 있으며, jsconfig.json
을 통해 프로젝트 설정을 제공할 수 있습니다.tsc
를 선택하는 것도 좋은 방법입니다.tsc
를 사용할 때는 번들링, 코드 분할, 미니파잉 등의 추가적인 빌드 단계를 다른 도구(예: Rollup, Webpack)와 함께 사용해야 할 수도 있습니다.swc
를 선택하세요.tsc
를 선택하는 것이 좋습니다.swc
를 추천합니다. 이는 최신 JavaScript 기능과 빠른 빌드 속도를 제공하기 때문입니다. 향후 TypeScript로의 전환을 고려하지 않는다면, swc
가 현재 요구사항에 더 잘 부합할 수 있습니다.명령어를 실행할 때 swc
를 선택하기 위해서는 번들러 선택 단계에서 swc
를 선택하면 됩니다.
라이브러리 생성 과정에서 마주친 선택지에 대해:
❯ As provided:
Name: components
Root: libs
Derived:
Name: components
Root: libs/components
여기서는 두 옵션 사이에 별다른 차이가 없습니다. Nx가 제안하는 구조(As provided vs Derived)는 실제로 같은 위치를 가리키고 있습니다. libs
폴더 내에 components
라는 이름으로 라이브러리를 생성하겠다는 것입니다.
선택해야 할 옵션:
libs/components
아래에 components
라는 이름의 라이브러리가 생성됩니다.As provided
)을 선택해도 좋습니다. 이 경우, 명령어에 명시한 대로 libs
디렉토리 아래에 components
라이브러리가 생성됩니다.이 과정을 통해 components
라는 이름의 라이브러리가 성공적으로 libs
디렉토리 안에 생성되며, 설정한 jest
테스트 러너와 swc
번들러를 사용하여 설정됩니다. 이렇게 Nx CLI를 사용하는 방법은 프로젝트 내에서 여러 라이브러리를 일관되게 관리할 수 있도록 도와줍니다.