簡體   English   中英

為什么導出*和導入*在ES2015模塊中的工作方式不同

[英]Why export * and import * work differently in ES2015 module

在ES2015模塊中, export * from 'someModule'不會export * from 'someModule'導出默認導出,而從“ someModule” import * as m from 'someModule'導入默認導出。

例如,在module.js中:

export default 'default'
export const foo = 'foo'

在proxy.js中:

export * from './module'

在bar.js中:

import * as m from './module'  // m is { foo: 'foo', default: 'default' }
import * as p from './proxy'  // p is { foo: 'foo' }

我已經使用webpack 4.29.6(零配置)對其進行了測試。

MDN寫道:

以下語法不會從導入的模塊導出默認導出:

從…出口*;

如果需要導出默認值,請編寫以下內容:

從'mod'導出{default};

export * from 'someModule'導出默認導出是合理的,因為當前模塊可能還希望導出自己的默認模塊。 但是為什么import *仍然包含默認導出? 這是ES2015模塊規范中的預期行為嗎?

但是為什么import *仍然包含默認導出?

模塊名稱空間對象包括模塊的所有導出。 此處的default標識符沒有什么特別的。 沒有理由明確省略它。

這是ES2015模塊規范中的預期行為嗎?

是。

export * from 'someModule'導出默認導出是合理的,因為當前模塊可能還希望導出自己的默認模塊。

Afaik,發生異常的實際原因是,您可以從多個模塊中export * ,而不會使其default導出沖突。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM