如何获得在nodejs中运行脚本的文件的当前path

所以我有节点模块可以要求国际化。

我试图获取在节点模块中运行我的节点模块的文件的当前path。

使用案例#1:

里面~/yourProject/node_modules/i18n.js

 var current_path_to_locales_dir = path.join(__dirname, "locale"); 

而服务器的path是:

 ~/YourUserName/yourProject/app.js 

var i18n = require("i18n");

并试图得到它将返回的path

 /User/YourUserName/yourProject/node_modules/locale 

这是正确的,但我期待它寻找

 /User/YourUserName/yourProject/locale 

用例2:

里面~/i18nProject/i18n.js

 var current_path_to_locales_dir = path.join(__dirname, "locale"); 

如果我在~/i18nProject/sample有一个示例应用程序,并且正在执行var i18n = require("../i18n");

这次的locale目录将会是

 /User/YourUserName/i18nProject/locale 

再次,上述是正确的,但我希望它是

 /User/i18nProject/sample/locale/ 

现在我想知道是否有一种方法可以获取当前正在运行的脚本的path?

使用variables__filename,__dirname将返callback用的模块/脚本名称和path,请参阅http://nodejs.org/docs/latest/api/globals.html#globals_filename

更新

在你的情况下,你需要得到模块/脚本的调用者:

Node.js不会为你做,所以在技术上,你可能需要添加额外的包装和参数到你的模块,并将其转换为接受此信息的函数。

但是,通过使用Error.prepareStackTrace有一个实现getCaller的解决方法此线程已经有了您的解决scheme:

如何获取node.js中调用者函数的文件path?

情况1:

如果你想在用户的项目中使用你的npm包的默认locals目录,改变这一行:

 var current_path_to_locales_dir = path.join(__dirname, "locale"); 

至:

 var current_path_to_locales_dir = path.join(__dirname, "..", "locale"); // The ".." moves back one directory out of node_modules. 

只要确保运行上述代码的文件在你的npm包的根目录下。 更改为path.resolve可能会更好,但是我会让您探索这些差异,因为这超出了您的问题的范围。

案例2:

如果你想使用require("../i18n");来访问你的npm包中的示例目录, ,改变这一行:

 var current_path_to_locales_dir = path.join(__dirname, "locale"); 

至:

 var current_path_to_locales_dir = path.join(__dirname, "sample", "locale"); 

与案例1相同,请确保在代码上面运行的文件位于npm包的根目录下