是否可以确定required
脚本来自哪个目录?
我的最终目标是......
// return the directory where `mysql` module is found
var mysqldir = requiredir('mysql')
if(fs.existsSync(mysqldir+"/README.md")){
console.log(fs.readFileSync(mysqldir+"/README.md").toString())
}
因此,我可以为所有这些模块提供方便的参考,并且希望未来开明的人们将包含旨在以这种方式访问的模块文档/备忘单
答案 0 :(得分:3)
required.resolve(...)
可能是您正在寻找的内容:
function requiredir(id) {
return path.dirname(require.resolve(id));
}
但是,这将遵循main
设置:
> requiredir('grunt')
.../node_modules/grunt/lib/
( 更新 :API的文档不再可用,因此可能不支持其使用。)另一个选项可能是使用npm
的{{1}},但这仅限于已注册的软件包:
view
答案 1 :(得分:2)
如果要确定模块的绝对路径,可以使用require.resolve('module')
http://nodejs.org/api/globals.html#globals_require_resolve
您可以通过正则表达式
提取文件夹路径答案 2 :(得分:1)
如果您想以编程方式了解nodejs正在使用的模块主目录,则可以正常使用
require.resolve('module_name').replace(/(.*node_modules.)(.*?)(\/)(.*)/, `$1$2`)
例如,如果您想知道您在nodejs代码中使用的模块jquery
的模块主目录的位置,那么第一部分
require.resolve('jquery')
返回(在我的情况下)
/home/jfolpf/autocosts/node_modules/jquery/dist/jquery.js
注意jquery.js
未存储在模块主目录中;尽管如此
require.resolve('jquery').replace(/(.*node_modules.)(.*?)(\/)(.*)/, `$1$2`)
返回
/home/jfolpf/autocosts/node_modules/jquery
这考虑到要解析模块的路径,节点总是递归寻找名为node_modules
的文件夹,如documentation中所示。