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

Ali*_*Ali 15 path node.js

所以我有可用于国际化的节点模块.

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

用例#1:

~/yourProject/node_modules/i18n.js

var current_path_to_locales_dir = path.join(__dirname, "locale");
Run Code Online (Sandbox Code Playgroud)

而服务器的路径是:

~/YourUserName/yourProject/app.js
Run Code Online (Sandbox Code Playgroud)

var i18n = require("i18n");

并试图获得它将返回的路径

/User/YourUserName/yourProject/node_modules/locale
Run Code Online (Sandbox Code Playgroud)

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

/User/YourUserName/yourProject/locale
Run Code Online (Sandbox Code Playgroud)

用例#2:

~/i18nProject/i18n.js

var current_path_to_locales_dir = path.join(__dirname, "locale");
Run Code Online (Sandbox Code Playgroud)

如果我有一个示例应用程序在~/i18nProject/sample做和var i18n = require("../i18n");

这次locale目录将是

/User/YourUserName/i18nProject/locale
Run Code Online (Sandbox Code Playgroud)

以上是正确的,但我希望它是正确的

/User/i18nProject/sample/locale/
Run Code Online (Sandbox Code Playgroud)

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

Nit*_*... 14

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

更新

在您的情况下,您需要获取模块/脚本的调用者:

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

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

如何在node.js中获取调用函数的文件路径?

  • `console.log(__ filename);`将返回文件的路径,而不是运行脚本的文件的路径. (2认同)