【问题标题】:import statement returns module member as undefinedimport 语句将模块成员返回为未定义
【发布时间】:2016-10-15 07:40:34
【问题描述】:

模块(./lib/myModule.js):

const X = 10;

export default { X }

主模块(./index.js):

案例 1:

import { X } from './lib/myModule'

console.log(X) // undefined

案例 2:

import myModule from './lib/myModule'

const { X } = myModule;

console.log(myModule.X) // 10
console.log(X) // 10

为什么当使用对象匹配表示法返回 X 为未定义并导入完整对象时,成员保留其值?第一种情况有什么问题?

我正在使用 Babel 使用 preset-es2015 转换 ES 6 代码。

【问题讨论】:

    标签: javascript ecmascript-6 babeljs es6-modules


    【解决方案1】:

    那是因为 import 语句不使用解构赋值。在第一种情况下,您尝试导入未导出的成员 X。在第二种情况下,您要导入默认成员,然后使用 destructuring assignment 从中提取 X

    在第一种情况下,Babel 将 console.log() 行转换为:

    console.log(_myModule.X); // undefined
    

    而在第二种情况下,您会得到:

    console.log(_myModule2.default.X);
    

    【讨论】:

    • import 语句不使用解构赋值?我有点困惑这个模块模式如何与export default 一起工作。不使用default,所以只有export { X }import { X } from './lib/myModule 可以按预期工作。你可以解释为什么X在第一种情况下没有被导出,我该怎么办?
    • @AlexandreThebaldi 在第一种情况下,您将默认导出一个具有'X' 属性设置为X 变量的对象。如果您在没有default 的情况下导出(即export { X }),则您将X 变量导出为'X'(您不是在此处导出对象)。
    猜你喜欢
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 2021-08-16
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    相关资源
    最近更新 更多