새 버전을 배포한 후에는 그 버전의 내용을 절대 수정하면 안 됩니다. 만약 수정 사항이 생기면 메이저 버전, 마이너 버전, 패치 버전 중 하나를 의미에 맞게 올려서 새로운 버전으로 배포해야 합니다. 이렇게 하면 배포된 버전 내용이 바뀌지 않아서 패키지 간 의존 관계에 큰 도움이 되며, 동일한 버전의 패키지는 언제나 동일한 동작을 수행한다고 믿을 수 있습니다.
버전의 숫자마다 의미가 부여되어 있으므로 다른 패키지를 사용할 때도 버전만 보고 에러 발생 여부를 가늠할 수 있습니다. 의존하는 패키지의 메이저 버전이 업데이트되었다면 기존 코드와 호환되지 않을 가능성이 크므로 미리 주의를 기울여야 합니다. 마이너나 패치 버전 업데이트는 비교적 안심하고 버전을 올릴 수 있습니다.
package.json에는 SemVer식 세 자리 버전 외에도 버전 앞에 ^이나 ~ 또는 >, < 같은 문자가 붙어 있습니다. 이 문자는 버전에는 포함되지 않지만 설치하거나 업데이트할 때 어떤 버전을 설치해야 하는지 알립니다.
가장 많이 보는 기호는 ^이며, 마이너 버전까지만 설치하거나 업데이트합니다. npm i express@^ 1.1.1이라면 1.1.1 이상부터 2.0.0 미만 버전까지 설치됩니다. 2.0.0은 설치되지 않습니다. 1.x.x와 같이 표현할 수도 있습니다.
~ 기호를 사용한다면 패치 버전까지만 설치하거나 업데이트합니다. npm i express@~1.1.1이라면 1.1.1 이상부터 1.2.0 미만 버전까지 설치됩니다. 1.1.x와 같은 표현도 가능합니다. ~보다 ^이 많이 사용되는 이유는 마이너 버전까지는 하위 호환이 보장되기 때문입니다.
>, <, > =, < =, =은 알기 쉽게 초과, 미만, 이상, 이하, 동일을 뜻합니다. npm i express@>1.1.1처럼 사용합니다. 반드시 1.1.1 버전보다 높은 버전이 설치됩니다.
추가적으로 @latest도 사용하는데, 안정된 최신 버전의 패키지를 설치합니다. x로도 표현할 수 있습니다(예: npm i express@latest 또는 npm i express@x).
@next를 사용하면 가장 최근 배포판을 사용할 수 있습니다. @latest와 다른 점은 안정되지 않은 알파나 베타 버전의 패키지를 설치할 수 있다는 것입니다. 알파나 베타 버전은 1.1.1-alpha.0나 2.0.0-beta.1처럼 표시합니다. 출시 직전의 패키지에는 2.0.0-rc.0처럼 rc(Release Candidate)가 붙는 경우도 있습니다.