yarn upgrade로 업데이트할 수 없는 간접 종속 패키지만 업그레이드하려면
TL; DR:
yarn v1 의 경우, yarn.lock 로부터 해당의 패키지의 섹션을 삭제해
yarn install
하면 업그레이드할 수 있다.2021년 9월 9일 추가: yarn v2 이상에서는
yarn up -R パッケージ
로 업그레이드할 수 있게 되었다.어려움
GitHub에서 소스 코드를 호스팅하는 npm 패키지에서 GitHub의 Security Alerts가
fstream < 1.0.12
의 취약점을보고했습니다.yarn upgrade fstream
에서 최신 버전으로 업그레이드하려고 했지만…$ cd my_npm_pkg
$ yarn upgrade fstream
yarn upgrade v1.16.0
[1/5] 🔍 Validating package.json...
[2/5] 🔍 Resolving packages...
[3/5] 🚚 Fetching packages...
[4/5] 🔗 Linking dependencies...
warning " > [email protected]" has unmet peer dependency "babel-runtime@>= 6".
[5/5] 🔨 Rebuilding all packages...
success Saved lockfile.
success Saved 0 new dependencies.
✨ Done in 7.07s.
$ git diff
(出力なし)
실행해도 yarn.lock 가 변화하지 않는다. 이것은, 이 npm 패키지가 fstream 에 직접적으로 의존하고 있지 않기 때문이었다.
조사
어떤 패키지가 fstream에 의존하는지는
yarn why fstream
$ yarn why fstream
yarn why v1.16.0
[1/4] 🤔 Why do we have the module "fstream"...?
[2/4] 🚚 Initialising dependency graph...
[3/4] 🔍 Finding dependency...
[4/4] 🚡 Calculating file sizes...
=> Found "[email protected]"
info Reasons this module exists
- "node-sass#node-gyp" depends on it
- Hoisted from "node-sass#node-gyp#fstream"
- Hoisted from "node-sass#node-gyp#tar#fstream"
info Disk size without dependencies: "140KB"
info Disk size with unique dependencies: "416KB"
info Disk size with transitive dependencies: "788KB"
info Number of shared dependencies: 12
✨ Done in 0.70s.
원래를 추적하면(이 npm 패키지가 직접적으로 의존하고 있다) node-sass 가 간접적으로 fstream 을 끌어들인 것 같다.
해결책
1. node-sass를 다시 설치합니다.
yarn remove node-sass && yarn add -D node-sass
에서 node-sass를 다시 설치하면 이번에는 해결할 것입니다.다만, 이렇게 하면 node-sass 가 의존하는 패키지가 모두 업그레이드 되어 버린다. 호환성이 있는 semver의 범위내에서 업그레이드 된다고는 해도, 일단 차분을 체크하지 않으면 안심할 수 없다. 향후 비슷한 상황이 되고, fstream 에 의존하는 패키지가 복수로 늘어나면, 차분은 더욱 커질 것으로 예상된다. 가능하면 fstream만 업그레이드하고 싶습니다.
2. yarn.lock에서 fstream을 지우고 yarn install
yarn.lock에서 fstream을 지우고
yarn install
그렇다면 어떨까 생각해 보았습니다.우선 yarn.lock 에서 fstream 으로 시작하는 행을 찾아, 그 섹션을 통째로 삭제한다.
$ git diff
diff --git a/yarn.lock b/yarn.lock
index 3983d00b8b..9a3e1ef0cf 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3624,15 +3624,6 @@ fsevents@^1.2.7:
nan "^2.9.2"
node-pre-gyp "^0.10.0"
-fstream@^1.0.0, fstream@^1.0.2:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
- dependencies:
- graceful-fs "^4.1.2"
- inherits "~2.0.0"
- mkdirp ">=0.5 0"
- rimraf "2"
-
function-bind@^1.0.2, function-bind@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
yarn install
를 실행하고 yarn.lock이 업데이트되었는지 확인하십시오.$ yarn install
(略)
$ git diff
diff --git a/yarn.lock b/yarn.lock
index 3983d00b8b..3a44640600 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3625,8 +3625,9 @@ fsevents@^1.2.7:
node-pre-gyp "^0.10.0"
fstream@^1.0.0, fstream@^1.0.2:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
+ integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
dependencies:
graceful-fs "^4.1.2"
inherits "~2.0.0"
fstream 섹션이 부활하여 최신 버전으로 업그레이드된 것을 알 수 있다.
yarn.lock의 일부를 다시 쓸 수 있습니까?
yarn 의 의존 해결 알고리즘을 이해하고 있는 것은 아니지만, 아마 괜찮을 것이다. yarn.lock 에 쓰여져야 하는 패키지가 빠져 있다면,
yarn install
는 자동적으로 패키지를 설치해 yarn.lock 에 추기한다고 생각된다. package.json 의 dependencies 에 손으로 패키지를 덧붙이고 나서 yarn install
하는 것과 상황은 같기 때문에.비고: 환경
Reference
이 문제에 관하여(yarn upgrade로 업데이트할 수 없는 간접 종속 패키지만 업그레이드하려면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/uasi/items/ca440a750a77ca62321b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)