更新require引用的文件

时间:2017-07-25 10:00:44

标签: javascript node.js

我有一个文件(app.js),它通过config.js导入其他JS文件(require)。导入的文件会导入其他一些文件,依此类推。

我能够在app.js中读取导入文件的数据,但现在我想更新导入文件中的值。 config.js中的值来自其他导入的文件。我尝试以下列方式更新值,但它不会更新它们:

app.js

let config         = require ( 'config.js' );
config.db.user     = "newUser";

config.js

const dbConfig        = require ( './config-db' );
const assetsConfig    = require ( './config-assets' );
const smtpConfig      = require ( './config-smtp' );

module.exports = {
    db              : dbConfig.db,
    assets          : assetsConfig.assets,
    smtp            : smtpConfig.email
};

配置-db.js

module.exports = {
    db : {
        user     : 'user',
        password : '******',
        server   : 'test-db.test.com',
        database : 'testDB',
        timezone : '+02:00'
    }
};

我可以通过config-db来更新app.js中的值吗? require执行双向绑定吗?

更新

使用setter后,值会在app.js的正在运行的实例中更新。文件中的值仍然保持不变。一旦我重新开始app.js,变更就会丢失,这不是我想要的。

app.js

let config       = require ( 'config.js' );
config.db.update = "{'user': 'newUser'}";

配置-db.js

module.exports = {
    db : {
        set update ( data ) { // jshint ignore:line
            this.user = data.user;
        },
        user     : 'user',
        password : '******',
        server   : 'test-db.test.com',
        database : 'testDB',
        timezone : '+02:00'
    }
};

2 个答案:

答案 0 :(得分:0)

config.db.user = value

config.db是对config-db.js模块的引用

答案 1 :(得分:0)

  

有没有办法可以从app.js更新config-db中的值?

为了加快代码加载和解决循环require引用的目的,每个node.js进程都拥有它自己的require-cache。对于cource,您可以通过这种方式清除它 - https://gist.github.com/joerx/3296d972735adc5b4ec1

但更有用的方法是使用热模块重新加载,这可以通过Webpack将服务器端代码编译成bundle来轻松实现。 https://webpack.js.org/concepts/hot-module-replacement/ 在这种情况下,您可以使用ES6导入,也不会考虑重新导入模块 - 它将自动替换,并重新导入目标变量。