导入语句和 Babel

Import statement and Babel

我使用来自 Facebook fbjskeyMirror 定义了两个常量。

// file1.js
import keyMirror from 'fbjs/lib/keyMirror'
export default keyMirror({
    CONST1: null,
    CONST2: null,
})

然后将它们导入 file2.js:

// file2.js
import { CONST1, CONST2 } from './file1'
console.log(CONST1) // undefined

他们的价值观无法解决。如果我像这样更改 file2.js

// file2.js
import constants from './file1'
console.log(constants.CONST1) // CONST1

它工作正常。它出什么问题了?我正在使用带有 babel-preset-es2015 到 运行 脚本的 Babel 6。

您的导入不匹配,如果导出 default 导出,则必须导入 default。如果要使用 named exports 导入,则需要使用 named exports.

导出

对于

import { CONST1, CONST2 } from './file1'

要工作,你需要

export let {CONST1, CONST2} = keyMirror({
    CONST1: null,
    CONST2: null,
});

ES6 模块语法中 import 之后的 { CONST1, CONST2 } 与解构无关,因此您不应将其视为从默认导出中提取属性。相反,将其视为要从模块导入的名称列表。

您的解决方案可能适用于 Babel 5,但即便如此,它仍然无效。您可以查看 以获得更多解释。

每个 ES6 模块导出一组导出,default 为简单起见进行特殊处理。

import constants from './file1';

的缩写
import {default as constants} from './file1';

export default keyMirror({
    CONST1: null,
    CONST2: null,
})

本质上是

的缩写
var temp = keyMirror({
    CONST1: null,
    CONST2: null,
});
export {temp as default};