chocotakaの日記

日々技術的な事で学んだ小さな事をを自分なりに書いていきます

npm installでのmodulesのバージョン指定でのハマり

npm install コマンドを叩いて package.json で管理されている modules 達をインストールします。

typescript を使っているのですが、バージョン2.4~ に上げてしまうとrxjs との互換性がまだできていなくエラーになってしまいます。

ローカル環境での typescript2.3.4 で使っているのですが、CircleCi上で npm install された時に 2.4.1 になってしまっていてエラーがどしゃーっと出てしまっていました。

ずっとなんでだろうと思っていたのですが、package.jsonでのバージョン固定をしていなかったのが原因でした。

typescript : ^2.3.4

となっていました。

^2.3.4 の 前に付いている ^。キャレット表記というらしいです。

一番左側にある、ゼロでないバージョニングは変えない (それ以下があがることは許容)

例えば

^1.2.3 = 1.2.3 <= version < 2.0.0
^0.2.3 = 0.2.3 <= version < 0.3.0
^0.0.3 = 0.0.3 <= version < 0.0.4

となってしまうので、 2.4.1 にバージョンが上がってしまっていたのでした。

対応としては ^ を外してしまうか shrinkwrap を使って、npm-shrinkwrap.json で記述されるバージョンで管理する方法があるみたいです。

補足

npm-shrinkwrapnpm@5になってから package-lock.jsonが生成されるようになり、不要となります。