如何覆盖Node.js中的方法?

时间:2017-02-26 15:54:58

标签: node.js

我有一个模块,用于定义将由其他模块共享的功能。其中一些功能需要被覆盖。这就是我的想法,但它不起作用:

// shared_module.js
module.exports = {
    alternativeFun() {
        exports.doSomething()
        sharedFun()
    },
    sharedFun() {
        console.log('shared')
    }
}

// alternative_module1.js
module.exports = {
    doSomething() {
        console.log('alternative 1')
    }
}

// alternative_module2.js
module.exports = {
    doSomething() {
        console.log('alternative 2')
    }
}

// main.js
const shared1 = require('./shared_module')
shared1.doSomething = require('./alternative_module1').doSomething
shared1.alternativeFun()

const shared2 = require('./shared_module')
shared2.doSomething = require('./alternative_module2').doSomething
shared2.alternativeFun()

1 个答案:

答案 0 :(得分:1)

设置module.exports并不会神奇地改变exports的值。如果要在模块的功能中使用它,还需要将其分配给相同的值(module.exports = exports = ...)。