2014-04-09 92 views
35

我想讓Heroku在推送後構建我的應用程序,這樣我就不必每次更改時都要將構建文件夾向上推。然而,heroku只安裝package.json和grunt(我的構建工具)的依賴關係,其所有組件都在devDependencies中。我想讓他們留在他們所屬的地方。這裏有什麼解決方法?在Heroku上安裝devDependencies

+1

你可以使用這樣的自定義buildpack嗎? https://github.com/gcpantazis/heroku-buildpack-php-gruntjs – catsby

回答

63

Heroku默認只安裝生產依賴關係,忽略devDependencies下的開發依賴關係。

設置NPM生產變量false做的伎倆:

heroku config:set NPM_CONFIG_PRODUCTION=false 

更多信息可在Heroku Node.js Support page

+2

這將您的NODE_ENV設置爲開發,這可能會減慢您的應用程序。 – unblevable

+6

@unblevable我不這麼認爲:''' ----->的Node.js應用檢測 ----->創建運行環境 NPM_CONFIG_LOGLEVEL =錯誤 NPM_CONFIG_PRODUCTION =假 NODE_ENV =生產 NODE_MODULES_CACHE = true ''' – bithavoc

+2

我做了heroku配置:設置NPM_CONFIG_PRODUCTION = false和retarted dyno和開發依賴關係仍然不會安裝 – Lev

2

KeepingNPM_CONFIG_PRODUCTIONtrue,我用Heroku's script hooks

"scripts": { 
    ... 
    "heroku-prebuild": "export NPM_CONFIG_PRODUCTION=false; export NODE_ENV=; NPM_CONFIG_PRODUCTION=false NODE_ENV=development npm install --only=dev --dev", 
    "heroku-postbuild": "export NPM_CONFIG_PRODUCTION=true; export NODE_ENV=production;", 
    ... 
}, 

(最後)爲我工作。

1
scripts": { 
    ... 
    "heroku-prebuild": "npm install --only=dev" 
} 

這對我來說已經足夠了。感謝PixnBits提供有關heroku-prebuild的提示。 另外 - 我的問題是與巴貝爾。我最終將babel-preset-es2015和其他預設置爲依賴項,否則babel會抱怨預置。

更新:8/11/2017我一直有這個麻煩。看起來事情已經改變了(現在npm已經在5.3了)。但是我看到的是,heroku-prebuild腳本正在運行,然後安裝後的腳本正在運行(但我只是試圖安裝-dev)。

所以,我一直在做的作品是剛剛運行:

heroku config:set NPM_CONFIG_PRODUCTION=false 

而只是把它設置的方式。我想要一個更好的解決方案。