使用带有babel转换器的es6模块导入类和调用静态方法

dag*_*da1 25 javascript ecmascript-6

我有以下类定义:

class EmberReflux{
  static createActions(actions) {
    console.log(actions);
  }
}

export { EmberReflux };
Run Code Online (Sandbox Code Playgroud)

当我从不同的文件导入它时:

import EmberReflux from '../utils/ember-reflux';

let TodoActions = EmberReflux.createActions(
[
  "addItem",
  "undo",
  "redo"
]);

export { TodoActions };
Run Code Online (Sandbox Code Playgroud)

转化后看起来像这样

define('ember-reflux/utils/todo-actions', ['exports', 'ember-reflux/utils/ember-reflux'], function (exports, EmberReflux) {

    'use strict';

    var TodoActions = EmberReflux['default'].createActions(["addItem", "undo", "redo"]);

    exports.TodoActions = TodoActions;

});
Run Code Online (Sandbox Code Playgroud)

我不确定默认值是什么 EmberReflux['default']

我想像这样调用静态类方法:

EmberReflux.createActions
Run Code Online (Sandbox Code Playgroud)

但相反,我必须这样称呼它:

EmberReflux.EmberReflux.createActions
Run Code Online (Sandbox Code Playgroud)

ale*_*ods 37

您有两种选择:

  1. EmberReflux像你一样出口:

    export { EmberReflux };
    
    Run Code Online (Sandbox Code Playgroud)

    然后导入它像:

    import { EmberReflux } from '../utils/ember-reflux';
    
    Run Code Online (Sandbox Code Playgroud)
  2. default导出时使用:

    export default EmberReflux;
    
    Run Code Online (Sandbox Code Playgroud)

    并导入它(就像你在做):

     import EmberReflux from '../utils/ember-reflux';
    
    Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您都可以使用您的EmberReflux喜好:

EmberReflux.createActions();
Run Code Online (Sandbox Code Playgroud)


小智 9

我没有足够的声誉来评论,alexpods的答案是完美的,但为了理解我们的朋友Ced问:

为什么我们需要第二个例子中的默认值?换句话说,为什么我们不能直接出口EmberReflux?

你这样写的时候:

export { EmberReflux };
Run Code Online (Sandbox Code Playgroud)

这是同样的写作:

export { EmberReflux: EmberReflux };
Run Code Online (Sandbox Code Playgroud)

这就是你需要运行EmberReflux.EmberReflux的原因,解决方案非常简单:

export default EmberReflux;
Run Code Online (Sandbox Code Playgroud)