3

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

谢谢。

4

2 回答 2

2

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

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

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

于 2012-10-18T13:23:21.397 回答
0

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

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

heroku也使用此工作流程。

于 2012-10-18T15:13:29.077 回答