9

我不确定我在这里缺少什么。我正在使用 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
});

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

4

1 回答 1

10

我认为围绕这​​个问题有两点:

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

方法一

xyz.js

export const a = 1;

abc.js

import {a} from "xyz";

方法二

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. 默认导出语句不正确

它可以是

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

或者

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

希望这会帮助你。有关更多详细信息,请参阅

于 2016-04-05T09:06:57.553 回答