Ecmascript 6 ES6&x2B;在导出默认值内导出导入

Ecmascript 6 ES6&x2B;在导出默认值内导出导入,ecmascript-6,import,export,Ecmascript 6,Import,Export,我正试着这么做 state.js export default { someValue: 'fooBar' } export default { export {default as state} from './state', export {default as actions} from './actions' } index.js export default { someValue: 'fooBar' } export default { export {de

我正试着这么做

state.js

export default {
  someValue: 'fooBar'
}
export default {
  export {default as state} from './state',
  export {default as actions} from './actions'
}
index.js

export default {
  someValue: 'fooBar'
}
export default {
  export {default as state} from './state',
  export {default as actions} from './actions'
}

但我不允许,
意外的关键字“导出”(2:2)
。有什么方法可以做到这一点吗?

您只能在模块的顶层使用
导入
导出
。(您可以在其他地方使用动态
import()
,但不能使用静态版本。)

因此,要进行导出,您必须执行您在评论中所说的您试图避免的操作:

import {default as state} from './state';
import {default as actions} from './actions';
export default {
  state, actions
};
但是,请注意您在那里导出的内容:一个具有
状态
动作
属性的对象,其初始值来自导入的
状态
动作
,但未与其连接。导入该对象的代码可以更改这些属性。您可以维护实时绑定:

import {default as state} from './state';
import {default as actions} from './actions';
export default {
  get state() {
    return state;
  },
  get actions() {
    return actions;
  }
};
但在这一点上,您正在重新创建模块名称空间对象。您可能更喜欢简单地:

export {default as state} from './state.js';
export {default as actions} from './actions.js';
然后使用那些命名的导出:

import {state, actions} from "./index";
或者使用模块名称空间对象

import * as index from "./index";
// Use `index.state` and `index.actions`

你到底想达到什么目的?嵌套的
export
没有任何意义,因为
export
不是一个表达式。我只是试图从“./state”中删除导入行
import state,我想您可能正在查找其中的
export default{state}
,但浏览器支持目前仅限于浏览器的预发布版本。即使有了这些,您仍然无法获得导出的值,而是得到了一个包含这些值的承诺。