我正在编写一个节点模块,需要读取与需要我模块的文件相同的目录中的文件。
例如,我有app.js
并且在同一个文件夹中template.html
。
在某个未知目录中,module.js
和app.js
需要它。
如何从template.html
阅读module.js
?
答案 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