ES模块:将命名导出作为模块导入吗?

时间:2019-05-07 02:03:20

标签: javascript typescript ecmascript-6 es6-modules

funcs.js

export function hello() {
  echo 'foo'
}

export function foo() {
  echo 'bar'
}

index.js

import * as Funcs from './funcs.js' // import module, does tree-shaking work?
import { hello } from './funcs.js' // optimise imports, potentially clashes with other imports
import { hello } as Funcs from './funcs.js' // what should make sense, but isn't supported syntax

// this should be straight forward... 
Funcs.hello()

// vs having some random function on top level scope
hello()

// and this shouldn't work if I didn't import it
Funcs.foo()

这是我的问题。如果我使用窗体1与窗体2,它对摇晃树有什么影响吗?窗体2对于表达性而言比较可取,但是窗体1是将所有内容都放入模块/命名空间的唯一方法。表格3是我的建议,但也许我不知道有人没有反对为什么不应该支持这一点。

我不知道该去哪里提出建议,甚至不知道要构建一个babel插件来做到这一点。

编辑:就上下文而言,我正在使用一些较新的库(rxjs),这些库不公开默认的导出内容,而是依靠开发人员来加载其所需的所有功能。因此,我无法控制这些出口。

编辑:建议的解决方法是简单地创建一个全局导入文件,该文件将导入所有全局所需的导入,并将其全部导出为模块,所以这就是我现在要做的。

编辑:找到es-discuss。相反,它将去那里以希望进行讨论。

https://esdiscuss.org/topic/syntax-to-pick-named-exports-from-a-module

https://esdiscuss.org/topic/proposal-importing-selected-chucks-of-a-module-into-an-object

编辑:最启发性的讨论在这里找到。

https://esdiscuss.org/topic/import-foo-bar-as-obj-from-module

3 个答案:

答案 0 :(得分:1)

对于表格3,您不能只做import { hello as Funcs } from './funcs.js'吗?

答案 1 :(得分:1)

事实证明,我并不是唯一一个有这种想法的人。该线程将详细介绍与此语法相关的一些潜在问题...我不一定同意,但是事实就是如此。

https://esdiscuss.org/topic/import-foo-bar-as-obj-from-module

答案 2 :(得分:0)

表2将受益于摇树。 import *表示您不希望摇晃树并且想要导入所有内容。因此webpack会这样做。