جافا سكريبت - كيفية تحميل الملفات تلقائيًا التي تحتوي على مزخرفات محددة في مشروع Node


لقد أنشأت مُزيّنًا، في المشروع أ (المكتبة الرئيسية) وأود أن يتم تحميل جميع تلك المزّيّنات تلقائيًا عند بدء التطبيق في المشروع ب (المشروع الذي يستخدم المشروع أ). هل هناك أي طريقة للقيام بذلك؟

index.ts يبدو هكذا:

export function MyDecorator<T extends Controller>() {
  return (target: new () => T) => {
    // Do stuff with the decorator
  }
}

const server = http.createServer((req, res) => {

})
server.listen(8080)

هل هناك شيء يمكنني فعله لتنفيذ @MyDecorator() تلقائيًا على جميع الفئات في Project B دون أن يضطر Project B للقيام بذلك؟

MyClass1.ts

import { MyDecorator } from 'project-a'

@MyDecorator()
export class ProjectBClass1 {}

MyClass2.ts

import { MyDecorator } from 'project-a'

@MyDecorator()
export class ProjectBClass2 {}

الإجابة رقم 1

  • أفترض أنك تقصد إنشاء مثيلات عن طريق التحميل.
  • لست متأكدًا أيضًا مما إذا كان هذا حلًا أنيقًا لكن إليك اقتراحي:

أنشئ فئة تحتوي على طريقة ثابتة:

class ControllerCreator {
  private static constrollerInstances: any = []
  private static controllerConstructors : any = [];  

  static registerControllerClass(ctor: any) {
    ControllerCreator.controllerConstructors.push(ctor);
  }

  static createInstances() {
    ControllerCreator.controllerConstructors.forEach(
      ctor => constrollerInstances.push(new ctor()) // pushing them to static array to not lose
    )
  }
}

في المزخرف الخاص بك يجب عليك تسجيل مُنشئ وحدة التحكم الخاصة بك:

export function MyDecorator<T extends Controller>() {
  return (target: new () => T) => {
    // Do stuff with the decorator
    class newClass extends target {
      // ...
    }

    ControllerCreator.registerControllerClass(newClass);
  }
}

وأخيرًا في مرحلة ما يجب أن تتصل:

ControllerCreator.createInstances();