我注意到在一些情况下我看到了类似下面的内容:
// /reducers/reducer1.js
export default function reducer1(state = {}, action){
// etc...
}
// /reducers/reducer2.js
export default function reducer2(state = {}, action){
// etc...
}
// /reducers/index.js
import { combineReducers } from 'redux';
import reducer1 from './reducer1';
import reducer2 from './reducer2';
export default combineReducers({
reducer1,
reducer2
})
// /store.js
import masterReducer from './reducers';
export default function makeStore(){
// etc...
}
注意我们调用 import masterReducer from './reducers'
的最后一个"file"——一些人似乎认为这应该从索引中导入 default export
.js 文件。
这实际上是规范的一部分吗? - 我的解释/问题是,这是许多人使用 WebPack v1 的结果,该版本将 import
语句转换为 CommonJS 样式的 requires
语句?或者这会在 WebPack v2 中打破“官方”import
/export
支持吗?
最佳答案
Is this actually part of the specification?
没有。如何将模块标识符(在您的情况下为 './reducers'
)解析为实际模块留给模块加载器/ bundler 的实现,ES6 未指定。而且CommonJs里面好像没有说明要么。
Node 就是这样做的——当需要一个目录时,它的 index.js
文件将被使用。像 browserify 这样的 bundler 或 webpack遵循此约定(出于兼容性原因)。
关于使用 index.js 从 '/folder' 导入 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35442174/