最近、Node.js の複合パッケージ向けのコードベース管理ツールである、lerna を使っているので、その備忘録。
随時更新。

npm install をしてはいけない。

ついやりたくなるが、個別のパッケージディレクトリで引数なしの npm install をしてはいけない。かならず lerna bootstrap を使う。ちなみにこのコマンドはルートディレクトリでなくても実行できる。

lerna は同じリポジトリ内のパッケージ参照に対してシンボリックリンクを利用して node_modules を形作るため、通常のコマンドを使うとそれが破壊されてしまう。

コマンドラインツールをルートにインストールしてはいけない

lerna のよいところは共通の開発用のパッケージをルートディレクトリの node_modules にまとめてつっこめることだ(いうまでもないが devDependencies にかぎる)。

しかし、コマンドラインツールに対してこれはできない。正確に言うと、npm scripts(prepublish や test)で呼び出したいものはできない。それらは require と異なり、上位のディレクトリの node_modules を参照しないためだ。

よって、gulp などのタスクランナー、webpack などのモジュールバンドラー、babel や typescript などのトランスパイラをルートにインストールすると残念な結果を招く。

lerna add で全部にインストールしよう。ちなみに対象のパッケージを限定したい場合は --scope=<package-name> オプションをつければいい。

逆にいうと、prettier のように最上位のディレクトリでしか実行しないものや、gulp のプラグイン化されたものは問題なく使える。1

npm uninstall 相当がない

そんなはずはないと思うのだが、lerna add はあるのに lerna remove がない。だれか教えてほしい

いまは package.json から直接該当行を削除して、lerna clean を実行している。


  1. むしろエディタ/IDE の機能によってはルートに入れないと動作しないかもしれない。 

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.