Babel.js ES6 -使用getter导出模块

2izufjch  于 2023-01-06  发布在  Babel
关注(0)|答案(3)|浏览(148)

我想导出一个模块,该模块从某个全局对象中获取模块的定义。
它大概是这样的:

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

...

import {DynamicModule} from 'dynamic-module'

我们有一个复杂的通量存储,DynamicModule只是一种访问__globalFluxStorage. state. property. property. property. property的方法,不需要输入long属性访问器。这可能吗?谢谢。
编辑:
因为我使用巴别塔,尝试这样的东西:

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

但不起作用,即{动态模块}为undefined

qgelzfjb

qgelzfjb1#

不,不可能为模块导出制作getter--它们是变量绑定,而不是属性。
但是,您可以简单地将其设置为默认导出:

export default __globalFluxStorage.state.property.property.property.property;
import DynamicModule from 'dynamic-module';

如果需要命名导入,则必须在导出中声明名称:

export var DynamicModule = __globalFluxStorage.state.property.property.property.property;
import {DynamicModule} from 'dynamic-module';

这还允许在模块加载时无法使用该值的情况下稍后更改该值:

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

(尽管在这种情况下,您可能需要考虑导出Promise或EventEmitter)

v440hwme

v440hwme2#

如果每次导入时都需要重新计算值,则可以使用getter导出对象或导出函数。

export const _ = {
  get DynamicModuleGetter() {return __globalFluxStorage.state.property.property.property.property}
}

export function DynamicModuleFunction() {return __globalFluxStorage.state.property.property.property.property}

然后导入

import { _, DynamicModuleFunction } from 'dynamic-module'

// getter
const value1 = _.DynamicModuleGetter
const {DynamicModuleGetter} = _        // this evaluates the getter

// function
const value2 = DynamicModuleFunction()

一个更详细的例子

let obj = {
  foo: {
    bar: {
      baz: {
        bak: {
          value: 1
        },
        fak: {
          value: 2
        }
      }
    }
  }
}

export const _ = {
  get shortcut() {return obj.foo.bar.baz}
}

export function shortcut() {return obj.foo.bar.baz}

进口

import { _, shortcut } from './shortcut'

let g = _.shortcut.bak.value       // g = 1
let f = shortcut().fak.value       // f = 2
let {shortcut: {bak: {value}}} = _ // value = 1
edqdpe6u

edqdpe6u3#

const temp = {
    get myGetter() { return 1; }
}
export const myGetter  = temp.myGetter;

相关问题