جافا سكريبت - كيفية تحميل الملفات تلقائيًا التي تحتوي على مزخرفات محددة في مشروع 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();
