devDependencies
. 개발 환경에서 사용하는 패키지 목록이다. 배포된 코드가 사용하지 않는 의존성이라면 devDependencies
에 넣어서 불필요한 설치를 막을 수 있다.
리액트 개발 환경에서 이 devDependencies
의 분류에 의문이 들었다. SPA 코드는 번들링 되기 때문에 모든 의존성이 몇 개의 JavaScript 파일로 묶인다. node_modules
를 주렁주렁 달고 배포하는 게 아니라 번들링 된 파일 몇 개만 배포하면 된다. 그렇기 때문에 dependencies
의 의존성만 설치하는 일 자체를 하지 않아도 된다.
그동안 빌드 이후에도 필요한 의존성을 dependencies
에 넣고, 그렇지 않다면 devDependecies
에 넣어 왔다. 빌드된 파일을 배포하고 다른 패키지에서 설치하여 사용하는 일반적인 패키지에서는 유효한 분류였다. 하지만 빌드 이후 사용하는 의존성이 없는 SPA는 이 분류에 따르면 모든 의존성이 devDependencies
에 들어가야 한다. 심지어 react
까지도. devDependencies
에 있는 react
는 너무 어색하지 않은가?
반대로 빌드에 필요한 파일을 dependencies
로 분류하면 어떨까? 린트니 테스트니 개발 과정에서 필요한 것이고, SPA의 본질은 빌드니까 말이다. 그럼 그동안 열심히 devDependencies
로 분류해왔던 typescript
와 webpack
이 dependencies
가 된다. 너무 낯설어서 아직 적응이 안 된다.
Node.js 패키지 의존성을 트리로 나타낸다면 SPA들은 leaf node이다. leaf 노드이기 때문에 다른 패키지에서 사용하는 방법론이 조금 안 맞는 것 같다. 이런 leaf node만을 위한 패키지 매니저를 만들어보면 어떨까?