Help us understand the problem. What is going on with this article?

yarnのselective dependency resolutions機能

More than 1 year has passed since last update.

yarn v1.0.0で追加された機能

何ができるか

dependency graphの完全なコントロールが可能になる

  • package.jsonとyarnだけでコントールする
  • 自分が使ってるnpm pkgが依存してるpkg(dependencies of dependencies)のversionを指定してインストールできるようになる。
➜  material-ui git:(master) npm outdated
Package                       Current         Wanted  Latest  Location
babel-eslint                    7.2.3          7.2.3   8.0.1  material-ui-build
babel-loader                    6.4.1          6.4.1   7.1.2  material-ui-build
chai                            3.5.0          3.5.0   4.1.2  material-ui-build
coveralls                      2.13.3         2.13.3   3.0.0  material-ui-build
cross-env                       4.0.0          4.0.0   5.0.5  material-ui-build
enzyme                          2.9.1          2.9.1   3.1.0  material-ui-build
eslint                         3.19.0         3.19.0   4.8.0  material-ui-build
fs-extra                        2.1.2          2.1.2   4.0.2  material-ui-build
istanbul                1.1.0-alpha.1  1.1.0-alpha.1   0.4.5  material-ui-build
jsdom                          9.12.0         9.12.0  11.3.0  material-ui-build
mocha                           3.5.3          3.5.3   4.0.1  material-ui-build
react                          15.6.2         15.6.2  16.0.0  material-ui-build
react-dom                      15.6.2         15.6.2  16.0.0  material-ui-build
react-test-renderer            15.6.2         15.6.2  16.0.0  material-ui-build
react-transition-group          1.2.1          1.2.1   2.2.1  material-ui-build
sinon                           3.3.0          3.3.0   4.0.1  material-ui-build
webpack                        1.15.0         1.15.0   3.6.0  material-ui-build
  • material-uiが依存するreact-transition-group では 1.2.1が指定されてるが、最新版の 2.2.1 がインストールされるように変更できる
  • yarn.lock も更新される

使い方

"resolutions": {
    "material-ui/react-transition-group": "2.2.1"
}
  • package.jsonresolutions フィールドを追加し、上書きしたい依存パッケージを指定する
  • /でネストの深さが表され、glob patternもちょっとだけサポートしてる
    • some-middle-ware/**/request

使いどころ

  • 依存パッケージの依存パッケージ(、の依存パッケージ・・・・)が原因でエラーを吐くようになったが、すでにそのモジュールではパッチがリリースされてる場合
    • react-nativeでmetro-bundlerのversionを変える
    • UIライブラリが依存してるmoment.jsのversionを変えたいとき

スコープ外のこと

  • いわゆるleftpad問題
    • dependencies treeのどっか深いとこにあるモジュールが、npm registoryからunpublishされてしまってるケース
    • こっちは別ソリューション必要
    • expo.ioがやってるようなscoped packageにコピーをホストしてunpublished対策するとか
    • @expo/vector-icons

そのうちしらべる

代替ソリューション

resources

sakymark
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした