コンテナ環境で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
npmとNode.jsのバージョン関係はここで確認できたけど
なんかずれてますね。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サービス作るときに面倒なことになりそう。(まぁコンテナ分けちゃえば何とかなるか)