7cc@はてなブログ

JavaScriptとかとか

.npmrcの設定はハイフン(-)かドット(.)か

デフォルトはハイフンです。なのになぜかドットでも npm init したときにはきちんと参照されます。
そのためかドットを使った .npmrc の紹介記事が散見されます。

<追記>
npm 公式でも ハイフンとドットが混在していました。統一したほうが良いのでは…?

</追記>

$ # npm config set init-license MIT ホントはこっち
$ npm config set init.license MIT
# .npmrc
# init-license=MIT
init.license=MIT

ハイフン・ドット両方ある場合には後のものが優先されます。

ドットを使った場合の問題点

npm init 以外では両者は別のものとして扱われます。
以下はドットのみ設定した場合です。

ターミナルからは npm config get で設定を確認できます。

$ npm config get init.license
MIT

$ npm config get init-license
ISC

ハイフンを使った init-license の方はデフォルトの設定が参照されていることが分かります。


また、.npmrc の設定はスクリプトから読み込むこともできますが、 こちらもドットがハイフンに変換されずにそのままになります。

.npmrc の読み込み方は

  • ~/.npm-init.js からは config.sources
  • 他のスクリプトからは require("npm").load((err, npm)=> console.log(npm.config.sources))

で出力結果はこのようになります。

config.sources =
  ...
  user: {
    ...
    data: {
      'init.license': 'MIT',    // ドットで設定したよ
      'init-version': '0.0.1',  // ハイフンで設定したよ
      color: 'always',
      ...
    }
  }

そのためユーザー設定を読み取る際にはドットとハイフン両方対応する必要があります。

実際に問題になるケースは限られると思いますが、 わざわざドットを使う理由がないのでハイフンを使いましょう。