要编辑的 require.path 的替代方法需要以编程方式搜索目录



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

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

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

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

任何帮助,不胜感激。我知道在这里使用node_modules等是理想的解决方案,但是对于这个项目的项目布局,我的手被束缚住了。

这很笨拙,因为它使用"私有"方法调用,但它有效。我这样做是为了让我的摩卡测试中的路径变得理智。

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

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

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

例如,使用此结构:

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

在服务器内部.js您可以使用:

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

在处理程序中.js您可以使用:

var u = require('./utils')

最新更新