npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mvloader

v1.0.10

Published

Base loader for projects

Downloads

7

Readme

MVLoader

Описание

Универсальный загрузчик для использования в качестве основы для проектов. Позволяет унифицировать подключение пакетов, классов, дополнительных сущностей.

Тестовый проект

Для более простого понимания назначения данного пакета и начала работы с ним создан тестовый проект, доступный по ссылке: https://github.com/mvoevodskiy/mvl-example-project.

Установка

npm i mvloader --save

Класс MVLoaderBase

Используется в качестве совсем базовой основы.
Подключает MVTools в качестве свойства объекта MT, упрощает загрузку конфига при создании экземпляра класса.

Полезен для большинства вспомогательных классов проекта, например, контроллеров. Большинство пакетов mvl-* экспортируют классы, унаследованные от MVLoaderBase.

Подключение в своем классе:

const {MVLoaderBase} = require('mvloader');

Свойства класса:

  • static exportConfig - экспортируемая из класса конфигурация. Используется при загрузке класса через MVLoader. Подробнее в разделе "Класс MVLoader" - "Загрузка конфигурации классов";
  • MT - экземпляр класса MVTools (вспомогательные методы);
  • caption - название объекта (экземпляра класса) при его внедрении в глобальный объект process. Подробнее в разделе "Класс MVLoader" - "Загрузка классов";
  • config - объект конфигурации.

Методы класса:

  • loadConfig(config) - загружает объект конфигурации, объединяет с загруженной ранее конфигурацией;
  • init() - метод базовой инициализации;
  • initFinish() - метод завершения инциализации. Вызывается после того, как выполнилась базовая инициализация всех подключенных в проекте классов.

Пример использования

const {MVLoaderBase} = require('mvloader');

class MvlUsersSemis extends MVLoaderBase{
    static exportConfig = {
        ext: {
            classes: {
                semis: {},
                controllers: {
                    mvlUsers: require('./controllers/mvluserscontroller'),
                },
                handlers: {},
            },
            configs: {
                controllers: {},
                handlers: {
                    DBHandler: {
                        sequelize: {},
                        models: {
                            mvlUser: require('./models/mvlUser'),
                        }
                    }
                },
                semis: {},
            }
        },
    };

    constructor (App, ...config) {
        let localDefaults = {};
        super(localDefaults, ...config);
        this.App = App;
    }

    async init() {
        super.init();
    }

    async initFinish() {
        super.initFinish();
    }

}

module.exports = MvlUsersSemis;

Класс MVLoader

Основной класс загрузчика, который необходимо наследовать в проектах. Наследует MVLoaderBase.

Подключение в проекте:

const {MVLoader} = require('mvloader');

Свойства класса:

  • ext - объект, хранилище для инициализированных экземпляров всех подключенных классов;
  • DB - активное подключение к базе данных, если применимо;
  • services - объект для упрощенного доступа к некоторым инициализированным экземплярам подключенных классов;

Методы класса: *

Подключение классов

Загрузка классов

Все подключенные классы должны указываться в секции ext.classes конфигурации. Подключаемые пакеты и классы условно разделяются на следующие типы:

  • semis - пакеты-"заготовки", экспортирующие сразу несколько сущностей, необязательно только классы. Как правило, именно пакеты типа semis наибольшим образом расширяют конфигурацию проекта, влияя, в том числе, на конфигурации другие классов;
  • controllers - пакеты или классы, реализующие определенную логику;
  • handlers - пакеты или классы, являющиеся обертками над сторонними библиотеками.

Помимо указанных типов, допустимы любые другие, специфичные для проекта.

Рекомендовано придерживаться такого разделения при создании новых публичных пакетов.

Все классы, в соответствии со своим типом, инициализируются последовательно. Перед созданием нового экземпляра из класса экспортируется статический объект конфигурации exportConfig, который совмещается с основной конфигурацией проекта.

Такой подход позволяет при подключении, к примеру, основного класса пакета, не беспокоиться о подключении остальных классов, моделей и иных сущностей, если они указаны в экспортируемой конфигурации.

В примере выше (в разделе "Класс MVLoaderBase" - "Пример использования") показан экспортируемый объект конфигурации с подключенными классами и моделями БД.

Загрузка конфигурации классов

При создании новых объектов из подключенных классов им передается объект конфигурации, расположенный, аналогично классу, в ветке ext.configs.

Пример: если подключенный класс доступен в конфигурации через ext.classes.handlers.DBHandler, то его конфигурация должна быть доступна через ext.configs.handlers.DBHandler.

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

Важно: порядок указания подключаемых пакетов и классов в конфигурации имеет значение, так как при появлении одинаковых ключей они перезаписываются в порядке следования. Это позволяет переопределять, к примеру, отдельные параметры конфигурации по умолчанию новыми значениями.

"Прикрепление" экземпляров классов к process

Если в классе есть непустое свойство caption, то экземпляр данного класса будет доступен через process[caption]. Такой прием использован для значительного упрощения поиска методов по их строковому пути.

К примеру, в классе mvlUsersController свойство caption имеет значение mvlUsers, а в классе определен метод isRegistered. Тогда получить данный метод для последующего выполнения будет возможно так:

let method = this.MT.extract('mvlUsers.isRegistered');
if (method) {
    return method();
}