node package manager

atengine

Введение

AtEngine - это фрймворк для построения полноценных приложений.

Свойства

AtEngine.argv

Объект с аргументами запуска приложения. Доступен без инициализации приложения.

AtEngine.initialized

Приложение инициализировано (true) или нет (false). Устанавливается в true после выполнения метода AtEngine.init(), не дожидаясь загрузки модулей. Устанавливается в false после выполнения метода AtEngine.destroy() и выгрузки всех модулей.

AtEngine.config

Объект конфигураци. Задается при иницаилизации AtEngine путем глубокого слития объектов файла конфигурация и объекта переданного в методе init().

AtEngine.appDir

Директория с основными компонентами приложения.

AtEngine.workDir

Рабочая директория приложения.

Методы

AtEngine.init(appDir[, config[, clb]])

Инициализации приложения: происходит четние конфигурации и загрузка модулей.

AtEngine.init(__dirname, config)

appDir - Путь до папки с приложением (модулями). Если не задан, то берется текущая рабоча дирректория (process.cwd()) config - Объект конфигурации

Объект конфигурации представляет собой:

{
	atEngine: {
		workDir: null, // Рабочая диррктория. Если пуста, то устанваливается равной appDir
		processTitle: 'atEngine' // Название процесса
	}
}

AtEngine.destroy([clb]])

Выгружает приложения и все модули. По завершению вызывает функцию clb. Если во время выполнения произошла ошибка, то она будет передана первым аргументом в функцию clb.

AtEngine.destroy(function(err) { ... });

AtEngine.loadModule(moduleName, clb)

Загружает модуль moduleName и вызывает функцию clb при заврешении загрузки. Если во время загрузки произошла ошибка, то она будет передана первым аргументом в функцию clb.

AtEngine.loadModule('test', function(err, module) { ... });

AtEngine.unloadModule(module, clb)

Выгружает модуль module и вызывает функцию clb по заврешению. В качестве аргумента module может быть передан как объект самого модуля, так и его id. Если во время выполнения произошла ошибка, то она будет передана первым аргументом в функцию clb.

AtEngine.loadModule('test', function(err, module) { ... });

AtEngine.findModulePath(moduleName, clb)

Ищет путь к модулю moduleName исходя из AtEngine.appDir и встроенных модулей. Результат возвращает в фукнцию clb: первым аргументом - ошибку (если она произошла), вторым путь (если путь не найден вовзращает null)

AtEngine.findModulePath('test', function(err, path) { 
	if (err) throw err;
	console.log(path); // e.g. '/opt/app/modules/test' or null
});

Модуль

Модуль представляет собой инстанс от класса унаследованого от AtEngine.Module

Имеет следующие свойства:

  • id - Id модуля, представляющее и себя название папки с модулем
  • path - Путь к папке с модулем
  • name - Название модуля (может быть задано через options.js, либо package.json)
  • description - Описание модуля (может быть задано через options.js, либо package.json)
  • version - Версия модуля (может быть задано через options.js, либо package.json)
  • author - Автор (может быть задано через options.js, либо package.json)
  • license - Лицензия (может быть задано через options.js, либо package.json)
  • config - Объект конфигурации (может быть задан через options.js и расширен через основную конфигурацию приложения)

Usage

Create AtEngine instance

var baseWorkPath = __dirname; // Path where by default will find modules, config, etc

var config = {
	atEngine: {
   		processTitle: 'MyProcess', // Process title. Default: 'atEngine'
   		modulesPath: __dirname + "/modules"  // External modules path. Default: null (external modules will not load)
   		modules: ['desktop'] // List of core and external modules. Requires modules will be load automatically. Default: []
	}
};

var AtEngine = require('atEngine');
var atEngine = new AtEngine(baseWorkPath, config, function(err) {
    if (err) {
        console.log('Error initialized atEngine instance: ' + err.message);
        throw err
    }
	console.log('atEngine instance successfully initialized');
});

Example

See example/app.js

Run test

Before starting the test, make sure that the node modules (with dev dependencies) are installed

npm install

Run tests

npm test

Roadmap

  1. Realize BaseManager validators and fields types
  2. RBAC
  3. Extending tables system for DataManager
  4. Database migrations
  5. Logging system
  6. Dynamic load css and js files
  7. Safe errors for desktop
  8. Global static variables?
  9. Desktop weight variables?