2013-12-21 88 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服务器