2016-06-17 12 views
1

Exportieren und Ändern von JavaScript-Objekt aus es6-Modul mit Webpack.Exportieren und Ändern von JavaScript-Objekten aus es6-Modul mit Webpack und Babel

Wenn ich die Eigenschaft config in index.js ändere, ändert es sich, aber es ist nicht unmöglich, Object.assign zu verwenden.
Mein Code beschreibt ein Problem besser.
Beispiel ist

config.js simplidied

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)); 

Warum Wert nicht nach Object.assign geändert, aber geändert vor Objekt.zuweisen?

Wenn ich der exportierten Konfiguration jedoch direkt in der Datei clientCode.js Wert zuweise, ändert sich der Wert nach 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)); 

Ich habe versucht, meine webpack Beobachter (denken, dass Problem in webpack des cache) neu zu starten, aber das Problem nicht gelöst wurde.

Wie kann ich die Konfigurationswerte in einer Datei ändern und geänderte Werte in einer anderen mit Object.assign verwenden? Warum erscheint dieses Problem?

Update:
Jetzt habe ich verstanden, dass das Problem in der Bestellung dieser Dateien Ausführung ist.
console.dir in clientCode.js wird vor dem anderen ausgeführt in index.js

Jetzt graben auf diese Weise.

Antwort

1

Problem wurde mit dieser Art des Modulimports gelöst.

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)); 
} 
+0

Nizza Lösung, dank – fungusanthrax