LoginSignup
54
40

More than 5 years have passed since last update.

そのプロジェクト、npmのバージョン固定できてる?

Last updated at Posted at 2018-05-23

思い込み

「nodeとnpmのバージョン固定とかなにを今更…(苦笑)
ndenvでnodeを固定しとけば、npmもできてんでしょ」
…って思ってた時期が僕にもありました。。

※下部に追記有り

問題

$ cat .node-version
v8.11.1
$ which npm
/Users/username/.anyenv/envs/ndenv/shims/npm
$ npm -v
5.6.0
$ npm i -g npm@6.0.1
$ npm -v
6.0.1
$ which npm
/Users/username/.anyenv/envs/ndenv/shims/npm

😇 …こんな感じでカンタンに書き換えが可能です。
チームで開発してたら大問題ですね⤵️

「…でも、どうやってnpmを固定するんだろう??」
と悩んでいたら、同僚に教えてもらいました。

要は、engineを指定すれば良いようです。🍻

解決

package.json
"engines": {
  "node": "8.11.1",
  "npm": "5.6.0"
},

.npmrc

.npmrc
engine-strict=true

こうしておくことで、 $ npm i の際にengineを確認して、バージョンの問題があった場合はインストールさせないようです🎉️
周知は必要ですが、npmのバージョン固定という目的は解決できそうです!

ちなみに自分は、anyenv(=>ndenv)を使ってnodeのversion固定しています。今回の記事にあまり関係無いですが、env系とかを複数使ってる人には便利なのでオススメです。


[追記]つづき

UPDATE: 2018/06/01

「npm固定できたから、やっと思い通り動くわー」

と思ってたのも束の間…

brewでherokuコマンド更新したら、ご丁寧にnpmまでインストールしてくださいました😇
そしてそのnpmは↑でバージョンを固定できない悪魔的な挙動で詰んだ。。

…で、悩んでて思いついたんだけど、 npx ならどのバージョンつかってもnpmを固定できるんじゃないか?と考えて試したらいけた。

$ which npm
/usr/local/bin/npm 
$ npx which npm
/Users/username/.anyenv/envs/ndenv/shims/npm
$ npx npm run hoge // ←これだと、ndenvで設定したnpmで起動できる。

UPDATE: 2018/06/20

brewを使ってる場合は、PATHをbrewよりもndenvの方を優先しておく。
参考: https://qiita.com/n-oshiro/items/3c571a4fcdb023b1fe77

54
40
0

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
54
40