我有一个文件(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'
}
};
答案 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导入,也不会考虑重新导入模块 - 它将自动替换,并重新导入目标变量。