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

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

我有unit testing的问题。 这里的问题是:

  • simpledblayer-mongo获取来自simpledblayertest.js文件)的testing列表
  • 使用GIT很容易在simpledblayer-mongo定义一个“submodule”,并确保子模块位于node_modules下。 所以,所有testing的文件将在node_modules / simpledblayer / tests中
  • 使用NPM,我将simpledblayer定义为devDependency 。 没有真正的需要,因为simpledblayer simpledblayer-mongo需要simpledblayer-mongo而不pipe它是否直接依赖

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

我需要加载simpledblayertest.js文件, 无论它在哪里(只要simpledblayer本身作为模块是simpledblayer )。 从模块中获取特定文件的任何提示,而不pipe模块的path是什么?

谢谢!

芝加哥商业交易所。

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

所以如果simpledblayer在package.json中有main: 'index.js'require.resolve('simpledbplayer')可能会返回类似/home/foo/project/node_modules/simpledblayer/index.js