使用弹性beanstalk部署复杂的node.js项目

我想知道什么是使用弹性beanstalk部署复杂node.js而不依赖于外部npm存储库的可用性(以及处理内部开发包的私有pipe理的git存储库的凭证和高可用性)的最佳实践。

它看起来像有一个思想stream派,实际上检查node_modules到实际部署的项目的源代码树。

来源1: http : //www.futurealoof.com/posts/nodemodules-in-git.html

来源2: http : //eng.yammer.com/managing-node-js-dependencies-and-deployments-at-yammer/

所以听起来像检查他们是正确的方法,但是对于一些编译的软件包存在不同的二进制格式的问题(在Mac上开发和部署到Linux)

我已经尝试过,因为大家build议(检查模块,除了bin文件夹),但即使如此,本地“npm重build”命令失败(它试图chmod bin文件夹中不存在的express.js模块中的东西)我甚至没有去尝试看看beanstalk默认的部署环境如何使用这样一个仓库。 我假设它运行“npm安装”(这将无所作为),但它会运行“npm重build”?

那么,再次,部署具有多个依赖关系的复杂项目的最佳实践是什么? 现在在node / beanstalk世界里,它一定是一个解决的问题,不是吗?

谢谢

这是我的configuration,你正在谈论的。 将其保存在.ebextensions文件夹中,您将被设置。 我和https://stackoverflow.com/a/23242623/34340中优越的答案之间的唯一区别是NPM_CONFIG_UNSAFE_PERM = true行,我从https://forums.aws.amazon.com/thread.jspa了解到? MESSAGEID = 534612

packages: yum: git: [] gcc: [] make: [] openssl-devel: [] libxml2: [] libxml2-devel: [] files: "/opt/elasticbeanstalk/env.vars" : mode: "000775" owner: root group: users content: | export HOME=/home/ec2-user # ADDED EXPORT COMMAND export NPM_CONFIG_LOGLEVEL=error export NPM_CONFIG_UNSAFE_PERM=true export NODE_PATH=`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin "/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh" : mode: "000775" owner: root group: users content: | #!/bin/bash . /opt/elasticbeanstalk/env.vars function error_exit { eventHelper.py --msg "$1" --severity ERROR exit $2 } #install not-installed yet app node_modules if [ ! -d "/var/node_modules" ]; then mkdir /var/node_modules ; fi if [ -d /tmp/deployment/application ]; then ln -s /var/node_modules /tmp/deployment/application/ fi OUT=$([ -d "/tmp/deployment/application" ] && cd /tmp/deployment/application && $NODE_PATH/npm install 2>&1) || error_exit "Failed to run npm install. $OUT" $? echo $OUT "/opt/elasticbeanstalk/hooks/configdeploy/pre/50npm.sh" : mode: "000666" owner: root group: users content: | #no need to run npm install during configdeploy