circular references can't resolve correctly if exports is overwritten:
in module A:
exports = foo
then later in module A:
doSomeFunction()
that results in an import of module A.
expected: module A is partially defined with foo
actual: jsio doesn't pull the new exports out of the module until after the import returns, so we don't have access to foo.