如何在兄弟目录中为所需脚本提供模块依赖性

时间:2013-10-14 13:27:26

标签: node.js module require

我正在运行一个node.js脚本(foo.js),require是一个位于兄弟目录中的帮助脚本。

//foo.js:
var magic = require('../util/magic');

magic.js使用npm模块express。但是,“计划”的主目录(持有package.jsonnode_modules)是foo.js所在的文件夹。

/program  
  /node_modules  
     /express
     ..
  /foo.js  
  /package.json  
/util  
  /magic.js  

运行程序时, magic.js 中的语句require('express')失败 - 无法找到该模块。

有没有办法让node.js从express目录加载program/node_modules模块?

我想避免以下任何一种情况:

  • 将node_modules目录移至公共父utilprogram
  • node_modules目录添加到util
  • 将所需模块的引用传递给magic.js

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您可以提供相对路径而不是模块名称,因为如果您没有指定路径,这就是Node.js检查模块文件夹的方式:

/util/node_modules
/node_modules

由于您知道模块已存在的位置,所以请改为:

var express = require('../program/node_modules/express');

但是,在开发模块时,您应该将与模块相关的任何文件放在模块中。如果不这样做,它们在发布时就不会与模块一起打包,并且您无法访问包文件中指定的依赖项。