es6-module默认导出导入为undefined

时间:2016-03-30 02:30:26

标签: javascript bigcommerce jspm es6-module-loader

我不确定我在这里缺少什么。我正在使用jspm和es6-module-loader开发一个项目。我有一个模块定义如下:

import hooks from './hooks';
import api from './api';
import tools from './tools';

const StencilUtils = {
    hooks: hooks,
    api: api,
    tools: tools,
};

export {hooks, api, tools};
export default StencilUtils;

/* global define */
(function(root) {
    if (typeof define === 'function' && define.amd) {
        define(function() {
            return (root.stencilUtils = StencilUtils);
        });
    } else if (typeof module === 'object' && module.exports) {
        module.exports = StencilUtils;
    } else {
        window.stencilUtils = StencilUtils;
    }
}(this));

我正在将该模块导入另一个文件,并使用它如下:

import utils from 'bigcommerce/stencil-utils';

utils.hooks.on('cart-item-add', (event, form) => {
    // do stuff
});

加载文件后,我收到utilsundefined的错误消息。如果我将文件更改为:

import {hooks} from 'bigcommerce/stencil-utils';

hooks.on('cart-item-add', (event, form) => {
    // do stuff
});

它正常工作。因此,使用默认导出语句似乎无法正常工作。导入此问题的导入或导出语句是否存在明显错误?

1 个答案:

答案 0 :(得分:4)

我认为这个问题有两件事:

  1. 当您命名导出时,您可以通过导入为库或使用对象销毁来访问它们。
  2. 方法1

    xyz.js

    export const a = 1;
    

    abc.js

    import {a} from "xyz";
    

    方法2

    xyz.js

    export const a = 1;
    

    abc.js

    import {* as myModule} from "xyz";
    console.log(myModule.a);
    

    所以在你的情况下

    export {hooks, api, tools};
    

    它可以是

    import * as utils from 'bigcommerce/stencil-utils';
    

    import {hooks} from 'bigcommerce/stencil-utils';
    
    1. 默认导出语句不正确
    2. 它可以是

      export default {
          hooks: hooks,
          api: api,
          tools: tools,
      };
      

      或者

      const StencilUtils = {
         hooks: hooks,
         api: api,
         tools: tools,
      };
      export { StencilUtils as default };
      

      希望这会对你有所帮助。有关详细信息,请参阅this