从节点中的模块加载特定的文件
我写了一个模块, simpledblayer-mongo 。 模块依赖于simpledblayer (它提供了DB特定的function)。
我有unit testing的问题。 这里的问题是:
-
simpledblayer-mongo
获取来自simpledblayer
(test.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和它可能在任何地方,真的)。
我需要加载simpledblayer
的test.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
。