Skip to content

Latest commit

 

History

History
107 lines (66 loc) · 2.81 KB

2020-11-25.md

File metadata and controls

107 lines (66 loc) · 2.81 KB

yarnrc, npmrc 이슈(2)

Category: #Tech

이전 이슈에서 npm과 yarn의 설정파일 우선순위로 인해서 private 저장소 접근에 이슈가 있었다. 이 문제를 좀 더 깊게 파고들어 어느 설정파일이 더 우선순위가 높은지 파보았다.

(npm을 사용하면 yarn 설정은 관심도 안둬서 우선순위 걱정을 할 필요가 없긴하다.)

패키지 매니저로 yarn을 사용한다고 할 때, 먼저 설정파일 종류와 위치는 다음과 같았다.(맥 기준)


Global npm config

~/.npmrc에 저장되어 있다.

Global yarn config

~/.yarnrc에 저장되어 있지만, 이 파일은 자동으로 생성되기 때문에 직접 파일을 건드리는건 좋지 않아 보인다.

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1


lastUpdateCheck 1606286290542

Local npm config

package.json이 있는 프로젝트의 .npmrc

Local yarn config

package.json이 있는 프로젝트의 .yarnrc


~/.yarnrc는 자동생성이기 때문에 무시하고 나머지 3개의 우선순위를 파악해보기 위해 같은 레지스트리에 설정을 몇개 집어넣어보았다.

~/.npmrc

@test:registry=https://foo.foo

local .npmrc

@test:registry=https://bar.bar

local .yarnrc

"@test:registry" "https://baz.baz"

그리고 yarn add @test/test를 입력했을 때 어디로 접근하는지 확인해보았다.

결과는 다음과 같았다.

info There appears to be trouble with your network connection. Retrying...
error An unexpected error occurred: "https://bar.bar/@test%2ftest: getaddrinfo ENOTFOUND bar.bar".

?

왜 yarn으로 설치를 해도 local npm config을 먼저 받는걸까? 혹시나 yarnrc의 설정이 제대로 들어가지 않았나 싶어 yarn config list를 쳐봤다.

info yarn config
{
  '@test:registry': 'https://baz.baz'
}
info npm config
{
  '@test:registry': 'https://bar.bar'
}

잘들어갔다.

??

yarn 설정이 있어도 npm의 설정을 더 높게 우선순위로 쳐주는 듯 했다. 그러면 local끼리는 npm이 가져갔지만 local yarn과 global npm이 싸우면 누가 이길까? 바로 프로젝트의 .npmrc를 지워봤다.

info There appears to be trouble with your network connection. Retrying...
error An unexpected error occurred: "https://foo.foo/@test%2ftest: getaddrinfo ENOTFOUND foo.foo".

???

global npm 설정이 이겼다. 이젠 모르겠다. yarn은 최약체인가보다.

결론

yarn으로 패키지 매니저를 설치하더라도 설정 우선순위에 대한 실험 결과는 이랬다.

local npmrc > global npmrc > local yarnrc

이전에 yarn config을 설정한게 잘 세팅이 안된 이유도 이런게 아니었을까?

결론은 설정은 npm만 써도 될 것 같다.