배경
여러가지 라이브러리를 만들어보며, 지금까지 항상 npm에 임의로 버전을 올리고, 패키지를 다운받은 이후에 테스트했었다.
그런데 인턴을 하다, eslint룰을 추가하고 잘 적용됐는지 확인해볼 일이 생기게 됐고, 회사 사내의 라이브러리였기에 이때도 이렇게 진행할 수는 없었다.
yarn link
설명하기에 앞서, 로컬에서 수정하여 프로젝트에 적용시키고자하는 것을 패키지, 실제로 변경된 패키지를 테스트되는 곳을 프로젝트라고 하겠다.
yarn link를 사용해서 패키지와 프로젝트를 연결하면 프로젝트의 node_modules/<package> 와 실제 로컬의 <package>폴더 간의 심볼릭 링크가 생성된다.
이 말인 즉슨, 수정한 패키지를 프로젝트에 추가하기 위해 추가적인 배포나 설치과정이 필요하지 않다는 것이다.
그러나 이 때 두 가지 패키지 같은 패키지를 의존하는 경우, 두 가지 패키지의 같은 의존성이 테스트 하고자 하는 곳에 두 번 설치될 수 있다.
자세한 문제는 이 링크를 참고하면 좋을 것 같다.
yalc
yalc는 yarn link와 다르게 node_modules까지 연결시키는게 아니라, 중복 설치, 동일하지만 다른 경로에 있는 패키지 문제가 발생하지 않는다.
yalc는 yalc publish명령어를 통해서 로컬에 해당 파일을 배포하고, 프로젝트에서 yalc add 패키지@버전의 형태로 배포된 로컬 파일을 의존성으로 정해줄 수 있다.
npm i -g yalc
yarn global add yalc
시작해보기
준비
세가지 프로젝트를 구성했다.
- yalc-project1
- yalc-project2
- yalc-final
일부러 중첩되는 의존성을 갖도록 yalc-project2가 yalc-project1을,
yalc-final이 yalc-proejct2를 의존성으로 갖도록 구성하였다.
yalc-project1 구성/배포
간단하게(npm init -y) index.js에서 변수를 하나 export하도록 패키지를 만들어 주었다.
이렇게 구성해주고, yalc publish를 통해 로컬에 배포해주었다.
로컬 배포 파일 확인
이렇게 하면 프로젝트명@버전 형태로 로컬 저장소에 배포된다.
실제로 배포된 파일을 보자.
yalc를 통해 배포된 파일은 ~/.yalc/packages에 저장이된다.
위의 경우에는 yalc-project1프로젝트가 1.0.0버전으로 배포되었으므로 아래와 같은 폴더 구조로 배포가 된다.
이제 이렇게 배포된 패키지를 yalc-project2에 적용시켜줄 것이다.
yalc-project2
마찬가지로 npm init -y로 패키지를 만들어주었고, yalc-project1패키지에서 사용하는 변수를 사용할 것이다.
이를 위해서 yalc를 통해 yalc-project1를 yalc-proejct2의 의존성에 추가해줄 것이다.
yalc를 통한 의존성 추가/설치
아까 yalc를 통해 yalc-project1을 배포했을때의 결과 문자열을 통해 yalc-project2에 의존성을 추가할 수 있다.
즉 아래와 같이 사용한다.
yalc add yalc-project1@1.0.0
이렇게 추가하게되면, 아래와 같이 .yalc폴더와 yalc.lock, node_modules가 생기게된다.
이때 package.json을 잘보면 file:./yalc/yalc-project1 과 같이 파일에 직접적인 의존성을 갖는다는 걸 알 수 있다.
즉, 현재 디렉토리의 .yalc디렉터리 내부의 프로젝트로 연결되는 것이다.
index.js
이번에는 yalc-project1의 변수를 출력하는 함수를 하나 만들어 export했다.
yalc 로컬 배포
마찬가지로 yalc publish를 통해 로컬 파일에 배포하자.
yalc-final
이제 최종 프로젝트에 yalc-project2를 적용시키자.
마찬가지로 npm init -y를 통해 만들었다.
yalc add를 통해 의존성을 추가해주자.
그럼 이제 .yalc에 yalc-project2가 생기고, yalc-project2 프로젝트에 .yalc/yalc-project1이 추가된 것을 확인할 수 있다.
이러고 index.js를 실행시키면...?
이는 node_modules/yalc-proejct1이 없기때문이다.
현재는 node_modules/yalc-project2/.yalc/yalc-project1의 형태로 의존성이 들어가있다.
이 상태에서 yarn 또는 npm install을 해주게되면 node_modules/yalc-project1디렉토리가 생성되며, node_modules에 병합을 해주는 파일(.package-lock.json, yarn-integrity)이 생성된다.
이러면 이제 node index.js가 잘 작동한다.