Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

178
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!