LoginSignup
26
14

More than 5 years have passed since last update.

Lerna はまりポイント

Posted at

最近、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 の機能によってはルートに入れないと動作しないかもしれない。 

26
14
4

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
26
14