2015-11-26 3 views
4

Я разрабатываю Реагировать & Reflux приложения, которое поставляется по webpack с babel-loader (v6), и я испытываю ES6 модулей зависимостей выпусковКак устранить неисправности модулей e6?

К примеру, у меня есть компонент, который использует флегма .connect() подмешать:

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 }; 

App файлы исходного кода более сжатые, используя вышеприведенную технику, потому что я могу импортировать все компоненты в одну линию import.

Но когда я использую это, некоторая зависимость в конечном итоге неоспоримого undefined, когда я использую их

Если я использую один и тот же обновленный пример ...

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

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

... MyStore параметра заканчивается undefined в Reflux.connect способ.

Я попытался устранить неисправность в отладчике, но я не знаю, что происходит с операторами __webpack_require__(xxx) в сгенерированном пакете. Должна существовать циклическая зависимость, которую babel-loader или webpack require не могли определить, когда есть файлы index.js, которые реэкспортируют отдельные модули.

Знаете ли вы, что инструмент поможет мне понять это? Я попытался madge, но он не работает с ES6 модулями, и я не мог найти ничего, что бы мне сказать, где что не так

+0

Вы вводите круговые зависимости с помощью этой техники? – Bergi

+0

Я не знаю, я думаю, что в моем приложении уже есть круговые зависимости, но они не являются проблемой * per se *, это хорошо управляется загрузчиком es6. Это факт того, что вложенные все магазины, все компоненты и т. Д. В файлы index.js, которые реэкспортируют их, что вызывает проблему. Я не могу понять, почему и как, следовательно, мой вопрос. – Pandaiolo

+0

Чтобы быть ясным: я не знаю, как легко анализировать/визуализировать зависимости моего модуля приложения. – Pandaiolo

ответ

0

import оператор используется для импорта функций, объектов или примитивов, которые были экспортированы из внешний модуль.

В соответствии с документом MDN вы можете импортировать модули не в каталог.

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"; 

URL ссылки:
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', вместо этого каждый файл загружается с тегами'

2

Для того, чтобы получить расширенную информацию о сборке, выполните команду:

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

Это даст вам кучу информации для оптимизации/профилирования.

+1

Спасибо, я бы добавил переключатель '--json', предложенный @bebraw, который действительно полезен, однако, для крупномасштабного приложения, в то время как он дает больше информации о пакете, он не определяет проблемы зависимости от времени выполнения – Pandaiolo