打包Node.JS应用程序的最佳方法是什么?基本上,我需要一个“安装程序”或“包”来:
解决方法
@H_301_11@ 你应该提供一个独立的包.请查看伟大的网站 The Twelve-Factor App,特别是 build,release,run部分.来自该网站的经验丰富的运营工程师有很多来之不易的智慧.>在您的应用程序的repo中,编写一个可生成可分发存档的脚本(shell,节点等)
> RPM或tar存档是您最明智的选择. tar更便携,更简单. RPM可以很好地与基于RPM的发行版集成.如果你没有做过很多软件包装/管理工作,我建议从tar开始. RPM比tar要复杂得多.
> tar存档应该在其中嵌入node.js文件.这将使您的应用程序易于安装,并避免共享系统范围的节点安装,从而创建人工耦合.如果你转到RPM路由,你可以在RPM spec文件中指定node作为依赖项(但你可能不应该 – 见下文).
>存档也应嵌入所有npm依赖项.不要在程序包安装时运行npm install.考虑使用npm shrinkwrap工具在开发期间管理依赖项,但在部署时,它们应预先捆绑并准备运行.
具体来说,这些是你应该避免的坏主意:
>安装过程中不要从Internet下载任何内容.这很脆弱,很慢,可能会给你带来不幸的惊喜,包括安全问题
>不要在可以在构建时构建的安装时构建工件.因此,预先构建CSS文件,requirejs优化文件,预编译二进制文件等.
至于您的应用程序RPM是否应将node.js列为依赖项或将节点嵌入到RPM中,以下是需要考虑的一些要点.
>将node.js嵌入RPM
>单个.rpm文件来分发
>允许您的应用程序严格控制它使用的节点版本. (见下文)
>更高的可靠性.事实上,您的app可能至少与您开发的node.js的次要版本(例如0.8.x)或甚至补丁版本(例如> = 0.8.12< 0.9)紧密耦合.最好允许node.js将您的应用与操作系统分离,但不要误以为您的应用程序可以在不同版本的node.js上可靠地运行而无需进行测试.调整.最常见的是,现在操作系统上只运行了1个应用程序,并且在应用程序之间共享节点的概念错误地通过适当的解耦和应用程序的操作独立性来限制磁盘空间的保留.
>目前尚不清楚yumland是否有任何官方/可靠的预制RPM将“正常工作”.
>将node.js指定为PRM的依赖项
>遵循操作系统包管理的一般原则(避免重复,节省磁盘空间等)> RPM提供超出TAR的功能,包括库存管理,卸载,升级等.由于您提出这个问题,您可能还没准备好正确解决这些问题,所以您可能希望从tar开始,一旦您对考虑RPM升级脚本等.>一旦您的应用程序开始使用数据库或3,支持电子邮件,日志聚合器等守护程序,“分发单个文件”的好点很快就会变得难以维持.