/#!/JoePea (2016-08-11T00:04:28.000Z)
forbes at lindesay.co.uk (2016-08-25T10:37:59.105Z)
I found a solution that works in environments compiled by Babel, using the [workaround suggested by Ben Newman](https://github.com/meteor/meteor/issues/7621#issuecomment-238992688): ```js // --- Module A import C from './C' let A = A // @benjamn's workaround applied export function setUpA(C) { A = class A extends C { // ... } } export {A as default} ``` ```js // --- Module B import C from './C' let B = B // @benjamn's workaround applied export function setUpB(C) { B = class B extends C { // ... } } export {B as default} ``` ```js // --- Module C import A, {setUpA} from './A' import B, {setUpB} from './B' let C = class C { constructor() { // this may run later, after all three modules are evaluated, or // possibly never. console.log(A) console.log(B) } } setUpA(C) setUpB(C) export {C as default} ``` ```js // --- Entrypoint import A from './A' console.log('Entrypoint', new A) // runs the console.logs in the C constructor. ``` Although that works in my environment which is compiled from ES6 modules to CommonJS by Babel, it [doesn't work in Rollup.js](http://goo.gl/PXXBKI), and may not work in other ES6 module implementations. Is there some solution that will theoretically work in any ES6 module environment?