4

我正在寻找一种方法来基本上完成操纵 require.paths 曾经让你做的事情;编辑路径需要将从正在运行的程序中搜索模块。

设置(由于各种原因我无法更改或解决方法)是我有一个项目,其中包含一个子目录中的主 JS 文件,而该子目录中require('module')的“模块”是其中的一个文件项目文件夹中另一个特定目录中的另一个目录。

不幸的是,暂时将文件夹移动到 node_modules 中并不是一个理想的解决方案(如果它甚至可以工作?)。我尝试以两种方式编辑 NODE_PATH 环境变量:

  • NODE_PATH='$NODE_PATH:/home/garmur/moduledir'这有效,但作为实际解决方案并不理想。
  • process.env.NODE_PATH += '/home/garmur/moduledir';从程序内部,这似乎没有任何效果?

对此的任何帮助表示赞赏。我知道使用 node_modules 等是这里理想的解决方案,但我的双手被束缚在这个项目布局上。

4

2 回答 2

2

这很 hacky,因为它使用“私有”方法调用,但它可以工作。我这样做是为了让我的 Mocha 测试中的路径更加清晰。

process.env.NODE_PATH += ':src'; //append custom path to NODE_PATH
require('module').Module._initPaths();

只需将其作为某些应用程序启动或引导执行的一部分运行即可。然后,您可以在该代码执行后的任何地方要求与 src 相关的内容。

于 2015-08-13T18:51:27.130 回答
0

也许您可以尝试使用相对路径进行模块加载,这并不完全是您所要求的,但如果您需要从“node_modules”目录中加载模块,这可能是一个选项:

例如,使用这种结构:

$APP_DIR/server.js
$APP_DIR/mymodules/handlers.js
$APP_DIR/mymodules/utils.js
$APP_DIR/node_modules/...

在 server.js 中,您可以使用:

var h = require('./mymodules/handlers'),
    u = require('./mymodules/utils');

在 handlers.js 中,您可以使用:

var u = require('./utils')
于 2013-03-02T11:58:34.957 回答