LoginSignup
19
14

More than 5 years have passed since last update.

yarnのselective dependency resolutions機能

Last updated at Posted at 2017-10-10

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

19
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
14