Если вы пытаетесь назначить новое значение для каждого элемента в массиве и вернуть новый массив с обновленными значениями, вы должны использовать map
вместо forEach
.
Если вы хотите верните массив с необходимыми библиотеками из liblist
и сохраните результат в flist
, ваш код должен выглядеть следующим образом:
flist = liblist.map(item => require(item));
По сути, map
принимает каждое значение из массива, применяет к ней (в вашем случае, require
), а затем возвращает новый массив с результатами функции.
Следует отметить, что вам также необходимо заменить fs.readdir
на fs.readdirSync
, в противном случае liblist
будет пустым при вызове кода.
После нашего обсуждения в чате я понял, что вы хотите установить переменные как глобальные переменные в вашем основном файле. Тем не менее, это немного хаки sh. Для этого вам нужно изменить объект global
.
Примечание: Я бы посоветовал вам статически требовать через const libraryName = require('./libraries/fileName.js')
, поскольку этот способ динамического определения библиотек не имеет преимуществ в этом случае и только делает код более сложным. Динамически запрашиваемые библиотеки имеют смысл только тогда, когда вы, например, добавляете слушателей через свои библиотеки, но тогда вам не нужно хранить их как глобальные переменные.
Теперь ваш полный код для файла utils должен выглядеть следующим образом:
const Discord = require("discord.js");
const fs = require("fs");
function genEmbed(title, desc, col) {
return new Discord.MessageEmbed().setTitle(title).setDescription(desc).setColor(col);
};
function log(inp) {
console.log(`[UTIL] ${inp}`);
};
function loadDef() {
log("Loading libraries...");
libraries = {};
const dirlist = fs.readdirSync("./libraries").map(dir => "./libraries/" + dir)
dirlist.forEach(dir => {
const files = fs.readdirSync(dir)
files.forEach(file => {
if(file.includes(".")) {
filename = file.split(".")[0];
libraries[filename] = require(dir + "/" + file);
} else {
log(`${file} is a directory, ignoring...`)
};
});
});
log("Libraries loaded!");
return libraries;
};
module.exports = {
genEmbed,
loadDef
};
Теперь вам все еще нужно изменить код в вашем основном файле следующим образом:
const libraries = loadDef()
global = Object.assign(global, libraries) // assign libraries to global variables