【发布时间】:2016-06-03 22:21:30
【问题描述】:
使用 ES2015 语法,我们有了新的导入语法,我一直在试图弄清楚如何将从一个文件导出的所有内容导入到另一个文件中,而无需将其包装在一个对象中,即。如同在同一个文件中定义一样可用。
所以,本质上是这样的:
// constants.js
const MYAPP_BAR = 'bar'
const MYAPP_FOO = 'foo'
// reducers.js
import * from './constants'
console.log(MYAPP_FOO)
这不起作用,至少根据我的 Babel/Webpack 设置,这种语法无效。
替代方案
这行得通(但如果您需要导入的东西不止几件,这会很长而且很烦人):
// reducers.js
import { MYAPP_BAR, MYAPP_FOO } from './constants'
console.log(MYAPP_FOO)
就像这样(但它将常量包装在一个对象中):
// reducers.js
import * as consts from './constants'
console.log(consts.MYAPP_FOO)
第一个变体是否有语法,或者您必须按名称导入每个事物,还是使用包装器对象?
【问题讨论】:
-
想象
import * from是可能的。如果reducers.js包含变量MYAPP_FOO会发生什么?或者如果另一个模块也包含MYAPP_FOO?还有更多需要考虑的事情。这不是一个好主意。 -
它的缺失无疑使静态分析更容易,因此可以说使用这种语法将是一种反模式。即便如此,它偶尔也会派上用场。
标签: javascript ecmascript-6 es6-module-loader