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.
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); }