Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
14
Help us understand the problem. What is going on with this article?

More than 3 years have passed since last update.

@karak

Lerna はまりポイント

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

14
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
14
Help us understand the problem. What is going on with this article?