npm init しないとどうなる?


はじめに

package.json がないときに npm init せずに、いきなり npm install したらどうなるのか気になったので、以下の2通りで試してみました。

1. npm init せずに npm install した場合
2. npm init せずに npm install <package> した場合

結論

結論から先にいうと npm init しなくても npm install に失敗するわけでもないし、引数にパッケージを指定すれば node_modules が作成されてパッケージのインストールにも成功しました。

なので、エラーになるということはありませんし、パッケージも普通にインストールされます。

一見、問題ないように思いますが、package.json が作成されないため、どのパッケージをインストールしたかの記述がどこにも記されす、node_modules の内容を管理するのは難しくなります。

一方で、package-lock.json は作成されますが、package-lock.json にはインストールしたパッケージの結果のみが記されて、パッケージの依存関係まではわからないので、やはり package.json はソースを管理する上で必要になります。

なので、package.json がなければ npm install する前に npm init で package.json を作成すべきでしょう。

実際にやってみた

動作環境

# Node.js のバージョン確認
$ node -v
v14.13.1

# npm のバージョン確認
$ npm -v
6.14.8

1. npm init せずに npm install した場合

# 何もない空のディレクトリ
$ ls
(標準出力なし)

# npm install の実行
$ npm install

# package-lock.json のみが作成される(package.json は作成されない)
$ ls
package-lock.json

# 中身は lockfileVersion のみの記述でパッケージ情報はありませんでした(当たり前)
$ cat package-lock.json 
{
  "lockfileVersion": 1
}

2. npm init せずに npm install <package> した場合

# 何もない空のディレクトリ
$ ls
(標準出力なし)

# cowsay パッケージをインストール
$ npm install cowsay
+ [email protected]

# package-lock.json と node_modules が作成されるが package.json がない
$ ls
node_modules
package-lock.json

さいごに

package.json がなければ npm install する前に npm init で package.json を作成すべきです。