Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
12
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@sakymark

yarnのselective dependency resolutions機能

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

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
12
Help us understand the problem. What are the problem?