已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。
两个月前关门了。
Improve this question
我有一个index.js文件用于我的节点应用程序,它需要这个文件一次,传入app对象。
我应该要求'http',在函数中还是在函数外?
// this file is required once by index.js
// ...put it here
function exported(app) {
const http = require('http'); // ...or put it here
return http.createServer(app).listen(process.env.PORT || 3000, () => {
console.log('DEBUG: express: started');
});
}
module.exports = exported;
这两种方式都有效,但哪种方式是首选或最佳实践?
3条答案
按热度按时间alen0pnh1#
通常认为最好的做法是在文件的顶部要求模块,在任何其他代码之前。这使得代码有什么依赖关系变得清晰,并且还允许模块在第一次需要之后被Node.js缓存,从而提高性能。因此在这种情况下,最好将require('http ')语句放在函数之外,在文件的顶部。
fumotvh32#
最好的做法是将所有导入放在文件的顶部。这样你就可以一眼看到给定文件有哪些依赖项,并且也使一些测试更容易-如果你需要模拟一个模块,如果该模块保证在文件的其余部分执行之前加载,那么这样做会更简单。在您可能需要在更高的位置使用相同模块的情况下,你不需要移动导入(如果执行顺序不同,也不会有在导入之前尝试使用模块的风险)。
它也更加一致,当你不是唯一一个在代码库上工作的人时,一致性就变得非常重要。
sg3maiej3#
require()的行为类似于单例。这意味着即使你在同一个模块上多次调用require,该模块也只运行一次。
因此,请将它留在函数之外,因为函数可能会被多次调用,从而导致未知的行为。
简而言之,把requires放在文件的顶部,在任何其他函数之外,以便它们具有文件范围。
从ringstack开始
Node.js中的模块加载机制是在第一次require调用时缓存模块。这意味着每次使用require('awesome-module')时,您都会获得相同的awesome-module示例,这确保了模块是类似singleton的,并且在整个应用程序中具有相同的状态。