Using sequence means I need to include @sveltejs/kit in my Node Docker image #3709

스벨트 Hooks 기능이 있는데, 리액트의 Hooks API 와는 당연히 거리가 멀고, Next.js 에서 아직 정식 출시가 안 됐지만 일단 작동은 되는 미들웨어 기능이다.
이녀석을 단독으로 서버 돌릴 때 (특히 나같이 Docker 돌릴 때) 버그가 있는데,
일단 다른 건 잘 되다가 단 하나, 미들웨어 여러개를 연달아 실행시켜주는 sequence 함수를 넣었을 때 문제가 생긴다.
일단 평소처럼 빌드까지 잘 되다가 앱 실행하고 브라우저에서 접속하려 하면 아래 메시지와 함께 팅긴다.

Cannot find package '@sveltejs/kit' imported from /usr/sveltekit/build/server/app.js

경로야 대충 빌드된 폴더에 있는 빌드된 스크립트 파일이다.
현재 알려진 원인은, 빌드 시 devDependencies 에 종속되어 사용 중인 패키지들이 포함되어야 하는데, 현재 잘 안되는 모양이다.

adapter-node output relies (again) on Kit as a prod dependency #3137

스벨트킷의 의도는, 일단 패키지 만들 때, devDependencies 에 관리되는 종속성은 죄다 번들링 시켜버리고, 만약 사용자가 용량을 아끼고 싶다면 dependenciespeerDependencies 에서 관리되는 종속성은 걍 냅두도록 디자인했다. 물론 이건 컴포넌트 만들 때 일이고 최종 목표는 일단 SvelteKit 에서 사용한다는 패키지 있다면 죄다 번들링 해버려 빌드 후 별도의 npm install 없이 사용하도록 하는 것이다.
일단 Cloudflare 나 Vercel 등의 서버리스 환경에서는 문제가 없어 보인다. 혹시 이슈 찾으면 내용 갱신하겠다.

어쨌든, 이는 1.0 최종 목표에 포함되기 때문에 이 디자인을 포기할 생각 없으니 그리 알도록 하고,
해결 방법은 뭐 간단하다. 그냥 devDependencies 에 있던 @sveltejs/kit 패키지를 dependencies 란에 옮기면 끝이다.
그러면 빌드부터 실행까지 일단 원만하게 잘 될 것이다.
단지 이 방법은 임시방편이기 때문에, 다음에라도 고칠 수 있으니 언제든 다시 @sveltejs/kit 패키지를 devDependencies 란에 옮길 준비가 되어 있어야 한다.

한시빨리 해결해여 디자인대로 됐으면 좋겠다. 사실 이거 말고도 은근 버그와 부족한 사항이 많다.

끗.

profile
지옥에서 온 개발자

0개의 댓글