일명 기여자(Contributor)라고 불리는 개발자들이 다른 개발자들이 개발을 편리하게 할 수 있도록 자주 이용되는 소스코드 패턴들을 공유한 것이다.
이러한 소스코드를 가져오는데는 다양한 방법이 존재한다.
CDN은 Content Delivery Network의 약자이다.
위는 chart.js
의 홈페이지에서 가져온 라이브러리 임포트 방법인데,
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
라는 코드를 추가하여, 자신의 라이브러리를 임포트하라고 권장하고 있다.
CDN에 대한 상세한 설명 블로그
CDN이나 라이브러리 원본 URL에 접근하여 서버나 로컬 PC에 저장해두고 개발에 이용하는 방법이다.
한마디로 얘기하면 자동화가 안된다.
이게 가장 권장되는 패키지 관리 방법이다. NPM에 대해 알아보자.
기본적으로 nodejs로 만들어진 프로젝트를 관리하는 도구이며, NPM이라는 거대한 패키지 저장소에서 우리가 원하는 라이브러리를 받아와 쓰는 것이다.
NPM은 다음과 같은 package.json
이라는 파일로 프로젝트의 의존성들을 관리한다.
{
"name": "1_todo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/core": "^7.9.0",
"@babel/preset-env": "^7.9.5",
"@babel/preset-typescript": "^7.9.0",
"@typescript-eslint/eslint-plugin": "^2.27.0",
"@typescript-eslint/parser": "^2.27.0",
"eslint-plugin-prettier": "^3.1.2",
"prettier": "^2.0.4",
"typescript": "^3.8.3"
},
"dependencies": {
"eslint": "^7.32.0"
}
}
위에 보면, 프로젝트 이름, 버전, 설명, 메인 js, 사용자 정의 빌드 스크립트, 키워드, 작성자, 라이센스, 의존성 등 많은 정보를 볼 수 있다.
라이브러리는 시간을 두고 새로운 기능이 만들어지거나 버그가 수정되며 계속 업데이트되기 마련이다.
이러한 버전을 관리하는 것은 생각보다 중요하다. NPM은 버전 관리를 위해 Semantic Versioning이라는 방식을 쓴다.
위의 package.json
의 예를 보면 eslint
의 버전은 ^7.32.0
이다.
버전을 보면 .
이 두개가 붙어 있고, 3개의 구역에 각각 숫자가 배치되어 있다. 여기서 숫자가 배치된 위치가 중요하다.
NPM에 등록된 모든 라이브러리들은 이 Semantic Versioning을 따르기 때문에, 어떤 부분이 업데이트 됐는지 알아보기 좋다.
버전을 기재하는데만 해도 총 4가지 방법을 사용할 수 있다.
"dependencies": {
"eslint": "7.32.0"
}
가장 간단한 케이스다. 7.32.0
버전을 의미한다.
"dependencies": {
"eslint": ">=7.32.0"
}
이건 일반적으로 수학에서 부등호가 갖는 의미와 같다. 7.32.0
보다 크거나 같은 버전을 의미한다.
"dependencies": {
"eslint": "~7.32.0"
}
이 경우에는 이전에 설명했던 Patch Version에 업데이트가 있는 경우에만 버전을 최신 버전으로 업데이트한다. Major Version이나 Minor Version이 업데이트 된 것에 대해서는 관여하지 않는다.
~7.32.0
은7.32.0 ~ 7.32.xx
버전을 포함할 것이다.
"dependencies": {
"eslint": "^7.32.0"
}
이 경우에는 이전에 설명했던 Minor Version과 Patch Version에 업데이트가 있는 경우에 버전을 최신 버전으로 업데이트한다. Major Version이 업데이트 된 것에 대해서는 관여하지 않는다.
^7.32.0
은7.xx.xx
버전을 포함할 것이다.
node.js에서는 일반적으로 캐럿(
^
)을 이용하여 버전을 명시한다.
정식 릴리즈 전의 패키지는 Semantic Versioning의 룰을 지키지 않는 경우도 더러 있다. 특히나 Minor Version을 업데이트 했음에도 하위 호환성이 지켜지지 않아 잘 작동하던 프로젝트가 작동하지 않는 경우도 있으니 주의해야 한다.
node.js에서는 일반적으로 캐럿(^
)을 이용하여 버전을 명시하는데, 그 이유는 기존에 ~0
과 같이 틸트로 버전을 명시했다가 0.0.0
부터 0.x.x
로 버전이 업데이트되어 하위 호환성이 지켜지지 않았던 적이 있다.
그래서 요즘은 ^0.0
과 같이 캐럿으로 버전 표기를 하는 편이다.
react
의 경우 위와 같이0.
대 버전이 매우 많은데~0
과 같이 버전을 입력하면 자동으로 최신인0.14.10
버전이 설치된다. 만일,0.0.1
버전을 사용하다가 갑자기0.1.0
버전으로 버전업되어 라이브러리 호환이 되지 않는다면 굉장히 당황할 수 있다.
node_modules
내부로 들어가서 패키지 디렉토리를 찾아들어가보면 내가 현재 사용하고 있는 버전을 알 수 있다.