babel 5和babel 6之间发生的事情导致我导入的模块存在于对象的默认属性之外

What happened between babel 5 and babel 6 to cause my imported module to exist off of the default property of an object?

本文关键字:babel 存在 于对象 对象 属性 默认 模块 之间 导入      更新时间:2023-09-26

更新到babel 6后,如下所示:

containers/
    game.js
action-creators/
    actionCreators.js
    asyncActionCreators.js
    index.js

actionCreators.js有以下代码:

export function x(){}
export function y(){}

asyncActionCreators.js有以下代码:

export const j = () => (a, b) => {}
export const k = () => (a, b) => {}

index.js包含以下代码:

import _ from 'lodash';
import * as actions from './actionCreators';
import * as asyncActions from './asyncActionCreators';
const Actions = _.assign(actions, asyncActions);
export default Actions;

在game.js中,我有以下代码:

import * as Actions from './../action-creators';

行动评估为:

{ 
    __esModule: true
    default: Object
    __proto__: Object
}

有人能解释一下吗?

这与预期的一样。您的index.js文件仅导出了default导出。

import * as Actions from './../action-creators';

将导入所有命名导出和默认导出,但您没有任何命名导出。您的方法在Babel 5中确实有效,但根据ES6规范中导入到导出的映射,它是无效的。这已经在Babel 6中讨论了它如何导出默认值。

而不是

import _ from 'lodash';
import * as actions from './actionCreators';
import * as asyncActions from './asyncActionCreators';
const Actions = _.assign(actions, asyncActions);
export default Actions;

你应该做的是

export * from './actionCreators';
export * from './asyncActionCreators';

它基本上从文件中获取所有命名导出并从索引中导出。