LoginSignup
1
1

More than 3 years have passed since last update.

npm v7で`npm ci`後にプロジェクト自身の`postinstall`が実行されなくなった

Posted at

2020-10-20にリリースされたNodeJS 15系からnpmはV7になっている。
https://nodejs.org/en/download/releases/

TravisCIで特定のバージョンを指定せず node 指定していた場合、
2020/12/23時点でがインストールされる。

$ node --version
v15.0.1
$ npm --version
7.0.3
$ nvm --version
0.36.0

TravisCIのライフサイクルにおいてインストール時には npm ci が用いられる。
このとき、npm v6以前では npm ciの完了後、そのプロジェクトのnpm postinstall が実行されていたが、
v7からはこれが実行されなくなった。
[BUG] npm ci doesn't run postinstall script #1905 というチケットが作成されているが、バグではない模様。

もともと postinstall はそのプロジェクトがライブラリとして別のプロジェクトにインストールされた際に実行されることを想定して、そのプロジェクト自身の npm install (あるいは npm ci)が実行された後に実行される挙動が誤っていたと理解している。


この挙動が変わったことによってこんな問題が発生した。
lerna で管理していたプロジェクトにおいて

 "postinstall": "lerna bootstrap",

といった感じで子パッケージの依存モジュールをインストールしていたときに、ルートにあるpackage.jsonに定義してあるモジュールはインストールされるが、子パッケージのpackage.jsonに記載されている内容はTravisCI上でインストールされない。

そのため後続のテストライフサイクルにおいて実行される、lerna run test で各子パッケージのtestスクリプト実行時に依存モジュールが存在しないので mocha: not found となってテストが落ちることになった。

TravisCI上の問題に対しては、postinstall ではなく手動で lerna bootstrap実行することで解決した。

1
1
1

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
1
1