【问题标题】:Import from folder ES6从文件夹 ES6 导入
【发布时间】:2017-03-18 04:09:43
【问题描述】:

我正在学习JS,我有这样的东西。

//all inside folder reducers

//reducer1.js
export default reducer1

//reducer2.js
export default reducer2

//index.js
import reducer1 from './reducer1'
import reducer2 from './reducer2'
//then combine reducer
export default index

//outside folder reducers
import reducer from './reducers'

因为./reducers 只是一个文件夹,并且里面有 3 个文件和 3 个导出默认值,我不明白这是怎么工作的?它如何知道将导入文件夹中的哪个导出默认值?

谢谢。

【问题讨论】:

    标签: javascript reactjs ecmascript-6 redux react-redux


    【解决方案1】:

    使用 Webpack,当你导入一个文件夹时,模块加载器会导入文件夹内的 index.js。您在 index.js 中导出索引,因此在执行 import reducer from './reducers' 时将其导入。导入文件夹只是import reducer from reducers/index 的简写。意思是两个 import 语句是等价的。

    综上所述,import reducer from './reducers'import reducer from reducers/index 相同。

    【讨论】:

    • 谢谢!所以默认情况下,如果我们希望它从文件夹中导入一些东西,那么文件必须命名为 index.js ?
    • @Quoc-Hao-Tran。是的,或者您需要明确命名文件。例如import reducer from reducers/myReducer
    • "With ES6" 请注意,此行为与 ES6/JavaScript 无关。如何解释模块标识符取决于环境模块加载器,或使用的模块捆绑器。您描述的行为对于 NodeJS 和 webpack 很常见。
    • 不,那不是真的。导入和导出是新的 ES6 语法的一部分。最流行的 ES 实现是 JavaScript。 JS 有模块加载器,所以你不需要 NodeJS 或 webpack 来导入或导出模块。 Webpack 在加载模块时会给你带来很多好处。 2ality.com/2014/09/es6-modules-final.html
    • [这是关于解释模块标识符的所有规范](ecma-international.org/ecma-262/7.0/…):“HostResolveImportedModule 是一个实现定义的抽象操作,它提供了对应于的具体模块记录子类实例ModuleSpecifier 字符串,说明符,出现在由模块记录引用模块表示的模块的上下文中。"
    猜你喜欢
    • 2015-11-25
    • 2020-10-16
    • 2017-06-15
    • 2020-09-08
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    相关资源
    最近更新 更多