在node.JS我怎么能得到一个模块的path,我已经加载通过要求是*不*我的(即在一些node_module)
我需要一个通过npm安装的模块。 我想访问一个.js文件从属于该模块(所以我可以inheritance一个构造函数的方法)。 我不能(很好,不想)修改模块的代码,所以没有一个地方来提取__dirname。
我知道下面的问题,但它是关于获取模块的代码控制的path(因此,__dirname是解决scheme): 在Node.js中,我怎么能告诉`this`模块的path?
~~~
更好的办法是获取模块的加载模块信息
如果我正确理解你的问题,你应该使用require.resolve() :
使用内部的require()机制来查找模块的位置,而不是加载模块,只是返回parsing的文件名。
例如: var pathToModule = require.resolve('module');
我希望我正确理解你的需求:获得某个模块的入口点文件。 假设你想获得jugglingdb
模块的入口点:
node > require('module')._resolveFilename('jugglingdb') '/usr/local/lib/node_modules/jugglingdb/index.js'
正如你所看到的,这不是“官方”的方式来获取这种关于模块的信息,所以这个函数的行为可能会从一个版本变为另一个版本。 我发现它在节点源: https : //github.com/joyent/node/blob/master/lib/module.js#L280
根据@anatoliy解决scheme,在MacOS XIfind了查找path
require('module')._resolveLookupPaths('myModule')
所以我得到解决的查找path
[ 'myModule', [ '/Users/admin/.node_modules', '/Users/admin/.node_libraries', '/usr/local/lib/node' ] ]
而
require('module')._resolveFilename('myModule')
不会解决我正在寻找反正的模块,事实上,疯狂的事情是_load
不会parsing模块:
> require('module')._load('myModule') Error: Cannot find module 'myModule' at Function.Module._resolveFilename (module.js:440:15) at Function.Module._load (module.js:388:25) at repl:1:19 at sigintHandlersWrap (vm.js:32:31) at sigintHandlersWrap (vm.js:96:12) at ContextifyScript.Script.runInContext (vm.js:31:12) at REPLServer.defaultEval (repl.js:308:29) at bound (domain.js:280:14) at REPLServer.runBound [as eval] (domain.js:293:12) at REPLServer.<anonymous> (repl.js:489:10)
而require
将会:
> require('myModule')
但我没有这个模块
myProject/node_modules/ myProject/node_modules/@scope/ /usr/local/lib/node_modules/ /usr/local/lib/node_modules/@scope /usr/local/lib/node_modules/npm/node_modules/ /usr/local/lib/node_modules/npm/node_modules/@scope $HOME/.npm/ $HOME/.npm/@scope/
那么这个模块在哪里?
首先,我必须做一个$ sudo /usr/libexec/locate.updatedb
然后一些咖啡后,我locate myModule
或更好地locate myModule/someFile.js
etvoilà,它出现在我的项目的父文件夹,即在我的项目根文件夹之外:
$pwd /Users/admin/Projects/Node/myProject $ ls ../../node_modules/myModule/
所以你不能避免rm -rf ../../node_modules/myModule/
和新鲜的npm install
。
我可以争辩说,没有人指示npm
扫描我的计算机search模块其他地方比我的项目根文件夹,它应该运行或在默认模块searchpath。
- node.js process.memoryUsage()的返回值代表什么?
- 所有的Node.jscallback函数都是asynchronous的吗?
- NodeJS:如何debugging“检测到EventEmitter内存泄漏。 11位听众添加了“
- 如何在node.js中设置默认时区?
- TypeError:Router.use()需要中间件function,但得到一个对象
- AWS Lambda错误:“无法find模块”/ var / task / index“”
- 捆绑的依赖优于NPM中的正常依赖
- 在pkg-configsearchpath中未find软件包cairo。 节点js安装canvas问题
- “npm install”将所有依赖项安装在node_modules目录中,而不是将它们嵌套