【问题标题】:Node.js - do I need to reinstall all the modules on the production server when deploying the Node.js appNode.js - 部署 Node.js 应用程序时是否需要在生产服务器上重新安装所有模块
【发布时间】:2012-10-18 13:14:09
【问题描述】:

我已经开发了我的第一个 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.js production


    【解决方案1】:

    如果可能的话,你绝对应该复制node_modules

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

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

    【讨论】:

    • 这些都是很好的观点。但是,如果一个模块在其安装过程中编译代码——该代码不会是可移植的怎么办?那可能吗?我猜他们中的一些人确实如此。
    • @dan 一个很好的观察。一些模块。我只是习惯于在与生产相同的平台上进行开发测试。在这种情况下,您别无选择,只能在生产环境中重新安装它们,或者引入与生产服务器具有相同平台的测试登台服务器。
    • 是的,实际上我在与生产环境相同的架构上登台......但这仍然很痛苦,因为我希望开发机器运行任何 Linux 发行版。如何判断某个模块是否编译了任何软件?不幸的是,在“node_modules”目录上运行“tree”,我可以看到一些 .c 和 .h 文件 - 不好,不是吗?
    • 是的,这看起来会引起问题。我会为此使用构建和测试阶段服务器,但这实际上取决于您的系统有什么稳定性要求。如果它偶尔失败是可以的,你不需要太费心。 :)
    【解决方案2】:

    我总是尝试使用所需模块的最新版本。 Node.js 还很年轻,每当更新一个模块时,它通常会带来错误修复、速度改进等。我在本地安装模块,在它们上测试我的代码,最后在生产中使用它们。当您使用npm install module --save 安装它们时,它们会以dependencies 的形式自动添加到您的package.json 文件中。

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

    heroku 也使用此工作流程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 2015-11-25
      相关资源
      最近更新 更多