15

我是 Node 新手,但到目前为止我很享受。我试图将我的node_modules(库)目录移到公共“webroot”之外,需要建议和指导。

我已经设置了我简单的基于expressJS的 Node 项目,如下所示:

/my_project
  /config
  /public          
     /node_modules
     server.js

我想知道是否有任何方法可以让/node_modules我的 webroot 之外的目录而不破坏我的应用程序。我只是习惯于在我公开暴露的 webroot 中保持最低限度,并且对那里的库感觉不正确。称我为老式的,但这就是我习惯在 PHP 和 C# 世界中做事的方式。

如果我按如下方式设置项目:

/my_project
  /config
  /node_modules
  /public          
     server.js

然后一切都变得摇摆不定,Node的require()魔法中断了。

我尝试了以下方法:

var express=require('../express');这也不起作用给我“找不到模块”类型错误。

  1. 我要问的甚至可能吗,如果可以,那怎么办?
  2. 将我的库放在 webroot 中是否有任何重大风险,或者我错过了 Node 工作方式的一些基本内容。
  3. 你们是做什么的,生产应用程序的最佳实践是什么?我可以举一些关于你的生产实践的例子以及为什么。
4

1 回答 1

9

1.是否可以在项目外的文件夹中拥有模块

是的。

2. 在 webroot 中使用模块是否有任何重大风险?

假设您所说的“webroot”是指服务器的根目录或项目之外的任何文件夹:是的。可以使用 g-flag: 使用 npm 全局安装模块npm install -g express。这通常被认为是不好的做法,因为不同的项目可能依赖于同一模块的不同版本。本地安装允许不同的项目有不同的版本。

如果您正在使用版本控制并且不想签入外部模块,一个常见的(和 npm 中的标准)模式是忽略并在package.json文件./node_modules中指定依赖项。

3.“生产应用程序的最佳实践是什么?”

不太适合 SO,但既然我在做,我还是会试一试。如果你使用grunt(一个非常流行的任务自动化工具),你通常会得到这样的结构:

/my_project
  /node_modules
  /lib
    # actual project files
    /public
      # files that are meant to be sent to clients
  /test
  package.json # specifies dependencies, main script, version etc
  README.md # optional

这种结构的优点是可以清楚地分离核心文件、依赖项和任何测试,同时将它们全部保存在同一个文件夹中。

于 2013-03-20T12:43:46.313 回答