はじめに
ローカルのパッケージを追加するのに手こずったので、備忘録を残しておこうと思います。
環境と構成
環境
- yarn 3.3.0
構成
packages/
├ myLib/
└ myApp/
経緯
ローカルにある自作ライブラリのパッケージ(myLib)を、モジュール(myApp) yarn add
で追加した。
package.json
の dependencies
にはちゃんと追加されているのに、yarn install
でファイルが見つからないとエラー。
yarn build
も当然エラー。
node_modules
にも自作パッケージは含まれていない。
……というか、そもそも node_modules
にコピーはしてほしくない!シンボリックリンク(ジャンクション)を貼りたい!
そんな闘いの記録です。
add のオプションに何かないのか?
yarn add
のオプションで上手いこといかんのかと思い、yarn -h
で指定できるオプションを調べてみました。
その結果がこちら。
yarn add [--json] [-E,--exact] [-T,--tilde] [-C,--caret] [-D,--dev] [-P,--peer] [-O,--optional] [--prefer-dev] [-i,--interactive] [--cached] [--mode #0] ...
add dependencies to the project
どうもそれっぽいものはありません。
色々調べてみたところ、yarn add link:<myLibのパス>
でジャンクション貼れるよ!の記事を見つけたので、早速実行!
……ところが、以下のようなメッセージが表示されてしまいました。
Usage Error: The link:../myLib string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?
link:<myLibのパス>
は使えないらしい……。
yarnのバージョンの問題かもしれません。
とはいえ、何かしらジャンクションを貼る方法はあるはず!
もう一度 yarn -h
で使用できるコマンド・オプションを確認してみます。
link コマンドがあったぞ!
見つけました! link
コマンドが用意されています!
yarn link [-A,--all] [-p,--private] [-r,--relative] <destination>
connect the local project to another one
説明文にもまさにな内容が書かれています。
今回は相対パスでリンクを貼りたいので、オプションには -r
を指定してコマンドを実行!
正常にリンクが貼られ、その後の yarn install
も yarn build
もエラーなく実行できました!ヤッタゼ!
ついでに
リンクを剥がす場合は unlink
コマンドがあったので、それを使えばできるっぽい。
さいごに
link
のコマンドでジャンクションを貼れば、ファイルがコピーされて容量を圧迫することもないし、変更のたびにインストールしなおす必要もないので大変に助かる。
上手いこと活用していきたい所存。