2012-01-14 20 views
51

Estoy empezando con node.js y tengo algo de experiencia con Python. En Python pude comprobar si la variable __name__ se configuró en "__main__", y si fuera así, sabría que mi script se estaba ejecutando directamente. En ese caso, podría ejecutar el código de prueba o hacer uso del módulo directamente de otras maneras.¿Puedo saber, en node.js, si mi script se está ejecutando directamente o está siendo cargado por otro script?

¿Hay algo similar en node.js?

+0

posible duplicado de [node.js equivalente de python si \ _ \ _ name \ _ \ _ == '\ _ \ _ main \ _ \ _'] (http://stackoverflow.com/questions/4981891/node- js-equivalent-of-pythons-if-name-main) –

Respuesta

84

Puede usar module.parent para determinar si la secuencia de comandos actual está cargada por otra secuencia de comandos.

p. Ej.

a.js:

if (!module.parent) { 
    console.log("I'm parent"); 
} else { 
    console.log("I'm child"); 
} 

b.js:

require('./a') 

plazo de salida node a.js voluntad:

I'm parent 

plazo de salida node.b.js voluntad:

I'm child 
+0

Absolutamente perfecto. También se ve mucho más limpio que Python – Hubro

+0

También puedes usar 'module.main' que es similar – Raynos

+10

@Raynos Creo que te refieres a' require.main === module' (la recomendación oficial en http://nodejs.org/api/ modules.html). – chbrown

9

Ambas opciones !module.parent y require.main === module funcionan. Si está interesado en obtener más información, lea my detailed blog post about this topic.

+0

El enlace 404 pero por lo demás buena información. – cchamberlain

+1

Gracias por notarlo, corrigió el enlace. –

34

La respuesta aceptada es correcta. Estoy agregando éste de the official documentation esté completo:

Acceso al módulo principal

Cuando un archivo se ejecuta directamente desde el Nodo, require.main está configurado con los module. Eso significa que se puede determinar si un archivo ha sido gestionado directamente por la prueba

require.main === module 

Para un archivo "foo.js", esto será true si se ejecuta a través de node foo.js, pero false si se ejecuta por require('./foo').

Debido module proporciona un filename propiedad (normalmente equivalente a __filename), el punto de entrada de la aplicación actual se puede obtener mediante la comprobación de require.main.filename.

Cuestiones relacionadas