使用webpack和babel从es6模块导出和更改javascript对象

时间:2016-06-17 14:50:44

标签: javascript module ecmascript-6 webpack babeljs

使用webpack从es6模块导出和更改javascript对象。

如果我在index.js中更改config的属性,它会改变,但使用Object.assign并非不可能。 我的代码更好地描述了一个问题 示例简化

config.js

let config = {
    plugins: {
        slick: {
            autoplaySpeed: 1000,
            autoplay: true,
        }
    }
};
export default config;

index.js

import config from './config.js'
config.plugins.slick.autoplaySpeed = 500;
import './clientCode';

clientCode.js

import config from './config';

//autoplaySpeed: 500, as it need to be
console.dir(config.plugins.slick);  
//autoplaySpeed: 1000, needs to be 500, ->why<- value not changed?
console.dir(Object.assign({}, config.plugins.slick)); 

为什么值在Object.assign之后没有改变,但在Object.assign之前改变了?

但是如果我直接在clientCode.js文件中为导出的配置赋值,那么在Object.assign之后值会发生变化。

clientCode.js

import config from './config';
config.plugins.slick.autoplaySpeed = 500;//new value assigning

//autoplaySpeed: 500, as it need to be
console.dir(config.plugins.slick)
//autoplaySpeed: 500, as it need to be
console.dir(Object.assign({}, config.plugins.slick)); 

我试图重新启动我的webpack观察程序(认为问题出在webpack的缓存中), 但这并没有解决问题。

如何更改一个文件中的配置值,并使用Object.assign在另一个文件中使用更改的值? 为什么会出现此问题?

更新:
现在我已经明白问题在于这些文件的执行顺序 clientCode.js中的console.dir比index.js中的其他一个执行

现在就这样挖掘。

1 个答案:

答案 0 :(得分:1)

通过这种模块导入方式解决了问题。

index.js

import config from './config.js'
config.plugins.slick.autoplaySpeed = 500;
import init from './clientCode';
init();

clientCode.js

import config from './config';
export default function init(){
    //autoplaySpeed: 500, as it need to be
    console.dir(config.plugins.slick);  
    //autoplaySpeed: 500, 500, as it need to be
    console.dir(Object.assign({}, config.plugins.slick)); 
}