Как видно из названия, я не могу понять, как заставить Навигацию по коду и Intellisense работать в немного сложной структуре кода.Я полностью готов приложить усилия для документирования, необходимые для того, чтобы эта работа работала (например, добавлен @typedefs и т. Д.)https://auth0.com/blog/developing-well-organized-apis-with-nodejs-joi-and-mongo/)
Итак, как это работает - есть центральная библиотека для ссылок на модули и библиотеки.
servicelocator.js - Поддерживает карту всех зарегистрированных служб.
ServiceLocator.prototype.register = function (dependencyName, constructor) {
if (typeof constructor !== 'function') {
throw new Error(dependencyName + ': Dependency constructor is not a function');
}
if (!dependencyName) {
throw new Error('Invalid depdendency name provided');
}
this.dependencyMap[dependencyName] = constructor;
};
ServiceLocator.prototype.get = function (dependencyName) {
if (this.dependencyMap[dependencyName] === undefined) {
throw new Error(dependencyName + ': Attempting to retrieve unknown dependency');
}
if (typeof this.dependencyMap[dependencyName] !== 'function') {
throw new Error(dependencyName + ': Dependency constructor is not a function');
}
if (this.dependencyCache[dependencyName] === undefined) {
const dependencyConstructor = this.dependencyMap[dependencyName];
const dependency = dependencyConstructor(this);
if (dependency) {
this.dependencyCache[dependencyName] = dependency;
}
}
return this.dependencyCache[dependencyName];
};
Servicelocator используется в примере внедрения зависимостей - DI.js
serviceLocator.register('mycustomservice', () => {
return require('../lib/mycustomservice');
});
...
...
...
serviceLocator.register('abcController', (serviceLocator) => {
const mycustomservice = serviceLocator.get('mycustomservice');
const abcController = require('../controllers/abcController');
return new abcController(mycustomservice)
})
Тогда код для контроллера является стандартным классом, подобным
class abcController
{
constructor(mycustomservice)
{
this.customService = mycustomservice;
....
....
}
}
Так что здесь кроется моя проблема.Я получаю автозаполнение, чтобы работать здесь? (Mycustomservice.js is module.exports =)
Мои ограничения:
- Я не могу работать с TypeScript / Coffee и т. Д..
- Структура и потоки фиксированы (это нельзя изменить)
- Я бы предпочел VSCode, если есть выход - если нет - открыть и для других рекомендуемых IDE.
Большое спасибо!
[Update] Игра с Typedefs в комментариях в стиле JSDoc
/*
* @typedef {import('../lib/mycustomservice')} CustomService
*
*/
class abcController
{
/**
* @param {CustomService} mycustomservice
*/
constructor(mycustomservice)
{
this.customService = mycustomservice;
....
....
}
}
Это для меня как-то.Попытка выяснить, как его автоматизировать или создать центральный файл вместо этого (пока не очень знаком с JSDocs или Typescript ....) 1040 *