How to solve this basic ES6-module circular dependency problem?
/#!/JoePea
joe at trusktr.io
Thu Aug 11 00:04:28 UTC 2016
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>
More information about the es-discuss
mailing list