2015-11-26 52 views
4

我開發一個陣營& Reflux應用程式,其由webpackbabel-loader(V6)捆綁,並且我遇到ES6模塊的依賴關係的問題如何解決es6模塊依賴關係?

例如,我有使用迴流.connect()混入的成分:

import MyStore from '../stores/my-store'; 

const Component = React.createClass({ 
    mixins: [Reflux.connect(MyStore)] 
}); 

當我像這樣在每個文件中分別導入所有模塊時,一切都很好。

然後我嘗試用解構import語句來提高我的代碼:

...在一個組件:

//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行中的所有組件導入。

但是,當我用這個,一些依賴最終beeing undefined當我使用它們

如果我使用相同的更新例子...

//import MyStore from '../stores/my-store'; 
import { MyStore } from '../stores'; // Instead 

const Component = React.createClass({ 
    mixins: [Reflux.connect(MyStore)] 
}); 

... MyStore參數結束undefined in Reflux.connect方法。

我試圖在調試器中排除故障,但我並不真正意識到生成的包中的__webpack_require__(xxx)語句會發生什麼情況。必須存在循環依賴關係,babel-loader或webpack要求在重新導出各個模塊時存在index.js文件。

你知道有什麼工具可以幫我弄清楚嗎?我試圖madge但它不與ES6模塊的工作,並在任何錯誤

+0

您是否在使用此技術引入循環依賴關係? – Bergi

+0

我不知道,我猜應用程序中已經存在循環依賴關係,但它們本身並不是問題*,它很好地由es6裝載程序管理。這是將所有商店,所有組件等捆綁在重新導出它們的index.js文件中導致問題的事實。我無法看到爲什麼或如何,因此我的問題。 – Pandaiolo

+0

要清楚:我不知道如何輕鬆分析/可視化我的應用程序模塊依賴關係:) – Pandaiolo

回答

0

import語句用來導入已經從導出的函數,對象或原語我找不到任何會告訴我外部模塊。

根據MDN doc,您可以導入Modules而不是目錄。

import name from "module-name"; 
import * as name from "module-name"; 
import { member } from "module-name"; 
import { member as alias } from "module-name"; 
import { member1 , member2 } from "module-name"; 
import { member1 , member2 as alias2 , [...] } from "module-name"; 
import defaultMember, { member [ , [...] ] } from "module-name"; 
import defaultMember, * as alias from "module-name"; 
import defaultMember from "module-name"; 
import "module-name"; 

參考網址:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import
http://es6-features.org/#ValueExportImport
https://github.com/lukehoban/es6features#modules
http://www.2ality.com/2014/09/es6-modules-final.html

作爲一種變通方法保留一個文件爲base.js,包括所有的3個文件。

+0

我加載了Chrome Canary和這個回購,但是我意識到它並沒有使用'import'語句,而是每個文件在index.html中都加載了'

2

爲了獲得有關構建擴展的信息,運行:

webpack --profile --display-modules --display-reasons 

它會給你的優化/分析信息的一羣人。

+1

謝謝,我會添加由@bebraw提出的'--json'開關,這對於大型應用程序來說非常有用,但它提供了有關該bundle的更多信息,它不會識別運行時依賴性問題 – Pandaiolo