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.