Node.js-部署Node.js应用程序时是否需要在生产服务器上重新安装所有模块

Node.js-部署Node.js应用程序时是否需要在生产服务器上重新安装所有模块,node.js,production,Node.js,Production,我已经开发了我的第一个Node.js pp。现在,它就放在我的笔记本电脑上 在开发过程中,我必须安装一些模块: npm install socket.io npm install mysql@2.0.0-alpha3 npm install iniparser npm install js-yaml npm install nodemailer 我已经安装了所有这些“每个项目”,而不是全球 我的项目目录如下所示(我的代码都在push_server.js中): 现在我想把这个项目推送到生产服务器

我已经开发了我的第一个Node.js pp。现在,它就放在我的笔记本电脑上

在开发过程中,我必须安装一些模块:

npm install socket.io
npm install mysql@2.0.0-alpha3
npm install iniparser
npm install js-yaml
npm install nodemailer
我已经安装了所有这些“每个项目”,而不是全球

我的项目目录如下所示(我的代码都在push_server.js中):

现在我想把这个项目推送到生产服务器上

我的问题是:我可以上传整个代码库(包括已安装的模块),还是只上传应用程序的代码,然后在服务器上逐个重新安装模块

注意:我的开发机器运行Ubuntu 10.04,生产服务器运行CentOS 5.3

我认为所有这些模块都是由js文件组成的,因此应该是正确的。
但是,npm安装的模块是否可能在本地计算机上编译某些代码,因此该代码可能无法在另一台计算机上工作。另外,我如何知道模块是否会这样做

希望这个问题不要太傻-我刚刚开始使用Node.js


谢谢。

如果可能,您一定要复制
node\u模块

如果在服务器上重新下载,则可能会得到使用中的模块版本稍有不同。即使您需要严格的模块版本X,该模块也可以与其他模块Y Z具有通配符依赖关系。这意味着,如果Y被更新并发布到服务器,它现在将使用不同于您用于本地测试和验证的Y代码运行


在某些情况下,您甚至可能在部署时没有可用的所需模块,因为作者出于任何原因决定取消发布包。

我始终尝试使用所需模块的最新版本。Node.js还很年轻,每当更新模块时,它通常会带来错误修复、速度提高等。我在本地安装模块,在它们上测试代码,最后在生产中使用它们。当您使用
npm安装模块--save
安装它们时,它们会自动添加到
package.json
文件中,作为
依赖项

使用
git
进行版本控制和部署,我通常将
node\u modules
文件夹放入我的
.gitignore
文件中。因此,它不会上载到我的服务器。在服务器上,只需运行
npm install
即可安装所需的所有模块,这比逐个安装要快得多


此工作流也被使用。

这些都是很好的要点。但是如果一个模块在安装过程中编译了代码,那么代码就不可移植了?可能吗?“我想他们中的一些人是这样的,”丹说,“这是一个很好的观察结果。一些模块对此进行了说明。我只是习惯于在与生产相同的平台上进行开发测试。在这种情况下,您别无选择,只能在生产环境中重新安装它们,或者引入一个与生产环境服务器具有相同平台的测试暂存服务器。是的,实际上我在与生产环境相同的体系结构上进行暂存……但这仍然是一个难题,因为我希望开发人员机器运行任何Linux发行版。如何判断某个模块是否编译了任何软件?不幸的是,在“node_modules”目录下运行“tree”,我可以看到一些.c和.h文件-不太好,不是吗?是的,这看起来会导致问题。为此,我会选择构建和测试阶段服务器,但这实际上取决于系统的稳定性要求。如果它偶尔失败是可以的,你就不需要太麻烦了。:)
|
|--- push_server.js
|
|--- node_modules
     |--- iniparser
     |--- js-yaml
     |--- mysql
     |--- socket.io
     |--- nodemailer