main v Pythonu a NodeJS

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.