Babel编译常量为undefined

时间:2017-08-29 07:58:31

标签: javascript babeljs

使用此代码

const noCurrencies: Map<CurrencyCode, Currency> = new Map();

/**
 * Reducer for the finished currency request.
 */
export function currencies(state: Map<CurrencyCode, Currency> = noCurrencies, action: Action): Map<CurrencyCode, Currency> {
  switch (action.type) {
    case SET_CURRENCIES:
      return action.currencies;

    default:
      console.log('currencies(reducer): noCurrencies', noCurrencies)
      return state;
  }
}

我得到了这个控制台输出:

currencies(reducer): noCurrencies undefined

这是Babel的已知问题吗?我该如何调试?我感觉这是因为这个特定的文件在初始化期间被调用了两次,因此与另一个文件有一个循环依赖。

(我不是&#39;从头开始重新创建一个repro&#39;所以不要建议,并且类型为https://github.com/flowtype/flow-typed在预处理器步骤中被删除,我也试过没有类型,结果相同)

1 个答案:

答案 0 :(得分:0)

原因是模块之间存在大的循环依赖关系。即使使用ECMAScript模块语法,编译器(WebPack 3 + babel)也不够智能,只能在需要时加载所需的内容;但是,只要在使用/触摸文件时评估所有导出和导入。

这意味着如果您有index.js个文件可以自由地从它们周围导出内容,为其文件夹外的调用者创建一个入口点,您可能会遇到类似这样的问题。

我必须通过代码库并通过将导入直接导入索引文件的周围文件来使导入“深入”。

E.g。

  • 文件夹A.
    • epics.js
    • commands.js
    • index.js
    • types.js
    • actions.js
    • reducers.js
    • messages.js
    • ...
  • 文件夹B.
    • import { create } from '../A'变为import { create } from '../A/types'
    • 以及其他所有事情;最后,我只是从index.js
    • 导出React视图和类型