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
を実行することで解決した。