• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed node.js module.exports importowanie kilku funkcji/plików do jednego obiektu

Object Storage Arubacloud
0 głosów
152 wizyt
pytanie zadane 30 września 2020 w JavaScript przez Utlamo Obywatel (1,540 p.)
zamknięte 30 września 2020 przez Utlamo

Witam uczę się od niedawna node.js pisząc w nim drobnego bota discord. Po pewnym czasie kod stał się na tyle długi że szukanie konkretnej funkcji staje się coraz bardziej uporczywe więc postanowiłem podzielić komendy na osobne pliki. Na przykład komenda

help

znajduje się w lokacji "./command/help.js"
chciałbym móc używać poleceń zimportowanych w następujący sposób:
 

command.help(msg);
command.autoDel(msg,prefix);

Jednak nie wiem jak to zrobić a mój kod wygląda tak (oczywiście zbędne pomijam) :
 

//===================MAIN===============
var command = require('./command/autoDel.js');
var command2 = require('./command/help.js');

command.autoDel(msg);
command2.help(msg,prefix);
//====================./commands/help.js==================

module.exports.help = function(msg,prefix) {
msg.channel.send("Komendy do bota <@!BOT_NUMBER>\nPrefixem jest znak `" + prefix + "`\n`help` → informacje o komendach\n======================================\n    KOMENDY DLA ADMINISTRATORÓW\n====================================\n`send channelId wiadomość` → Wysyła na wybrany kanał wiadomość jako BOT");
}
//================./command/autoDel.js==============
module.exports.autoDel = function(msg) {
   if(msg.channel.id === "123456789012345678" && msg.author.id !== "123456789012345679"){
     msg.delete({timeout: 700 });
    }
}

Mam nadzieje że da się zrozumieć to co napisałem.
===============================================================================
EDIT:
Zmieniłem troszke i mam coś takiego, ale jakby ktoś miał lepszy pomysł dalej czekam na propozycje.
 

//======MAIN====
let autoDel = require('./command/autoDel.js');
let help = require('./command/help.js');
const command = {autoDel, help};


//====help====
module.exports = function(){}


 

komentarz zamknięcia: Udało mi się znaleźć rozwiązanie.
komentarz 30 września 2020 przez ScriptyChris Mędrzec (190,190 p.)
A... na czym konkretnie polega problem?
komentarz 30 września 2020 przez Utlamo Obywatel (1,540 p.)
Już udało mi się samemu, ale dzięki.
komentarz 30 września 2020 przez ScriptyChris Mędrzec (190,190 p.)

Czemu użyłeś eval?

komentarz 5 października 2020 przez Utlamo Obywatel (1,540 p.)

Mój aktualny kod do ładowania komend wygląda tak:
 

var dirAray = [];

const fs = require('fs');
function getFiles (dir, files_){
    files_ = files_ || [];
    var files = fs.readdirSync(dir);
    for (var i in files){
        var name = dir + '/' + files[i];
        if (fs.statSync(name).isDirectory()){
            getFiles(name, files_);
        } else {
            files_.push(name);
        }
    }
    return files_;
}

getFiles(__dirname + '/command').forEach((item, i) => {
  item = item.slice(item.lastIndexOf('/')+1,-3);
  dirAray[i] = item;
});



let evalString = "";
let returnObject = {};
for (var i = 0; i < dirAray.length; i++) {
  evalString = "var " + dirAray[i] + " = require('./command/"+ dirAray[i] +"');"
  eval(evalString)
  evalString = "returnObject." + dirAray[i] + " = " + dirAray[i];
  eval(evalString)
}
console.log("załadowano następujące komendy " + dirAray);
module.exports = returnObject;

Zdawało mi się że eval() to dobry pommysł bo nie ważne ile i jakie pliki będą się znajdować w "./command" dla każdego pliku tworzę zmienną nazwaną taką jak nazwa pliku a następnie dodaje do returnObject tak nazwaną zmienną.

komentarz 5 października 2020 przez ScriptyChris Mędrzec (190,190 p.)

A czemu zamiast eval nie zrobisz tak:

for (var i = 0; i < dirAray.length; i++) {
  returnObject[dirAray[i]] = require(`./command/${dirAray[i]}`);
}

I do czego służy ten returnObject?

Podobne pytania

0 głosów
1 odpowiedź 336 wizyt
pytanie zadane 15 października 2018 w JavaScript przez Marchiew Dyskutant (7,690 p.)
0 głosów
1 odpowiedź 138 wizyt
pytanie zadane 11 kwietnia 2022 w JavaScript przez Maxxxii Obywatel (1,260 p.)
+1 głos
0 odpowiedzi 85 wizyt
pytanie zadane 4 stycznia 2022 w JavaScript przez Author[] Gaduła (3,130 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...