Search code examples
javascriptecmascript-6babeljs

ES6 - Exporting module with a getter


would like to export a module that get's the module's definition from some global object.

It's something like:

export {
  get DynamicModule() {
    return __globalFluxStorage.state.property.property.property.property
  }
}

...

import {DynamicModule} from 'dynamic-module'

We have a complex flux storage and DynamicModule is just a means of accessing __globalFluxStorage.state.property.property.property.property without the need to type in the long property accessor. Is this possible? Thanks.

Edit:

Since I am using babel, tried something like this:

Object.defineProperty(module.exports, "Forms", {
  get: function() {
    return __globalFluxStorage.state.property.property.property.property
  }
});

But does not work, i.e. {DynamicModule} is undefined


Solution

  • No, it is impossible to make a getter for a module export - they are variable bindings, not properties.

    However you could simply make that a default export:

    export default __globalFluxStorage.state.property.property.property.property;
    

    import DynamicModule from 'dynamic-module';
    

    If you want a named import, you'll have to declare the name in your export:

    export var DynamicModule = __globalFluxStorage.state.property.property.property.property;
    

    import {DynamicModule} from 'dynamic-module';
    

    This would also allow changing the value later when it's not available right at the time of the module being loaded:

    export var DynamicModule;
    …
    DynamicModule = __globalFluxStorage.state.property.property.property.property;
    

    (although in that case you might want to consider exporting a Promise or EventEmitter instead)