我已经开发了我的第一个 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 中):
|
|--- push_server.js
|
|--- node_modules
|--- iniparser
|--- js-yaml
|--- mysql
|--- socket.io
|--- nodemailer
现在我想把这个项目推送到生产服务器。
我的问题是:我可以上传整个代码库(包括已安装的模块)还是应该只上传我的应用代码并在服务器上一个接一个地重新安装模块?
注意:我的开发机器运行的是 Ubuntu 10.04,生产服务器运行的是 CentOS 5.3
我觉得那些模块都是js文件组成的,所以应该没问题。
但是,npm 安装的模块是否有可能在本地机器上编译一些代码,因此该代码可能无法在另一台机器上运行。另外,我怎么知道模块是否这样做?
希望这个问题不要太傻——我刚刚开始使用 Node.js。
谢谢。
最佳答案
如果可能,您一定要复制 node_modules
。
如果您在服务器上重新下载它们,您将面临使用中的模块版本略有不同的风险。即使您需要一个严格的模块版本 X,该模块也可以再次具有对其他模块 Y Z 的通配符依赖性。这意味着如果 Y 已更新并且您发布到服务器,它现在将使用与您使用的代码不同的 Y 代码运行用于本地测试和验证。
在某些情况下,您甚至可能在部署时没有可用的所需模块,因为作者出于某种原因决定取消发布该包。
关于Node.js - 部署 Node.js 应用程序时是否需要在生产服务器上重新安装所有模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12955597/