Мне нужен совет от более опытных разработчиков javascript (машинопись) / nodejs.В течение нескольких месяцев я пытаюсь найти лучшие практики для создания расширяемых и модифицируемых модулей узлов (npm).
Для лучшего понимания: в большинстве сред PHP (таких как Symfony, Laravel, Nette) мы имеемDI-контейнер, который можно использовать для изменения или добавления собственной реализации для сервисов, поступающих из пакетов.Например.У меня есть пакет корзины, в котором реализован сервис для расчета цены корзины и применения налогов.Когда мне нужно изменить расчет налогов, я могу изменить реализацию через DI-контейнер, например,
services:
myTaxCalculator:
class: MyTaxCalculator
Package\Taxes\CalculatorInterface: ‘@myTaxCalculator’
, и теперь, когда пакет работает с Package \ Taxes \ CalculatorInterface, вместо реализации по умолчанию используется мой собственный калькулятор.
И я искал что-то подобное в javascript (машинопись) / nodejs.Если я собираю какой-либо пакет и в нем мне нужна функция для расчета налогов, используйте этот const taxCalculator = require ('...'), но теперь я не могу изменить реализацию этой функции.
Конечно, я могу сделатьПакет настраивается.Добавьте некоторый механизм для установки пользовательской функции для конкретных случаев, но я думаю, что мне нужна эта логика для всех классов / функций, которые используются в приложении, чтобы никогда не вызывать require ('кое-что').
Суть в том, чтобы построить базовый и стандартный пакет с логикой по умолчанию, которую можно изменить в конкретном приложении для решения проблем клиента, не создавая новый пакет с 90% -ным кодом.Я знаю, что существует некоторая реализация IoC / DI для javascript (typcript) / nodejs, например, InversifyJS, но я не уверен, когда это лучший способ для приложений javascript (typcript) / nodejs.Есть ли у вас опыт с этим?Как вы решаете эти проблемы?
Спасибо за любой ответ!