从节点中的模块加载特定文件
Loading a specific file from a module in node
我写了一个模块,simpledblayer-mongo. The module depends on simpledblayer(它提供了特定于数据库的功能)。
我在单元测试方面遇到问题。这里的问题是:
simpledblayer-mongo
从 simpledblayer
获取测试列表(test.js
文件)
- 使用GIT很容易在
simpledblayer-mongo
中定义一个"submodule"并确保子模块放在node_modules下。因此,包含所有测试的文件将位于 node_modules/simpledblayer/tests
- 对于 NPM,我将
simpledblayer
定义为 devDependency
。没有真正的需要,因为 simpledblayer-mongo
无论如何都需要 simpledblayer
,作为直接依赖
我遇到的问题是:用户可能会从 GIT(该模块保证在 node_modules/simpledblayer 中)或 NPM(该模块可能位于 node_modules,或者它实际上可能是 deduped/etc。它可能在任何地方,真的)。
我需要加载 simpledblayer
的 test.js
文件 不管 它在哪里(只要 simpledblayer
本身是必需的-能够作为一个模块)。关于从模块获取特定文件的任何提示,无论模块的路径是什么?
谢谢!
雇佣兵
您可以使用 require.resolve()
,其中 return 是模块名称的 main
属性 值(来自模块的 package.json)的绝对路径你传入。从那里,你可以使用 path
/fs
模块来帮助找到正确的路径,相对于 return 由 require.resolve()
编辑的绝对路径。
因此,如果 simpledblayer
在其 package.json 中包含 main: 'index.js'
,require.resolve('simpledbplayer')
可能 return 类似于 /home/foo/project/node_modules/simpledblayer/index.js
。
我写了一个模块,simpledblayer-mongo. The module depends on simpledblayer(它提供了特定于数据库的功能)。
我在单元测试方面遇到问题。这里的问题是:
simpledblayer-mongo
从simpledblayer
获取测试列表(test.js
文件)- 使用GIT很容易在
simpledblayer-mongo
中定义一个"submodule"并确保子模块放在node_modules下。因此,包含所有测试的文件将位于 node_modules/simpledblayer/tests - 对于 NPM,我将
simpledblayer
定义为devDependency
。没有真正的需要,因为simpledblayer-mongo
无论如何都需要simpledblayer
,作为直接依赖
我遇到的问题是:用户可能会从 GIT(该模块保证在 node_modules/simpledblayer 中)或 NPM(该模块可能位于 node_modules,或者它实际上可能是 deduped/etc。它可能在任何地方,真的)。
我需要加载 simpledblayer
的 test.js
文件 不管 它在哪里(只要 simpledblayer
本身是必需的-能够作为一个模块)。关于从模块获取特定文件的任何提示,无论模块的路径是什么?
谢谢!
雇佣兵
您可以使用 require.resolve()
,其中 return 是模块名称的 main
属性 值(来自模块的 package.json)的绝对路径你传入。从那里,你可以使用 path
/fs
模块来帮助找到正确的路径,相对于 return 由 require.resolve()
编辑的绝对路径。
因此,如果 simpledblayer
在其 package.json 中包含 main: 'index.js'
,require.resolve('simpledbplayer')
可能 return 类似于 /home/foo/project/node_modules/simpledblayer/index.js
。