我可以将npm node_modules目录放在我的webroot'之外。

时间:2013-03-20 11:00:55

标签: node.js security npm

我是Node的新手,但到目前为止我很开心。我试图将我的node_modules(图书馆)目录移到公共' webroot'之外。并需要建议和指导。

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

/my_project
  /config
  /public          
     /node_modules
     server.js

我想知道是否有任何方法可以在我的webroot之外拥有/node_modules目录而不会破坏我的应用程序。我只是习惯于在公开暴露的webroot中保持最低限度,并且感觉不适合使用libs。叫我老式,但这就是我以前在PHP和C#世界里做的事情。

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

/my_project
  /config
  /node_modules
  /public          
     server.js

然后这一切都变得不稳定,节点的require()魔法破坏了。

我尝试过以下方法:

var express=require('../express');无法为我提供“无法找到”模块'类型错误。

  1. 我甚至可以提出什么问题,如果是,那又如何呢?
  2. 我在网络浏览器中使用我的库是否存在任何重大风险,或者我错过了Node的工作方式。
  3. 你们做什么,生产应用程序的最佳实践是什么?我可以举例说明你的生产实践及其原因。

1 个答案:

答案 0 :(得分:5)

<强> 1。是否可以将模块放在项目之外的文件夹中

<强> 2。在webroot中使用模块是否存在任何重大风险?

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

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

第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

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