我经过了一些测试,我认为这可以为这个问题提供一些启示。
app.js
:
var ...
, routes = require('./routes')
...;
...
console.log('@routes', routes);
...
的版本/routes/index.js
:
exports = function fn(){}; // outputs "@routes {}"
exports.fn = function fn(){}; // outputs "@routes { fn: [Function: fn] }"
module.exports = function fn(){}; // outputs "@routes function fn(){}"
module.exports.fn = function fn(){}; // outputs "@routes { fn: [Function: fn] }"
我什至添加了新文件:
./routes/index.js
:
module.exports = require('./not-index.js');
module.exports = require('./user.js');
./routes/not-index.js
:
exports = function fn(){};
./routes/user.js
:
exports = function user(){};
我们得到输出“ @routes {}”
./routes/index.js
:
module.exports.fn = require('./not-index.js');
module.exports.user = require('./user.js');
./routes/not-index.js
:
exports = function fn(){};
./routes/user.js
:
exports = function user(){};
我们得到输出“ @routes {fn:{},用户:{}}”
./routes/index.js
:
module.exports.fn = require('./not-index.js');
module.exports.user = require('./user.js');
./routes/not-index.js
:
exports.fn = function fn(){};
./routes/user.js
:
exports.user = function user(){};
我们得到的输出“@routes {用户:[功能:用户]}”如果我们改变user.js
来{ ThisLoadedLast: [Function: ThisLoadedLast] }
,我们得到的输出“@routes {ThisLoadedLast:[功能:ThisLoadedLast]}”。
但是如果我们修改./routes/index.js
...
./routes/index.js
:
module.exports.fn = require('./not-index.js');
module.exports.ThisLoadedLast = require('./user.js');
./routes/not-index.js
:
exports.fn = function fn(){};
./routes/user.js
:
exports.ThisLoadedLast = function ThisLoadedLast(){};
...我们得到“ @routes {fn:{fn:[Function:fn]},ThisLoadedLast:{ThisLoadedLast:[Function:ThisLoadedLast]}}”
因此,我建议module.exports
您始终在模块定义中使用。
我不完全了解Node内部的情况,但是请评论一下,如果您能对此有所了解,我相信它会有所帮助。
-快乐的编码