每个父目录是否需要拥有自己的node_modules文件夹?

时间:2015-10-27 05:53:16

标签: node.js npm

我正在开发一个由节点驱动的应用程序,它有几个(三个)不同的文件夹。它看起来像这样:

Client- 
Server-
      -node_modules
         -mongoose
Database-
     -index.js
Config-
    -credentials.js

我已经使用我的所有密码创建了一个exports对象并将其放在数据库文件夹中(这样我就可以轻松地将其从签入任何版本控件中忽略)。

我想知道是否有办法让服务器目录中node_modulesserver目录使用database ALL ,以便我的package.json目录中的server文件将包含"后端"所需的所有软件包。我的项目。

但是,当我执行此操作并尝试从require(mongoose)文件Database/index.js时,我会收到"cannot find module"错误。我尝试了以下组合,但在每种情况下仍会出现错误: require(mongoose) require(../server/mongoose) require(../server/node_modules/mongoose)

直接在mongoose目录中安装Database模块可以解决此问题,但这意味着我必须在每个目录中都有node_modules(以及package.json)文件。这是解决此问题的正确方法还是有更简单的解决方案?

由于

2 个答案:

答案 0 :(得分:1)

也许您会发现以下文章很有趣: "Where does Node.js and require() look for modules?" ,以便了解为什么尝试不同的方式"需要" mongoose实际上并不起作用 - 这是因为您组织代码的方式(node_modules目录位于Server内,Database目录位于/目录下1}} - 根目录)。

因此,在您的情况下,您必须指定/Database/index.js mongoose的相对文件路径才能找到您的模块:

require('../server/node_modules/mongoose');

另一个解决方案(我亲自组织这样的代码)将在服务器代码中移动数据库代码;毕竟,它是所有后端代码。

答案 1 :(得分:0)

我知道这不是优雅的方式,但我对你的案子有建议。

您可以尝试如下;。

var mongoose = require('../server/node_modules/mongoose/index');

我在当地模拟了你的情况,这很有效。