我可以把npm node_modules目录放在我的'webroot'

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

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

 /my_project /config /public /node_modules server.js 

我想知道是否有任何方法我可以有/node_modules目录我的webroot之外,而不是打破我的应用程序。 我只是习惯于保持公开暴露的webroot中的最小值,并且对那些库中的libs不感到满意。 打电话给我老式的,但这就是我习惯于在PHP和C#世界做的东西。

如果我按照以下步骤设置项目:

 /my_project /config /node_modules /public server.js 

那么这一切都会摇摆不定,而Node的require()魔法则会破灭。

我已经尝试了以下内容:

var express=require('../express'); 这不起作用或者给我'找不到模块'types的错误。

  1. 我甚至在问什么,如果是的话,怎么样?
  2. 是否有任何主要的风险,我有我的libs在一个webroot或者我错过了一些基本的方式与节点的工作方式。
  3. 你们做什么,生产应用程序的最佳做法是什么? 我可以举一些你的生产实践,为什么。

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

是。

2.在webroot中有模块有什么主要的风险吗?

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

如果您使用的是版本控制,并且不想检入外部模块,那么常见的(和标准的npm)模式就是忽略./node_modules并指定package.json文件中的依赖关系。

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

不适合所以,但是因为我在这,所以无论如何我会给它一个镜头。 如果你使用grunt (一个非常stream行的任务自动化工具),你通常会得到这样的结构:

 /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 

这个结构具有将核心文件,相关性和任何testing清楚地分开的优点,同时将它们保持在同一个文件夹中。