LoginSignup
1
0

More than 3 years have passed since last update.

yarn workspaceで同一workspace内のパッケージを追加するときの注意点

Last updated at Posted at 2020-01-09

yarnのworkspaceでモノレポしてる時に、workspace内のパッケージから同一workspace内のパッケージを追加しようとしたら、少し意図せぬ動きをしたのでメモ書き。

具体的には、add時にバージョン指定するとローカルのものが使われて、バージョン指定しないとnpmのサーバに取りに行く(ローカルはみない)動きになるみたい。

どうやら下の現象みたい。
https://github.com/yarnpkg/yarn/issues/4878

環境

yarnのバージョンはこれ

$ yarn -v
1.21.1

ファイル構成

こんな感じ

$ ls -R
package.json  packages/

./packages:
common/   test-app/

./packages/common:
package.json

./packages/test-app:
package.json
package.json
{
  "private": true,
  "version": "0.0.0",
  "workspaces": [
    "packages/*"
  ],
  "license": "MIT"
}
packages/test-app/package.json
{
  "name": "test-app",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {}
}
packages/common/package.json
{
  "name": "common",
  "version": "1.0.0",
  "license": "MIT"
}

事象

前述の環境で、以下のコマンドでtest-appにcommonを追加してみる。

$ yarn workspace test-app add common
yarn workspace v1.21.1
yarn add v1.21.1
info No lockfile found.
[1/4] 🔍  Resolving packages...
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
[4/4] 🔨  Building fresh packages...
success Saved lockfile.
success Saved 1 new dependency.
info Direct dependencies
info All dependencies
└─ common@0.2.5
✨  Done in 0.38s.
✨  Done in 0.67s.

commonはnpmに上がっている方のcommonが利用されている…(https://www.npmjs.com/package/common)

今度は、バージョン指定ありでcommonをインストールしてみる。

$ yarn workspace test-app add common@*
yarn workspace v1.21.1
yarn add v1.21.1
[1/4] 🔍  Resolving packages...
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
[4/4] 🔨  Building fresh packages...
success Saved lockfile.
success Saved 1 new dependency.
info Direct dependencies
info All dependencies
└─ common@1.0.0
✨  Done in 0.12s.
✨  Done in 0.41s.

今度はローカルにある方のパッケージが追加されている。
一度消して、再度インストールしてみても同じ。

$ rm -rf node_modules 
$ yarn install
yarn install v1.21.1
[1/4] 🔍  Resolving packages...
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
[4/4] 🔨  Building fresh packages...
success Saved lockfile.
✨  Done in 0.11s.
$ yarn list
yarn list v1.21.1
├─ common@1.0.0
└─ test-app@1.0.0
   └─ common@*
✨  Done in 0.07s.

ちなみに、ローカルのパッケージをインストールした時は、yarn.lockファイルは更新されないみたい。

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


結論

yarnでworkspace使ってる時に依存関係でローカルのパッケージを追加したいときは、バージョン指定する!
そもそも公開する予定の無いパッケージでも事故を防ぐためにnpmに登録されているものとは別の名前を使っといた方が良さそう。

あ、あと、yarn workspaceコマンドで指定するworkspace名はパッケージの名前なので注意。

1
0
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
1
0