2011-02-13 19 views

Respuesta

285

The docs describen otra manera de hacer esto que puede ser el método preferido:

Cuando un archivo se ejecuta directamente desde el Nodo, require.main se establece en su módulo .

Para aprovechar esto, comprobar si este módulo es el módulo principal y, si es así, llame a su código principal:

var fnName = function(){ 
    // main code 
} 

if (require.main === module) { 
    fnName(); 
} 

EDIT: Si utiliza este código en un navegador, obtener un "Error de referencia" ya que "requerir" no está definido. Para evitar esto, use:

if (typeof require != 'undefined' && require.main==module) { 
    fnName(); 
} 
+17

siempre debe verificar require.main === módulo ** independientemente ** del nombre de su función. para que quede claro por encima de código debe ser modificado como: 'fnName = función var() { // código } si (require.main === módulo) { fnName(); } ' –

+0

Lo envolvería con try ... catch para compatibilidad con el navegador –

+3

@OhadCohen" try ... catch "también podría detectar errores reales. Creo que es mejor simplemente comprobar si typeof require! = 'Undefined'. –

58
if (!module.parent) { 
    // this is the main module 
} else { 
    // we were require()d from somewhere else 
} 

EDIT: Si utiliza este código en un navegador, obtendrá un "error de referencia", ya que "módulo" no está definido. Para evitar esto, utilice:

if (typeof module != 'undefined' && !module.parent) { 
    // this is the main module 
} else { 
    // we were require()d from somewhere else or from a browser 
} 
+0

¿Está documentado esto en alguna parte? – intuited

+11

No, pero se usa en una de las pruebas de [node.js] (https://github.com/joyent/node/blob/master/test/simple/test-cli-eval.js) – nornagon

+1

Para mí esto se lee mejor que la respuesta aceptada y tiene el beneficio de no requerir el "nombre" del módulo – blented

Cuestiones relacionadas