节点获取所需父文件的路径

时间:2013-11-29 19:26:22

标签: node.js

我正在编写一个节点模块,需要读取与需要我模块的文件相同的目录中的文件。

例如,我有app.js并且在同一个文件夹中template.html。 在某个未知目录中,module.jsapp.js需要它。

如何从template.html阅读module.js

3 个答案:

答案 0 :(得分:17)

在您的文件中,您将拥有一个全局模块(实际上不是全局模块) 您可以使用module.parent获取父对象,使用module.parent.filename获取文件名,然后您可以提取文件夹

所以来自你的module.js你可以使用module.parent.filename. http://nodejs.org/api/modules.html

p = require('path')
template = p.join(p.dirname(module.parent.filename),'template.html')

如果您正在寻找已执行文件的路径,那么您可以使用require.main.filename

答案 1 :(得分:0)

看看这里:http://nodejs.org/docs/latest/api/globals.html#globals_dirname

您可以在app.js内完成此操作:

var path = __dirname + '/template.html';

然后,您可以通过某些功能或API将此路径发送到module.js

然后你的模块可以使用这条路径。

答案 2 :(得分:0)

在“module.js”中,诀窍是使用 module.parent。filename

我个人并不喜欢使用全局变量,对于某些文件(如配置或模板),管理模块需要堆栈并不是那么难。

module.parent映射到父需求模块(在您的示例中可以是app.js)。

将module.parent.filename与路径模块相结合可以获得一些有用的东西,例如:

    var path = require('path');
    var parent_path = path.dirname(module.parent.filename);
    var parent_relative = path.resolve(path.join(parent_path, '../', 'view'));
    var template = path.join(parent_path,'./views/template.html');

我不喜欢使用全局变量来处理路径,我得到了spagetti ../../../dir./s