2012-09-18 7 views
8

Supongamos que tengo un archivo .js que contiene un objeto javascript. Quiero poder acceder a ese objeto y a todas sus funciones desde otro archivo .js en el mismo directorio. ¿Puedo simplemente exportar este objeto con el objeto module.exports y require() en el otro archivo .js? Si esto es posible, ¿puedes darme un ejemplo?Exportación de objetos con el objeto Exportaciones

Si me ayuda, me estoy desarrollando con un nodo.

Respuesta

12

Esta es mi forma de crear módulos:

myModule.js

var MyObject = function() { 

    // This is private because it is not being return 
    var _privateFunction = function(param1, param2) { 
     ... 
     return; 
    } 

    var function1 = function(param1, callback) { 
     ... 
     callback(err, results);  
    } 

    var function2 = function(param1, param2, callback) { 
     ... 
     callback(err, results);  
    } 

    return { 
     function1: function1 
     ,function2: function2 
    } 
}(); 

module.exports = MyObject; 

Y para usar este módulo en otro archivo JS, puede simplemente usar require y usar su objeto como normales :

someFile.js

var myObject = require('myModule'); 

myObject.function1(param1, function(err, result) { 
    ... 
}); 
+0

Entonces, si, en el nodo, no devuelvo las funciones al final de la definición del objeto, no podré acceder a las funciones (privadas)? incluso si requiero el módulo? –

+0

Correcto, no podrás acceder a ellos a través del objeto. 'myObject._privateFunction (p1, p2)' lanzará un error 'TypeError: Object # no tiene el método '_privateFunction'' – c0deNinja

2

En un archivo:

module.exports.myObj = some object...; 

En la otra:

Obj = require('myFile.js').myObj; 

Todo en un archivo js en el nodo es local a ese archivo si no se lleva en el objeto de exportación. En realidad, esto es muy diferente de JavaScript en un navegador: en el navegador, todos los archivos que se importan actúan juntos como un gran archivo.

Puede pensar en los archivos de nodo como si estuviera creando un objeto de módulo y pasarlo a una función que rodea su código.

module = { 'exports' : {} }; 
(function(module){ 
    //your js file 
    ... 
})(module) 
2

Por supuesto que puedes. En mi ejemplo, uso obj para mantener mi información de configuración. Lo puse en un archivo llamado index.js en la carpeta config. Esto hace que el índice sea la opción preferida para seleccionar cuando yo import 'config'. Tengo 2 exportaciones aquí una para mis cosas de nodo y api y la otra para mi db. Puede ignorar el primer bit donde configuré el entorno.

const environment = { 
    development: { 
    isProduction: false 
    }, 
    production: { 
    isProduction: true 
    } 
}[ process.env.NODE_ENV || 'development' ]; 

export default Object.assign({ 
    host: 'localhost', 
    port: '3000', 
    remoteApi: { 
    token: { 
     'X-Token': '222222222222222222' 
    }, 
    base: 'https://www.somedomain.com/api' 
    } 
}, environment); 

export const db = { 
    dbHost: 'localhost', 
    dbPort: 176178 
}; 

Llamando import config from '../config'; seleccionará la predeterminada. Y si especifico que puedo obtener la exportación dbimport { db } from '../config';

Cuestiones relacionadas