2013-12-21 87 views
10

當我將代碼推送到OpenShift時,看起來它正在安裝我的devDependencies,它永遠需要。我真的很喜歡設置它,所以它只會安裝dependencies(通過使用--production標誌運行)。有沒有辦法做到這一點?在OpenShift上運行npm install --production

回答

16

通過將NPM_CONFIG_PRODUCTION環境變量設置爲「true」,可以使用--production標誌告訴npm安裝。

這裏是應該對現有應用程序的示例:

rhc env set NPM_CONFIG_PRODUCTION="true" 

或者,你可以把這個變量作爲您最初的應用程序創建步驟的一部分:

rhc app create myapplication nodejs-0.10 NPM_CONFIG_PRODUCTION="true" 
+0

這是新的嗎?我從未在任何地方看到過...... – kentcdodds

+0

它在Openshift文檔中有說明:https://developers.openshift.com/en/node-j.s-environment-variables.html。 此外,它的工作! –

+0

使用命令的選項形式,它是'rhc app create -a myapplication -t nodejs-0.10 --env NPM_CONFIG_PRODUCTION =「true」'。 –

2

看起來唯一的解決方案是更新墨盒本身。 npm install命令位於盒式磁帶的bin/control文件夾中。同時,它已在originating github repo at wshearn/openshift-origin-cartridge-nodejs中修復,因此您只需從github安裝而不是使用快速入門。

+0

謝謝你的提示安裝約翰。我在github回購中看到那個命令發生的地方。不幸的是,我使用快速入門安裝,沒有bin /控制文件。你不知道我可以在快速入門中做出改變嗎? – kentcdodds

+0

我不確定這是官方回購。看來目前在RHcloud.com上使用的代碼是https://github.com/openshift/origin-server/tree/master/cartridges/openshift-origin-cartridge-nodejs;它確實[嘗試設置NODE_ENV =生產](https://github.com/openshift/origin-server/commit/97124748e41d01ace67df931908755f84ecfdbae),但我仍然看到devDependencies安裝。 –

3

找到了一種方法在源代碼中而不是在創建應用程序時指定它。 對env var的好處是,它適用於啓動應用程序的所有方式,包括「在OpenShift上啓動」按鈕。

創建.openshift/action_hooks/pre_build文件:

#!/bin/bash 
# This makes npm not install devDependencies. 
echo 'Enabling npm production' 
echo 'production = true' >> $OPENSHIFT_REPO_DIR/.npmrc 

這就是它!我已經測試過,它確實會影響這個構建的npm,如果將來刪除這個鉤子,那麼.npmrc會消失。

(很顯然,我也可以通過簡單地增加一個.npmrc到我的回購實現這一點,但做要影響人們檢查出的來源和運行npm install,它只能是如何工作的OpenShift。)

2
  1. 創建一個.npmrc文件,其中node_modules文件夾位於。

  2. text-editor打開它,將它添加到它:

    production = true

附:沒有分號或其他字符

這將確保devDependencies不會在OPENSHIFT服務器