문제 정의
VSCode 확장프로그램 출시를 위해 vsce publish를 입력하면 위와 같은 에러가 발생한다.
사실 수집
- 현재, 기존 모노레포에서 분리된 레포지토리로 분리된 상황이다.
- pnpm install을 통해 모든 모듈을 다운로드 받았다.
원인 추론
에러가 발생한 시점은 위와 같다. 해당 경로(npm_modules/@eslint-community/regexpp)에 들어가면 아래와 같이 에러가 뜬다.
현재 내가 사용하고 있는 Node.js 패키지 관리자는 pnpm이다. pnpm은 심볼릭 링크를 사용한다. npm처럼 node_modules에 직접 설치하지 않고 가상 저장소를 가리키는 심볼릭 링크로 구성한다.
위의 그린 처럼 node_modules하위폴더 우측에 화살표가 있는 이유이다. 실제로 존재하는 게 아니라 가상 저장소를 가리키기 때문이다.
해결 방안 수립
이제, 원인은 찾아냈다. pnpm이라는 패키지 저장소를 사용하는데, vsce publish라는 명령어는 기본적으로 node_modules에서 관련된 패키지를 찾기 때문에 발생한 것이다.
가장 먼저, 검색을 해보았다.
다행히도 나와 동일한 이슈를 겪은 사람이 있었고, 아래 코멘트를 확인하여 해결하였다.
https://github.com/microsoft/vscode-vsce/issues/421#issuecomment-1038911725
// this is my package.json
"scripts": {
"package": "pnpm vsce package --no-dependencies",
"publish": "pnpm vsce publish --no-dependencies"
}
조치 및 구현
스크립트에 위와같은 명령어를 추가하였다.
결과 관찰
잘 동작한다.
결론
이번 문제는 pnpm의 심볼릭 링크 구조와 vsce publish 명령어가 node_modules에서 패키지를 직접 찾는 방식의 차이에서 발생한 것이었다. 해결책으로, --no-dependencies 옵션을 사용하여 vsce 명령어를 실행함으로써 문제를 해결할 수 있었다.