面倒なので`npm init`を実行しない


Node.jsのモジュールを使おうとWebで検索すると大抵のページでよく「npm initを実行する」と書いてある。

しかしいろいろ聞かれてめんどくさい。ただclaspとかtscとかを使いたいだけなのに…
※Enterキーを押し続ければいいだけなのは分かった上で。

ということでnpm initを実行しないでできないか試してみた。

TL;DR

echo {"private":true}> package.json

ただし、Windowsのコマンドプロンプト上で。Linux/MacOSなら

echo '{"private":true}' > package.json

作成したモジュールを公開するつもりがないなら
npm initを実行しなくてもこれだけで十分(多分)。

何もしない

まずはnpm initの実行も何もしないで、いきなりnpm installしてみる。

> npm install typescript 
npm WARN saveError ENOENT: no such file or directory, open '~\package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '~\package.json'
npm WARN ~ No description
npm WARN ~ No repository field.
npm WARN ~ No README data
npm WARN ~ No license field.

+ [email protected]
added 1 package from 1 contributor and audited 1 package in 0.619s
found 0 vulnerabilities

当然のことながらpackage.jsonがないのでエラーが出ている(警告扱いになっているけど)ものの
インストール自体は成功したようだ。

しかし、このままだとほかのモジュールをインストールしたときに、また同じ警告が出ることになる。

結論: ボツ

空のpackage.json

次に、空のpackage.jsonを作成してからnpm installしてみる。

> echo;> package.json
> npm install typescript
npm ERR! code EJSONPARSE
npm ERR! file ~\package.json
npm ERR! JSON.parse Failed to parse json
npm ERR! JSON.parse Unexpected end of JSON input while parsing near ''
npm ERR! JSON.parse Failed to parse package.json data.
npm ERR! JSON.parse package.json must be actual JSON, not just JavaScript.

npm ERR! A complete log of this run can be found in:
npm ERR!     ~-debug.log

空っぽだとJSONのシンタックス的におかしいのでエラーが出ている。
このためエラーという扱いでインストールにも失敗している。

結論: ボツ

空のオブジェクトのpackage.json

JSONのシンタックス的にOKな状態にすれば良いのかということで{}にしてみる。

> echo {}> package.json
> npm install typescript
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN ~ No description
npm WARN ~ No repository field.
npm WARN ~ No license field.

+ [email protected]
added 1 package from 1 contributor and audited 1 package in 0.662s
found 0 vulnerabilities

package.jsonがないときにも出ていた警告がいくつか出てる。
指定するべきフィールドが不足しているようだ。

npm package.json 取扱説明書より

  • description
    説明を文字列で記述します。
    npm search で表示されるので、人々があなたの作ったパッケージを見つけ、理解するのに役立ちます。
  • repositry
    ソースコードが管理されている場所を指定します。ソースコードに関与したい人々に とってそれは助けとなるでしょう。
    もし github 上の git リポジトリであれば npm docs コマンドでそのパッケージが発見可能になります。
  • license
    パッケージユーザーが使用許諾とあなたの指定している禁止事項を知る為にパッケージのライセンス情報を指定します。

やはり、このままだとほかのモジュールをインストールしたときに、また同じ警告が出ることになる。

結論: ボツ

"private": trueを指定する

警告が出ているフィールドはどれもパッケージを公開するつもりがなければ必要がない。
ということでprivatetrueを指定してみる。

npm package.json 取扱説明書より

  • private
    "private": true を package.json に設定しておくと、publish コマンドを拒否します。

…あまり警告が出なくなることについての説明になってなかった。

descriptionほかはpublishコマンドによってパッケージを公開する際に必要になるフィールドなので
その他のコマンドでもこれらのフィールドについてのチェックがスキップされるらしい。

> echo {"private":true}> package.json
> npm install typescript
npm notice created a lockfile as package-lock.json. You should commit this file.
+ [email protected]
added 1 package from 1 contributor and audited 1 package in 0.642s
found 0 vulnerabilities

警告が出なくなった。
モジュールをnpmで公開するつもりがなければ、これで十分なんじゃないだろうか?

というわけでこれを採用!!