Как подсказал @Kaito, возможно использование динамических требований. Но я бы никогда этого не предпочел, определенно нет, если вы не знаете, что может пойти не так. Динамическое требование оставляет ваше приложение открытым для ошибок времени выполнения, которые вы, возможно, не обработали, как, например, требование файла, которого нет (самый распространенный).
Я бы хотел опираться на то, что @Kaito и @Yash предложили / предоставили.
Решение
- Соберите все ваши файлы / функции бота на карте, которая отображает
botname
на botfilepath
- В вашей логике сначала проверьте, есть ли у вас
botfile
/ botfunction
, связанный с ботом, который присоединяется к
- Если да, то вы можете безопасно потребовать
botfile
во время выполнения .
В приведенном ниже примере я предполагаю, что все файлы ботов будут храниться в каталоге bots
.
Пример * ** 1029 тысяча двадцать-восемь *
const fs = require( "fs" ),
path = require( "path" ),
botsDir = path.join( __dirname, "bots" );
/** One time read to fetch all the bot files in bots dir */
const files = fs.readdirSync( botsDir ),
/** Here we create the map of bot and bot file path */
availableBots = files
.reduce( ( botMap, file ) => Object.assign( botMap, {
[ file.replace(".js", "") ] : path.join( botsDir, file )
} ), {} );
// Your code
const botThatWillBeJoiningAtRuntime = "BotC"; // This would be some calculation to determine bot that joins at runtime.
/** Here we safely require the bot file only if we have one corresponding to the bot that is joining */
if ( availableBots[botThatWillBeJoiningAtRuntime] ) {
const botFunc = require( availableBots[botThatWillBeJoiningAtRuntime] );
}
Преимущество такого подхода -
Вы создаете файл op один раз в течение всего жизненного цикла приложения и накапливаете бот-файлы, тем самым сокращая дорогостоящие ios файлов, а затем для части if
безопасно требуются бот-файлы в зависимости от того, есть ли в приложении файл бота для присоединяющегося бота.
Недостатком является -
Вам необходимо убедиться, что присоединяющийся бот имеет то же имя, что и botfile
в каталоге bots
.