모노레포 + Next.js배포 (Amplify)

<div>elop·2023년 11월 10일
1
post-thumbnail

예시로 사용할 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를 찾을 수 없다고 에러가 난다. (경험담 아님)
로컬에선 글로벌 저장소에 저장된 패키지들을 심볼릭하게 연결해주지만, 배포 상황에서는 찾을 수 없기 때문인 듯 하다. 따라서 수정을 좀 해줘야한다.

  1. npm i -g pnpm
  2. pnpm config set node-linker hoisted
  3. pnpm i

1,3 번은 그냥 pnpm을 사용하려고 글로벌로 설치를 한 뒤 install한 것이고,
중요한건 install전에 pnpm config set node-linker hoisted를 하는 거다.
이건 node_modules를 root로 hoisting하겠다는 것이다.

이렇게 해도 상관없을까?

기껏 pnpm을 사용하는데 node_modules을 root로 끌어올려도 맞는걸까? 라는 생각을 했는데 상관 없다는 결론을 내렸다. 그 이유는,

  1. .npmrc에서의 hoisting이 아닌 배포 런타임의 hoisting -> 프론트 배포때만 적용된다.
  2. 그 외에도 install, build시 속도의 이점은 그대로 가지고 있다.
profile
기록장

0개의 댓글