¿Por qué el contexto dentro del objeto Función no interactivo es diferente en node.js?

Me gustaría crear una función a partir de una cadena que requiera otro módulo (no preguntar).

Cuando trato de hacer eso en el shell interactivo del nodo, todo está bien y es excelente:

> f = new Function("return require('crypto')"); [Function] > f.call() { Credentials: [Function: Credentials], (...) prng: [Function] } 

Sin embargo, cuando coloco exactamente el mismo código en el archivo, me dicen que la función require no está disponible:

 israfel:apiary almad$ node test.coffee undefined:2 return require('crypto') ^ ReferenceError: require is not defined at eval at  (/tmp/test.coffee:1:67) at Object. (/tmp/test.coffee:2:3) at Module._compile (module.js:446:26) at Object..js (module.js:464:10) at Module.load (module.js:353:31) at Function._load (module.js:311:12) at Array.0 (module.js:484:10) at EventEmitter._tickCallback (node.js:190:38) 

¿Cómo arreglar eso?

Además, me dice que no sé algo acerca de los contextos / ámbitos de node.js. ¿Que es eso?

El tema es el scope.

El argumento de la new Function() se está evaluando en el ámbito global. Nodo, sin embargo, solo define require como global para su modo / shell interactivo. De lo contrario, ejecuta cada módulo dentro de un cierre donde se require , module , exports , etc. como variables locales.

Por lo tanto, para definir la función de modo que el require esté dentro del scope ( cierre ), deberá utilizar la function operador / palabra clave :

 f = function () { return require('crypto'); } 

O, el operador -> en CoffeeScript:

 f = -> require 'crypto' 
    Intereting Posts