希望导出一个模块,该模块从某个全局对象中获取模块的定义。
它类似于:
export {
get DynamicModule() {
return __globalFluxStorage.state.property.property.property.property
}
}
...
import {DynamicModule} from 'dynamic-module'
我们有一个复杂的磁通存储,而DynamicModule只是一种访问__globalFluxStorage.state.property.property.property.property的方法,无需输入long属性访问器。这可能吗?感谢。
编辑:
因为我正在使用babel,尝试过这样的事情:
Object.defineProperty(module.exports, "Forms", {
get: function() {
return __globalFluxStorage.state.property.property.property.property
}
});
但不起作用,即{DynamicModule}为undefined
答案 0 :(得分:4)
不,不可能为模块导出制作一个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)
答案 1 :(得分:0)
如果每次在导入中使用该值时都需要重新评估该值,则可以使用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