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

标签 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 中):

|
|--- 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/

相关文章:

node.js - 当我启用 https 网站停止工作

node.js - 为什么脚本完成后node.js服务器不退出?

wcf - 生产服务器上的偶尔错误 : Method <name> is not supported on this proxy

android - 我应该在发布之前从我的代码中删除 e.printStackTrace()

javascript - 迭代中的 StaleElementReferenceError

angularjs - 错误 : [$resource:badcfg] Error in resource configuration for action `query` . 预期响应包含一个数组但得到一个对象

node.js - Twitter 上传媒体返回状态代码 400

webpack - Vue + Webpack 构建显示空白页面

kubernetes - Apache Nifi 准备好在生产中与 Kubernetes 一起使用了吗?

ruby-on-rails - 如何使用 Heroku 上的 Ruby on Rails 项目从开发转移到生产?