はじめに
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
+ cowsay@1.4.0
# package-lock.json と node_modules が作成されるが package.json がない
$ ls
node_modules
package-lock.json
さいごに
package.json がなければ npm install
する前に npm init
で package.json を作成すべきです。