package.jsonで値を展開する

2018 / 01 / 04

Edit
🚨 This article hasn't been updated in over a year
💁‍♀️ This post was copied from Hatena Blog

🎍 今年初の記事です 🎍

そういえばこんな機能あったなーって感じだったので記事にしてみました。

本当は今年最初の記事用意していたのですが、まだ終わってないので後ほど。。

今回は、タスクの start と build に同じ変数を webpack へ渡すために共通化したくて、量が多くなってきたのでリファクタリングしました。

手順

$npm_package_に package.json に書いた key をつなげるとそれの value 展開されます。

コンソール上では、展開されませんが、JS 上では展開されます。

// 確認用のJS
console.log(process.argv[2]);
$ npm run main
> node main.js $npm_package_foo

bar

文字列の場合

{
  "foo": "bar",
  "scripts": {
    "main": "node main.js $npm_package_foo"
  }
}

オブジェクトの場合

オブジェクトを渡すことはできないので、末端まで指定する必要があります。

{
  "foo": {
    "bar": 1
  },
  "scripts": {
    "main": "node main.js $npm_package_foo_bar"
  }
}

もし、$npm_package_fooと書いた場合は、undefinedとなります。

配列の場合

配列を渡すことはできないので、添字を指定する必要があります。

{
  "foo": ["bar"],
  "scripts": {
    "main": "node main.js $npm_package_foo_0"
  }
}

もし、$npm_package_fooと書いた場合は、undefinedとなります。

まとめ

  • $npm_package_というプレフィックスが使える
  • 必ず値はプリミティブでなければなりません