在编写现代JS(ECMA6,NodeJS,React Native)时,我有些困惑
我有一个核心文件,需要我需要的大部分内容,比如app.js
:
var dependency1 = require('dependency1');
var dependency2 = require('dependency2');
在subfile1.js
中,我也需要访问dependency1
。我认为有两种方法可以做到这一点:
我应该写app.js
:
var subfile1 = require('./subfile1')(dependency1);
和subfile1.js
:
module.exports = function(dependency1) {
var subfile1;
// do many things;
return subfile1;
}
或app.js
var subfile1 = require('./subfile1');
和subfile1.js
:
var dependency1 = require('dependency1');
module.exports = subfile1;
我的直觉是使用解决方案#1 更简洁,因为它只构建每个依赖项的一个实例。
但另一方面,编写起来会更加痛苦,特别是当依赖开始变得众多时。
此外,黑盒效果失败,在编写独立模块时通常会感激。
我的理解是,如果模块完全无状态(即不调用var dependency1 = new Dependency1()
),两种解决方案都不应有所作为。
这给我带来了几个问题:
答案 0 :(得分:0)
Node.js的require
内部行为解决了您的问题,因为模块是cached。它们将被创建一次,之后您将检索实例。您没有因第二种方法的状态而导致的额外问题,但是相同的行为(即使用有状态模块时,很有必要)。
此外,当您想要使用它时,您不必担心模块依赖性(特别是,当将依赖项添加到子模块时,您不必修改主代码,特别是当它不是您的子模块时)。
因此,#2是一种更好的方法。
在app.js
:
var subfile1 = require('./subfile1');
在subfile1.js
:
var dependency1 = require('dependency1');
var subfile1;
// many things
module.exports = subfile1;