# wt.core assets source Источник: https://bitbucket.org/bellord13/kit/ ## is a dependency wt.core Репозиторий wt.core: https://bitbucket.org/andreyleoua/wt.core/ Предназначен для асинхронной работы с ресурсами на веб-проектах. ## Установка В директории [php:wt.core] `app()->config()->get('templater.path') . '/kit'` (по умолчанию `/local/templater.dev/kit`) выполнить клонирование проекта ```bash git clone https://bellord@bitbucket.org/bellord13/kit.git ./ ``` ## Термины и определения в контексте фреймворка `Плагин` - сущность включающая в себя модуль, js-, css-файлы, шрифты. `Модуль` - составляющая плагина, определяемая как основной файл плагина (его наличие не обязательно в плагине) `PluginManager` - класс для работы с плагинами `window.kit` - объект, который изолирует все плагины ## Базовые принципы ✨ Инициализация Выдержка из плагина `core`: ```js manager = new PluginManager(global); manager.register('PluginManager', { alias: 'pm', type: MD_TYPE.HMD, handler: function(require, exports, module, global) { return module.exports = manager; } }); manager.register('config', { type: MD_TYPE.HMD, handler: function(require, exports, module, global) { global.config = Object.assign({}, defaultConfig, config); } }); manager.install('PluginManager'); ``` Создается экземпляр класса `PluginManager` и регистрирует сам себя. Переменная `global` выполняем роль фасада для всех установленных плагинов. В качестве глобальной переменной используется `window.kit`. В паре с менеджером сразу инициализируется `config` доступный из `window.kit.config`. ✨ Основные этапы работы с плагином: | этап | метод | |-------------|--------------------------------------------------------------| | Регистрация | register(`pluginId`, `config`) или registerPlugins(`object`) | | Загрузка | load(`pluginId`, `callback`) | | Установка | install(`pluginId`, `callback`) | | Запрос | require(`pluginId`, `callback`) | ## Примеры регистрации ### Пример регистрации Стандартного плагина (Тип default) ```js __PluginManager__.register('menu', { path: kit.config.assetsPath + '/menu', module: '/menu.js', type: 'loader', css: [ '/menu.css' ], deps: ['lib', 'align', 'utils'] }); kit.pm.register('UserCart', { path: '/assets/plugins/cart/', module: 'main.js', js: ['jquery.min.js', ['utils.js', 'api.js']], // jquery -> (utils + api вместе) css: ['style.css'], autoRequire: true }); ``` ### Пример регистрации HMD-плагина ```js kit.pm.register('Logger', { type: 'HMD', alias: ['AltLogger'], handler: function(require, module, exports, global) { var object = { log: function(msg) { console.log('[Logger]: ' + msg); } }; // kit.require('Logger') вернет module module.exports = object; // return задает, что определить в global.Logger и global.AltLogger return object.log; }, onInstall: function(p) { console.log('Logger готов!'); } }); ``` ### Пример регистрации UMD-плагина ```js kit.pm.register('MyUmdModule', { type: 'UMD', path: '/js/plugins/', module: 'my-plugin.umd.js', // Файл с UMD-оберткой deps: ['jquery'], // Если плагину нужен jQuery autoRequire: true, onInstall: function(plugin) { console.log('UMD модуль успешно инициализирован'); } }); ``` ### Пример регистрации ES-плагина ```js kit.pm.register('UserDashboard', { type: 'ES', // Указываем тип ES (ECMAScript) path: '/assets/modules/', // Базовый путь module: 'dashboard.js', // Файл, содержащий "export default" autoRequire: true, // Начать загрузку сразу onInstall: function(plugin) { // В plugin.module.exports попадет то, что экспортировано из файла console.log('ES-модуль загружен:', plugin.module.exports); } }); ``` > Особенности работы с типом ES в твоем скрипте: - Нативная загрузка: Вместо создания обычного тега `