从节点中的模块加载特定文件

Mer*_*erc 5 git unit-testing node.js npm

我写了一个模块simpledblayer-mongo。该模块依赖于simpledblayer(它提供特定于 DB 的功能)。

我在进行单元测试时遇到问题。这里的问题是:

  • simpledblayer-mongosimpledblayertest.js文件)获取测试列表
  • 使用 GIT 很容易在其中定义“子模块”simpledblayer-mongo并确保子模块位于 node_modules 下。因此,包含所有测试的文件将位于 node_modules/simpledblayer/tests
  • 使用 NPM,我将其定义simpledblayerdevDependency. 没有真正的需要,因为无论如何都simpledblayer需要simpledblayer-mongo,作为直接依赖

我遇到的问题是:用户可能会从 GIT(该模块将保证在 node_modules/simpledblayer 中)或 NPM(该模块可能被放置在 node_modules 中,或者它实际上可能被重复数据删除/等)获取模块,并且它可能在任何地方,真的)。

我需要加载simpledblayer'stest.js文件,无论它在哪里(只要它simpledblayer本身作为模块是必需的)。无论模块的路径是什么,有关从模块获取特定文件的任何提示?

谢谢!

梅尔。

msc*_*dex 8

您可以使用require.resolve()which 返回main您传入的模块名称的属性值(来自模块的 package.json)的绝对路径。从那里,您可以使用path/ fsmodules 来帮助获得相对于绝对路径的正确路径由 返回require.resolve()

所以,如果simpledblayermain: 'index.js'它的package.json,require.resolve('simpledbplayer')可能会返回类似/home/foo/project/node_modules/simpledblayer/index.js