【发布时间】:2016-02-29 10:49:56
【问题描述】:
我正在开发一个 React & Reflux 应用程序,它由 webpack 和 babel-loader (v6) 捆绑在一起,我遇到了 es6 模块依赖问题
例如,我有一个使用回流.connect() mixin 的组件:
import MyStore from '../stores/my-store';
const Component = React.createClass({
mixins: [Reflux.connect(MyStore)]
});
当我像这样在每个文件中单独导入所有模块时,一切都很好。
然后我尝试使用解构的导入语句来改进我的代码:
...在一个组件中:
//import One from '../js/one';
//import Two from '../js/two';
//import Three from '../js/three';
import { One, Two, Three } from '../js'; // Instead
...在js/index.js:
import One from './one';
import Two from './two';
import Three from './three';
export { One, Two, Three };
使用上述技术,应用程序源代码文件更加简洁,因为我可以在一行import 中导入所有组件。
但是当我使用它时,一些依赖项在我使用它们时最终会变成undefined
如果我使用相同的更新示例...
//import MyStore from '../stores/my-store';
import { MyStore } from '../stores'; // Instead
const Component = React.createClass({
mixins: [Reflux.connect(MyStore)]
});
...MyStore 参数在 Reflux.connect 方法中以 undefined 结尾。
我尝试在调试器中进行故障排除,但我并不真正了解生成的包中的 __webpack_require__(xxx) 语句发生了什么。必须存在循环依赖,babel-loader 或 webpack 需要无法确定何时有 index.js 文件重新导出单个模块。
你知道任何可以帮助我解决这个问题的工具吗?我尝试了madge,但它不适用于 es6 模块,我找不到任何可以告诉我哪里有问题的东西
【问题讨论】:
-
您是否使用这种技术引入循环依赖?
-
我不知道,我猜我的应用程序中已经存在循环依赖,但它们本身不是问题,它由 es6 loader 管理得很好。这是将所有商店、所有组件等捆绑在重新导出它们的 index.js 文件中的事实,这会导致问题。我不知道为什么或如何,因此我的问题。
-
要明确:我不知道如何轻松分析/可视化我的应用程序模块依赖关系:)
-
@Pandaiolo Analyse tool 可以做到这一点。您需要执行
webpack --profile --json > stats.json之类的操作来获取工具所需的文件。 -
@bebraw 谢谢,很棒的工具!但即使不包括 babel polyfill,我的包中也有 600 个模块,所以可视化屏幕很慢而且没用。有什么方法可以专门发现循环或有问题的依赖关系?
标签: ecmascript-6 webpack babeljs refluxjs es6-module-loader