heroku-buildpack-nodejs
では通常 dependencies
だけが npm install
され、devDepencies
はされない。
つまり --production
オプションでインストールされる。
(厳密には環境変数で制御しているように見えるけど詳細は調べ切れていない)
結論
以下の環境変数を指定すれば良い。
NPM_CONFIG_PRODUCTION=false
NPM_CONFIG_
で始まる環境変数は npm
では configuration parameter
として扱われるようで、これで npm install --production=false
と同じになる、ということらしい。
https://github.com/npm/npm/blob/master/doc/misc/npm-config.md
通常は NODE_ENV
でも制御できるが、Buildpack 内で NPM_CONFIG_PRODUCTION
がデフォルトで true
になっていて、そっちが優先されていた。
何故これが必要だったか
browserify-rails
を使って Rails アプリを使っていたところ、デプロイ時に node_modules/.bin/browserify
が見つからないよ、というエラーが起きた。
BrowserifyRails::BrowserifyError: Unable to run node_modules/.bin/browserify. Ensure you have installed it with npm.
/tmp/build/vendor/bundle/ruby/2.2.0/gems/browserify-rails-3.1.0/lib/browserify-rails/browserify_processor.rb:77:in `ensure_commands_exist!'
/tmp/build/vendor/bundle/ruby/2.2.0/gems/browserify-rails-3.1.0/lib/browserify-rails/browserify_processor.rb:30:in `call'
browserify
はなんとなく devDependencies
の方に指定していたが、そのままだと browserify
がインストールされずにビルドに失敗するというもの。
別に割り切って dependencies
の方に指定する、でもいい気はする。