npm 모듈을 많이 개발하는 사람이라면 잘 알수도 있지만 의외로 모르는 사람이 많다.
보통 사용하는건 dependencies, devDependencies 두가지 일 것이고, Peer dependency의 존재를 모르거나 왜 쓰는지 잘 모르는 사람이 많은데, 제대로 알고 사용할 수 있도록 정리해본다.
tsc/webpack/parcel 등의 transpiler/bundler를 통해 빌드되어 순수한 자바스크립트 코드를 실행할 때 필요한 패키지는 모두 dependencies에 속해야 한다.npm install 시 표기된 패키지가 node_modules 디렉터리에 없으면 표시된 버전의 패키지를 설치한다.devDependencies에 해당될 수 있다.npm install 시 표기된 패키지가 node_modules 디렉터리에 없으면 표시된 버전의 패키지를 설치한다.dependencies와 다르게 가능한 관대하게 표시하는것이 권장된다.^1.0 처럼 마이너 버전까지는 모두 포함할 수 있도록 표기하는게 바람직하다. (semver 참고)npm install 시 표기된 패키지가 node_modules 디렉터리에 없더라도 아무것도 설치하지 않는다.
react, react-dom 패키지npm i react 직후 리액트를 바로 사용할 수 있으므로 react 패키지에는 peerDependencies가 없을것으로 기대된다.react의 package.json에는 peerDependencies가 없다.react-dom은 react를 기반으로 동작하므로 peerDependencies에 react가 있을것이다.react-dom의 peerDependencies에 react가 있다.