【问题标题】:ES6: "import * as alias" vs "import alias"ES6:“导入 * 作为别名”与“导入别名”
【发布时间】:2018-01-23 15:45:11
【问题描述】:

两者有什么区别:

import utils from 'utils'

import * as utils from 'utils'?

情况 A:

//utils.js
export function doSomething()
{
//...
}

情况 B:

//utils.js
export function doSomething()
{
//...
}
export default function doSomethingDefault()
{
//...
}

更新

我被 vscode 的智能感知功能误导了,但根据建议,在 node+babel 上进行的小测试显示了差异:

//index.js
import utilsCaseA from './utils1'
import * as utilsCaseAWildcard from './utils1'
var utilsCaseARequire = require('./utils1')

import utilsCaseB from './utils2'
import * as utilsCaseBWildcard from './utils2'
var utilsCaseBRequire = require('./utils2')

var compareObjects = 
{
    utilsCaseA, utilsCaseAWildcard, utilsCaseARequire,utilsCaseB,utilsCaseBWildcard,utilsCaseBRequire
};
console.log(compareObjects);

【问题讨论】:

  • 当然可以。试试console.log(utils) 看看有什么不同。
  • 我刚刚调整了我的问题,请看一下。我看不出“案例A”有什么不同。我错过了什么吗?
  • 不过,看看utils 的样子。是的,有区别!
  • 你是对的,Case A 的默认导入是未定义的。我被 vscode 的智能感知误导了。谢谢!

标签: javascript ecmascript-6 es6-modules


【解决方案1】:

从你的例子:

案例A:

//utils.js
export function doSomething()
{
//...
}

案例 B:

//utils.js
export function doSomething()
{
//...
}
export default function doSomethingDefault()
{
//...
}

结果:

import utils from 'utils'
utils() // (Case A: undefined, Case B: doSomethingDefault)

import * as utils from 'utils'
utils // (Case A: utils = { doSomething: function }, Case B: utils = { doSomething: function, default: function })

import { doSomething } from 'utils'
doSomething() // (both Case A and Case B: doSomething = doSomething)

案例 A 和案例 B 的区别在于,在案例 A 中,import utils from 'utils'utils 将是 undefined,因为没有默认导出。在情况 B 中,utils 将引用 doSomethingDefault

对于import * as utils from 'utils',在情况A 中utils 将有一个方法(doSomething),而在情况B 中utils 将有两种方法(doSomethingdefault)。

【讨论】:

    【解决方案2】:

    import utils from 'utils' 从 'utils' 包导入默认值。 undefined 在提供的情况下。

    import * as utils from 'utils' 导入整个模块 exports 对象以及所有可用的命名导出,包括默认值。

    【讨论】:

    • 我刚刚调整了我的问题,请看一下。我看不出“案例A”有什么不同。我错过了什么吗?
    • @PhilippMunin 如果你在这两种情况下都登录utils,你会看到不同。
    • 谢谢。如果您不介意,我会将 inostia 的回答标记为答案 - 再多一点分数就会对他感到鼓舞
    • @PhilippMunin 当然。编辑后他的回答更加相关。
    • @PhilippMunin:我觉得这个答案更简洁明了。
    猜你喜欢
    • 2018-03-26
    • 1970-01-01
    • 2022-01-14
    • 2016-04-07
    • 1970-01-01
    • 2016-11-30
    • 2019-05-13
    • 2016-09-17
    相关资源
    最近更新 更多