使用 heroku-buildpack-nodejs 时,也会执行 npm install 命令安装 devDependencies
在Heroku的Node.js构建包(heroku-buildpack-nodejs)中,通常只会安装dependencies而不会安装devDependencies。
换句话说,它们会通过使用–production选项来安装。
(严格来说,似乎有通过环境变量进行控制,但我没有调查清楚详细情况)。
总结
只需要指定以下环境变量即可。
NPM_CONFIG_PRODUCTION=false
听说,以NPM_CONFIG_开头的环境变量在npm中被视为配置参数,据说这和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。
我觉得可以不特别在依赖项上指定,只是这样而已。