웹어플리케이션을 개발할 때는 항상 지원하는 버전에 신경을 써야합니다. 특히 node 및 npm 버전 역시 마찬가지라고 할 수 있습니다. 지원하지 않는 버전에서 앱을 실행하거나 패키지가 설치될 경우 예기치 못한 에러가 발생할 수 있기 때문이죠!
아래는 이런 문제를 해결하기 위하여 package.json에서
node와 npm의 버전을 설정하는 방법에 대하여 알아봅니다.
# package.json에서 node 및 npm 버전 설정하는 방법
버전 설정은 일반적으로 v1 부터 v2 등의 범위를 지정하여 사용됩니다. 버전 설정을 위해서는 "
engines"를 추가하여 사용할 수 있습니다. 이 때
engines 내부에는 "node"와 "npm"을 각각 나누어서 다른 버전을 설정할 수 있습니다. 아래 예제는 node 버전을 v16 이상에서 v17 미만을 사용할 경우 설정하는 방법입니다. 추가로 npm 버전의 경우 v8 이상에서 v9 이하만 설정하도록 선언하였습니다.
@package.json{
"name": "my-project-name",
"version: "1.0.0",
"engines": {
"node": ">=16.0.0 <17.0.0",
"npm": ">=8.0.0 <9.0.0"
},
dependencies: {
...
}
}
여기까지 설정이 끝났습니다. 다시 설명하면 위에 설정된 package.json은 아래와 같이 각각 node와 nvm 버전을 설정을 의미하게 됩니다.
- node 버전은 16보다 높거나 같고 17보다 낮다
- npm 버전은 8보다 높거나 같고 9보다 낮다
이처럼 간단하게 package.json에서 버전을 설정하였습니다.
참고로 위와 같이 설정하였다고
실제 package.json의 script가 동작하지 않는 것은 아닙니다. 즉 만약 앱을 실행하기 위해서 npm start를 실행했다고 가정했을 때 범위에 벗어난 경우 이를 중단하도록 강제하지는 않는다는 뜻입니다. 그렇기 때문에 package.json에 설정된 버전을 확인할 수 있도록 알려주는 역할을 하게 됩니다. 만약 허용하는 범위의 버전이 아니라면? 이때는 nvm 등을 사용해 해당 범위 내의 버전을 설치하고 사용해야되겠죠!
[ 참고 ]예전 npm v3.0.0 이 전 버전의 경우 engineStrict: true로 추가 설정하여 강제 할 수 있는 방법이 존재하였으나 이 후 버전에서는 해당 설정을 추가하여도 강제되지 않습니다. 이점 참고하시기 바랍니다.
여기까지 pacakge.json에서 node 및 npm 버전 설정 방법을 간략히 알아봤습니다.