2

我正在运行一个 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.jsexpress从目录中加载模块program/node_modules

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

  • 将 node_modules 目录移动到utilandprogram
  • node_modules目录添加到util
  • 将所需模块的引用传递给magic.js

感谢你的帮助!

4

1 回答 1

2

您可以提供相对路径而不是模块名称,因为如果您不指定路径,Node.js 将通过以下方式检查模块文件夹:

/util/node_modules
/node_modules

由于您知道模块已经存在的位置,因此只需执行以下操作:

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

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

于 2013-10-14T14:31:58.063 回答