如何获得在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包的根目录下