V Pythonu, stejně jako v NodeJS, můžete elegantně rozdělit kód aplikace do modulů (chcete-li balíčků) a ty pak můžete jednoduše importovat v jiné části aplikace.
Python:
from muj_modul import nejake_fce # nebo mene vodne import muj_modul # a pak muj_modul.nejaka_fce()
NodeJS:
var nejaka_fce = require('./muj_modul').nejaka_fce; // nebo var muj_modul = require('./muj_modul'); muj_modul.nejake_fce('ahoj');
Protože NodeJS i Python jsou scriptovací jazyky, můžete modul spouštět přímo pod runtimem, a pak se hodí identifikovat, zda modul jen importujete, nebo jej přímo spouštíte.
To je v Pythonu úplně běžná praxe a dělá se následovně:
def nejaka_funkce(buffer): print(buffer) def main(): print('tohle je hlavni funkce modulu') if __name__ == "__main__": main()
Ona podmínka testuje, zda je modul spouštěn přímo interpretem. Klasika a úplný základ v Pythonu.
__main__ v NodeJS
A tohoto chováni lze dosáhnout i v NodeJS následně:
module.exports.nejake_fce = function (buffer) { console.log(buffer); } function main () { console.log('hlavni funkce modulu'); } if (require.main === module) { main(); }
Modul exportuje funkci nejaka_fce, která může být importována jiným modulem a vedle toho má privátní funkci main, kterou nelze v jiném modulu importovat (je privátní v rámci daného modulu), ale tato fuknce se vykoná, pokud je modul spuštěn přímo interpretem.
NodeJS nemá __name__, ale interní proměnnou require.main, která v případě, že script je spuštěn přímo interpretem a ne includován, obsahuje object module.
NodeJS má globální proměnou __filename, které ale obsahuje název souboru (s absolutní cestou), ale neidentifikuje, zda je soubor spouštěn interpretem.