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

时间:2015-01-18 05:48:53

标签: node.js git unit-testing npm

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

我遇到单元测试问题。这里的问题是:

  • simpledblayer-mongosimpledblayer获取测试列表(test.js文件)
  • 使用GIT很容易定义一个"子模块"在simpledblayer-mongo中,并确保子模块位于node_modules下。因此,包含所有测试的文件将位于node_modules / simpledblayer / tests
  • 使用NPM,我将simpledblayer定义为devDependency。没有实际需要,因为simpledblayer需要simpledblayer-mongo,而不是直接依赖

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

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

谢谢!

Merc的。

1 个答案:

答案 0 :(得分:2)

您可以使用require.resolve()返回传递的模块名称的main属性值(来自模块的package.json)的绝对路径。从那里,您可以使用{{ 1}} / path模块,相对于fs返回的绝对路径,帮助到达正确的路径。

因此,如果require.resolve()的package.json中包含simpledblayermain: 'index.js'可能会返回require.resolve('simpledbplayer')之类的内容。