我需要一个通过npm安装的模块.我想访问从属于该模块的.js文件(因此我可以在其中继承一个Constructor方法).我不能(好吧,不想)修改模块的代码,所以没有地方提取它的__dirname.
我知道以下问题,但它是关于获取一个代码控制的模块的路径(因此,__ dirname是解决方案): 在Node.js中,我如何告诉`this`模块的路径?
~~~
更好的方法是获取模块的加载模块信息
以下是三个文件的示例代码:
// foo.js
var myFunc = require("./myFunc");
function foo(){
myFunc("message");
}
// bar.js
var myFunc = require("./myFunc");
function bar(){
myFunc("message");
}
// myFunc.js
module.exports = myFunc;
function myFunc(arg1){
console.log(arg1);
// Here I need the file path of the caller function
// For example, "/path/to/foo.js" and "/path/to/bar.js"
}
Run Code Online (Sandbox Code Playgroud)
我需要动态获取调用函数的文件路径,而不需要传递任何额外的参数myFunc.
我有一个任务,依赖于function.caller来检查调用者是否被授权.
根据这个URL,所有主流浏览器都支持调用者...并且我的所有单元测试都通过:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller
但是,nodejs拒绝所有访问function.caller的尝试(将其报告为null).
我愿意接受有关在nodejs上工作的建议......我不想让这个框架只适用于浏览器.
谢谢!
我正在尝试创建一个require包装器来加载依赖项,但我发现有一件事很难让它作为原始的require函数.当路径是相对路径时,包装器无法解析为正确的路径,因为我的加载器和调用者文件不在同一个文件夹中.这是一个简化的描述.
index.js
lib/
loader.js
foo/
bar.js
baz.js
Run Code Online (Sandbox Code Playgroud)
index.js
var loader = require('./lib/loader.js'),
bar = require('./foo/bar.js');
bar(loader);
Run Code Online (Sandbox Code Playgroud)
LIB/loader.js
module.exports = function (path) {
return require(path);
};
Run Code Online (Sandbox Code Playgroud)
富/ bar.js
module.exports = function(loader) {
var baz = loader('./baz.js');
console.log(baz);
};
Run Code Online (Sandbox Code Playgroud)
富/ baz.js
module.exports = 'baz';
Run Code Online (Sandbox Code Playgroud)
显然,当执行index.js时,找不到baz.js文件.有没有办法解决到正确的文件?
我找到了一个相对的解决方案,但它没有用.
async function sleep(msecs){
if (!somebodyAwaitsMe()) // that's the unknown
throw ("call me with await");
return new Promise(resolve => setTimeout(resolve, ms));
}
await sleep(5000); // correct
sleep(5000); // forgot await, returns immediately,
Run Code Online (Sandbox Code Playgroud)
我想知道,在异步函数中,是否使用await调用了它,这可能吗?
该代码举例说明了一种可能的情况,以帮助检测错误,但它在其他情况下可能很有用,在其他情况下,可以通过设计调用函数,无论有没有等待。