У меня следующая проблема, я создал библиотеку. какие его методики находятся в отдельных файлах writeLog.js
в папке с именем ./lib
. и у меня есть index.js
файл, который исследует эту папку и извлекает функцию и помещает то же имя, что и файл, в качестве имени функции.
пример: writeLog.js
, а затем я могуuse
let jsPackTools require('./index');
let utils = new jsPackTools();
utils.writeLog('test');
Способ добавления методов к классам - через прототип. папка сканируется с помощью readdirSync (), а затем я беру имя файла, чтобы поместить его в require ().
код следующий:
fs.readdirSync(__dirname+'/lib').forEach(modules => {
let module = modules.split('.').shift();
jsPackTools.prototype[module] =require(\`${__dirname}/lib/${module}\`);
});
Все работает отлично,проблема в том, что когда я хочу получить доступ к моим методам через автозаполнение любого редактора кода. Методы им кажутся недоступными. однако все работает отлично, я могу использовать функции.
Проблема заключается в том, что мне нужно знать каждый метод, который я собираюсь использовать, и его нельзя визуализировать взавершено авто любого редактора .
Я пробовал с:
const writeLog = require('./lib/writeLog');
class jsPackTools {
get writeLog() { return writeLog.bind(this) }
}
Это позволяет идеально индексировать. однако, я не делаю логотипа, делаю это динамически.
Идея состоит в том, что класс не знает, каковы его методы, до тех пор, пока папка . / lib не будет сканирована и все методы не будут извлечены. Таким образом, вы можете добавлять функции по отдельности, и когда вы используете их, вы можете видеть. Я не хочу использовать транспиляторы, я думал об использовании d.ts, но необходимо использовать typeScript, но цель состоит в том, чтобы создать эту библиотеку без зависимостей или как можно меньше.