我写了一个模块,simpledblayer-mongo .模块依赖 simpledblayer (它提供了特定于 DB 的功能)。
我在单元测试方面遇到问题。这里的问题是:
simpledblayer-mongo
从 simpledblayer
获取测试列表(test.js
文件)simpledblayer-mongo
中定义一个“子模块”。并确保子模块放置在 node_modules 下。因此,包含所有测试的文件将位于 node_modules/simpledblayer/tests simpledblayer
作为 devDependency
.没有真正的需要,因为 simpledblayer
simpledblayer-mongo
需要无论如何,作为直接依赖 我遇到的问题是:用户可能从 GIT(模块将保证在 node_modules/simpledblayer 中)或 NPM(模块可能放在 node_modules 中,或者实际上可能是重复数据删除/等)获取模块。它可能在任何地方,真的)。
我需要加载
simpledblayer
的test.js
文件,无论它在哪里(只要 simpledblayer
本身作为模块是必需的)。无论模块的路径是什么,有关从模块获取特定文件的任何提示?谢谢!
默克。
最佳答案
您可以使用 require.resolve()
返回 main
的绝对路径您传入的模块名称的属性值(来自模块的 package.json)。从那里,您可以使用 path
/fs
帮助找到正确路径的模块,相对于 require.resolve()
返回的绝对路径.
所以如果 simpledblayer
有 main: 'index.js'
在其 package.json 中,require.resolve('simpledbplayer')
可能会返回类似 /home/foo/project/node_modules/simpledblayer/index.js
的内容.
关于node.js - 从 Node 中的模块加载特定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28007530/