npmとNode.jsのバージョンがずれたら?

docker logo

コンテナ環境でnpmを使いたかったので、npmをインストールしたら訳が分からないことになったのでまとめました。

経緯

使ったコンテナはphp:7.4-fpmで、とりあえず以下のような感じで起動

# docker run -it --rm php:7.4-fpm bash

コンテナ内で

# node -v
bash: node: command not found
# npm -v
bash: node: command not found

ふむふむ、ないんだ。ということでapt-getで更新欠けてインストール

#apt-get update
#ゆ
中略
The following packages will be upgraded:
  libssl1.1
1 upgraded, 269 newly installed, 0 to remove and 13 not upgraded.
Need to get 18.9 MB of archives.
After this operation, 78.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

npmってなんかいろいろ使うんですね。というか、nodeとかpython2.7とか使うんだ…。
python2.7とか今更入れたくないんだけど、しょうがないからインストール
とりあえず確認で・・・

#npm -v
5.8.0

よし入った。じゃあさっそく使ってみようか

#npm init
npm init
npm WARN npm npm does not support Node.js v10.21.0
npm WARN npm You should probably upgrade to a newer version of node as we
以下略

なんかいきなりワーニングに…?入ってるNode.jsのバージョンがあっていないっぽい感じ。いやいや、お前が入れたんじゃん。
最新版に変更しよう

試行錯誤

とりあえず、バージョン確認

#node -v
v10.21.0
apt-getで入ったやつが古いのかな?でも‥うーん。
npmとNode.jsのバージョン関係はここで確認できたけど
Node.js — Node.js Releases
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

なんかずれてますね。npmが古すぎる?

npmで自信を更新する方法があったので試してみたけど

# npm install -g npm
# npm -v
5.8.0

変わらんじゃないか~い。

※注)後で試したら実はここでちゃんと6.14.9になってました。いったんログアウトしないと書き変わってなかったみたいです。これでうまくいかなかった人のために、一応下記の方法も残しておきます

できれば全部最新にしたいけど、npmのバージョン上げるかな?
ということでバージョンを確認すると、6.14.4にすればいいということが判明。
Node.js 10.21.0 Dubnium 2020-06-02 6.8.275.32 6.14.4
というか、表には5.8系列がないんですが、これはい一体??
こんな感じでバージョン指定してインストールができます。

#npm install npm@6.14.4
(略)
Run `npm i npm@latest -g` to upgrade your npm version, and then `npm audit` to get more info.
(略)

なんかコマンドをうってアップグレードしろとか書いてあるので一応する

# npm i npm@latest -g

一回ログアウトしないと更新されないようなので、ログアウト…
すると、今回の設定ではコンテナが消えちゃうので他のコンソールからログインしてバージョンを確認

# npm -v
6.14.9

お、更新されてる。
npm initしてもワーニングは出なくなりました。

課題

最新版にするにはどうするのがベストなんだろうか?
OSで入っているNode.jsはaptで入れてるのでnpmでNodeJSインストールしてもカレントディレクトリにインストールされちゃうんですよね?
aptでパッケージ管理してるんだから、そもそもnpmで本体を更新するのは筋違いのような気がするけど。

まとめと愚痴

これだからDockerは信用ならないんだよな。得体のしれないベースOSの上で動いててちゃんとメンテされてない?から目的のもの以外の動作が非常に不安。
ちなみにOSを調べてみたら

cat /etc/debian_version 
10.7

でした。Debianなんだ。しかも2020年12月リリースだから出たばっかりの奴ですね。どういう類のバージョンかわからんけど、安定板を使ってほしい。Node.jsもLTSバージョンみたいだけど、2つ前のやつだからさすがに古いよな...。
あと、npmって今まであんまり使ってこなかったんだけど、やっぱりあまり使いたくないなぁ。
Node.jsとかpythonとかを入れないといけないのがいただけないですよね。PythonでWebサービス作るときに面倒なことになりそう。(まぁコンテナ分けちゃえば何とかなるか)

タイトルとURLをコピーしました