* Abstract Module class
Now all modules inherits from `Module` class. You don’t need more to
write
```js
constructor({ config }) {
this.Editor = null;
this.config = config;
}
```
and
```js
/**
* @param Editor
* @param Editor.modules {@link CodexEditor#moduleInstances}
* @param Editor.config {@link CodexEditor#configuration}
*/
set state(Editor) {
this.Editor = Editor;
}
```
## Default exports improved
Now you don’t need more to write `.default` on module requiring
```js
let module = require(‘module’).default;
```
* Update docs
* Autoloading improved, utilities now global
# Autoloading
Webpack специально не дает использовать переменные в реквайрах типа:
let moduleName = 'toolbar.js';
let module = require(moduleName);
У нас в автолоадинге было так:
let modules = editorModules.map( module =>
require('./components/modules/' + module ));
и это работало, но не так как нужно. Он подключал не только нужные
модули из массива editorModules, а вообще все модули из папки
components/modules. Я заметил, что они попадают в сборку, хоть и не
указаны в реквайрах. Оказывается это так и задумано: Webpack на этапе
компиляции не знает что будет в переменной, то есть какой там будет
модуль. А ему нужно высчитать время компиляции, поэтому он вкладывет в
сброрку тупо все файлы из этой папки, и для каждого высчитывает время.
Так что по сути это было то же самое что просто написать
require('./components/modules/') и подключить все файлы.
Но наш автолоадер должен был подключать только указанные файлы, не
заходить в подпапки и не включать файлы, начинающиеся с подчеркивания.
Теперь автолоадинг работает так, как и задумывалось.
# Global visible modules
Теперь не нужно в каждом файле писать
import $ from '../dom';
и тд. Они автоматически будут доступны внутри модулей
* Update util.Dom
* Remove duplicated Babel helpers. Now it will be defined at once