Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9330

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

$
0
0

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

https://travis-ci.com/github/mobilusoss/textlint-browser-runner/jobs/403527216

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


Viewing all articles
Browse latest Browse all 9330

Trending Articles