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?
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? */#!/*JoePea -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20160810/07e0b7b4/attachment-0001.html>