예시로 사용할 pnpm 모노레포 구조는 아래와 같고, next 버전은 13이다.
- root
- node_modules
- packages
- frontend
- node_modules
- ...
- backend
- node_modules
- ...
- AI
- pnpm-workspace.yaml
- package.json
- pnpm-lock.yaml
# pnpm-lock.yaml
packages:
- "packages/*"
친절하게도 모노레포옵션이 있다. 프론트 경로를 지정해줬다.
yaml파일도 기본으로 작성해 준다. 하지만❗️❗️❗️
❗️Error: ENOENT: no such file or directory, mkdir '/codebuild/output/.../amplify-compute-bundle-output/compute/default/node_modules/next'
node_modules
를 찾을 수 없다고 에러가 난다. (경험담 아님)
로컬에선 글로벌 저장소에 저장된 패키지들을 심볼릭하게 연결해주지만, 배포 상황에서는 찾을 수 없기 때문인 듯 하다. 따라서 수정을 좀 해줘야한다.
npm i -g pnpm
pnpm config set node-linker hoisted
pnpm i
1,3 번은 그냥 pnpm을 사용하려고 글로벌로 설치를 한 뒤 install한 것이고,
중요한건 install전에 pnpm config set node-linker hoisted
를 하는 거다.
이건 node_modules를 root로 hoisting하겠다는 것이다.
기껏 pnpm을 사용하는데 node_modules
을 root로 끌어올려도 맞는걸까? 라는 생각을 했는데 상관 없다는 결론을 내렸다. 그 이유는,
.npmrc
에서의 hoisting이 아닌 배포 런타임의 hoisting -> 프론트 배포때만 적용된다.