最近、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
を実行している。
-
むしろエディタ/IDE の機能によってはルートに入れないと動作しないかもしれない。 ↩