如何将node.js拆分为多个文件?

时间:2018-08-30 12:38:18

标签: javascript node.js

您好,我正在寻找一种有效的方法,将节点js分成几个单独的模块以进行更好的管理,但遇到了我无法克服的问题。我将在示例代码中进行解释:

server.js

const module1 = require('./lib/module1');
const module2 = require('./lib/module2');

module1.example();

/lib/module1.js

const module2 = require('./module2');

class Module1 {
    constructor() {}

    example() {
        var test = module2.someNumber();
        console.log(test);
    }

    getNumber() {
        var number = 10;
        return number;
    }
}
module.exports = new Module1();

/lib/module2.js

const module1 = require('./module1');

class Module2 {
    constructor() {}

    someNumber() {
        let some = module1.getNumber();
        return some;
    }
}
module.exports = new Module2();

所以我打电话给module1.example();时出现错误:

  

module1.getNumber不是函数

我知道这是因为两个模块都互相请求,但是有解决方案吗?

2 个答案:

答案 0 :(得分:0)

要处理这种周期性依赖关系,您可以只在需要的地方使用所需的模块:

module1.js

class Module1 {
  constructor() {}

  example() {
    const module2 = require('./module2');

    var test = module2.someNumber();
    console.log(test);
  }

  getNumber() {
    var number = 10;
    return number;
  }
}
module.exports = new Module1();

module2.js

class Module2 {
  constructor() {}

  someNumber() {
    const module1 = require('./module1');

    let some = module1.getNumber();
    return some;
  }
}
module.exports = new Module2();

但是通常最好尝试消除这种循环依赖性。

答案 1 :(得分:0)

节点中有许多技巧可以处理循环依赖other answer中提到了一种方法,该方法涉及本地解析依赖。

另一种解决方案是将require向下移动,使其成为使用另一个模块的模块的最后一行:

module1.js

class Module1 {
    constructor() {}

    example() {
        var test = module2.someNumber();
        console.log(test);
    }

    getNumber() {
        var number = 10;
        return number;
    }
}
module.exports = new Module1();

const module2 = require('./module2');

module2.js

class Module2 {
    constructor() {}

    someNumber() {
        let some = module1.getNumber();
        return some;
    }
}
module.exports = new Module2();

const module1 = require('./module1');

这样,模块解析器不会尝试先加载模块(并在达到周期时获取空导出),而是将解析推迟到执行实际代码之前(此时,依赖项已经存在)