2011-01-11 20 views
22

¿Cómo puedo cargar archivos js externos que no se ajustan al formato node.js? Estoy tratando de importar la biblioteca de serialización json. ¿Cómo puedo hacer esto?¿Cómo se importan los archivos non-node.js?

+0

hay soporte integrado para json (p. JSON.stringify (obj)), ¿está buscando algo más allá del conjunto de características ya admitidas? – davin

+0

@david Solo por ahora y referencia futura. No quiero tener que encontrar las versiones de node.js de todo. – Will03uk

+0

Definitivamente no importa una segunda biblioteca JSON (supongo que estás mirando json2.js?). JSON.parse() y JSON.stringify() están integrados en el nodo desde el inicio. –

Respuesta

33

2 respuestas ...

1) el objeto JSON es integrado en Node.js, por lo que sólo puede llamar JSON.parse() y JSON.stringify(), no hay necesidad de importar código externo para este caso particular.

2) para importar código externo, Node.js sigue la especificación del módulo CommonJS y se puede utilizar require()

por lo que si usted tiene un archivo llamado external.js (en el mismo directorio que el resto de su código):

this.hi = function(x){ console.log("hi " + x); } 

y desde el nodo que hace:

var foo = require("./external"); 
foo.hi("there"); 

verá la salida hi there

+1

+1 para this.hi = function (x) {console.log ("hi" + x); } – iwill

3

Escribir envolturas o cambiar el código.

¿Qué debería hacer automágicamente que funcione? ¿Cómo se supone que Node sabe qué funciones deberían exportarse o no?

Todo lo que puede hacer es ajustar el código para que coincida con el estándar Common JS, pero antes de hacerlo, consulte API Docs y Modules Pages en la Wiki Node.js para ver si alguien ya hizo el trabajo por usted:)

Si se escribe código sí mismo que debería funcionar en un navegador y Node.js se puede utilizar un envoltorio como la siguiente:

(function(node) { 
    // Your Awesome code here 
    if (node) { 
     exports.foo = ... 

    } else { 
     window.foo = ... 
    } 

})((function(){return ('' + this).slice(8, -1) !== 'DOMWindow';})()); 
9

Si confía en el código (quiero decir, realmente confianza el código) entonces usted puede eval él:

eval(require('fs').readFileSync('somefile.js', 'utf8')); 

No recomendaría hacer esto con código remoto (porque podría cambiar sin su conocimiento) pero si tiene una copia local de algo, entonces debería estar bien.

+4

Esta es una respuesta horrible. Y me encanta. –

+0

Un simple requerir como en la respuesta aceptada funciona mejor que leer un JSON. También es beneficioso si el JSON es un archivo de configuración y desea insertarlo en su archivo .js usando un paquete web, mochila, etc. – Ozil

Cuestiones relacionadas