Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

183
Vistas
Migración de CommonJS 'module.exports = function()' a ESM

Estoy usando NodeJS y he estado escribiendo JavaScript durante algunos años y todavía estoy aprendiendo.

Para mis módulos CJS, escribo (lo que llamo) una función raíz que contiene todas (lo que llamo) mis subfunciones y luego return {subfunction1, subfunction2} en la función raíz para las funciones que quería exponer. Es cierto que aprendí este estilo de escritura de Jonathan Mills y estoy contento con él.

Tengo problemas para migrar esto correctamente de CommonJS a ESM y espero hacerlo sin usar Class . Sin embargo, si Class es el camino correcto con ESM, entonces me adaptaré.

Aquí hay un servicio CJS:

service.js

 function WebexService(webex) { async function processMessage(messageData) { try { const user = await webex.people.get(messageData.personId); //debug(user); sendMessage({ displayName: user.displayName, roomId: messageData.roomId }); } catch (error) { debug(error); throw error; } } function sendMessage(messageInfo) { webex.messages.create({ roomId: messageInfo.roomId, text: `Howdy! ${messageInfo.displayName}`, }); } return { processMessage } } module.exports = WebexService()

Para usar este servicio CJS, lo importaría como:

app.js

 const { processMessage } = require('../services/webexService'); function superCool() { const messageResponse = await processMessage(messageData); }

La única forma en que he podido hacer que esto funcione con ESM es como Class :

service.js

 import debugInit from 'debug'; import chalk from 'chalk'; const debug = debugInit('app:services:webex'); export default class WebexService { constructor(webex) { this.webex = webex; } async processMessage(messageData) { try { const user = await this.webex.people.get(messageData.personId); //debug(user); this.sendMessage({ displayName: user.displayName, roomId: messageData.roomId }); } catch (error) { debug(error); throw error; } } sendMessage(messageInfo) { this.webex.messages.create({ roomId: messageInfo.roomId, text: `Howdy! ${messageInfo.displayName}`, }); } }

app.js

 import WebexService from '../services/webex.js'; const WebexServiceInstance = new WebexService(webex); WebexServiceInstance.processMessage(event.data);

Espero que alguien pueda indicarme la dirección correcta. Estoy feliz de RTFM si alguien puede ayudarme a encontrar uno para leer.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

service.js

 function WebexService(webex) { async function processMessage(messageData) { try { const user = await webex.people.get(messageData.personId); //debug(user); sendMessage({ displayName: user.displayName, roomId: messageData.roomId }); } catch (error) { debug(error); throw error; } } function sendMessage(messageInfo) { webex.messages.create({ roomId: messageInfo.roomId, text: `Howdy! ${messageInfo.displayName}`, }); } return { processMessage } } const service = WebexService() export default service

app.js

 import WebexService from '../services/webex.js'; // you can then do this const { processMessage } = WebexService; function superCool() { const messageResponse = await processMessage(messageData); } // or just use it directly function superCool() { const messageResponse = await WebexService.processMessage(messageData); }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda