如何获取在nodejs中运行脚本的文件的当前路径

时间:2013-12-17 18:25:30

标签: node.js path

所以我有国际化需要的节点模块。

我正在尝试获取在结节模块中运行节点模块的文件的当前路径。

用例#1:

内部~/yourProject/node_modules/i18n.js

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

服务器的路径是:

~/YourUserName/yourProject/app.js

执行var i18n = require("i18n");

试图获得它将返回的路径

/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/

现在我想知道是否有办法可以获得当前正在运行的脚本的路径?

2 个答案:

答案 0 :(得分:14)

使用变量__filename,__ dirname将返回名为modules / scripts的名称和路径,请参阅此处http://nodejs.org/docs/latest/api/globals.html#globals_filename

更新

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

Node.js不会为您执行此操作,因此从技术上讲,您可能需要为模块添加额外的包装器和参数,并将其转换为接受此信息的函数。

但是,通过使用Error.prepareStackTrace可以实现getCaller 这个主题已经有了你的解决方案:

How can one get the file path of the caller function in node.js?

答案 1 :(得分:2)

案例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包的根目录