Estoy tratando de construir una CLI para una aplicación de tareas únicas del nodo js usando los módulos de comandante y conf en el nodo js, con tiza para colorear la salida. No estoy seguro de cómo resolver los errores que se devuelven:
ReferenceError: require no está definido en el alcance del módulo ES, puede usar importar en su lugar. Este archivo se trata como un módulo ES porque tiene una extensión de archivo '.js' que contiene "tipo": "módulo". Para tratarlo como un script CommonJS, cámbiele el nombre para usar la extensión de archivo '.cjs'.
Recibo el error anterior tanto para conf como para comandante
Cualquier sugerencia sobre cómo podría depurar esto, o cambiar el enfoque para usar readline y events/EventEmitter sería mejor, será apreciada, gracias
A continuación se muestra una versión CENSURADA del código:
lista.js
const conf = new (require('conf'))(); const chalk = require('chalk'); function list() { const todoList = conf.get('todo-list'); if (todoList && todoList.length) { console.log( chalk.blue.bold( 'Tasks in green are done. Tasks in yellow are still not done.' ) } } module.exports = list;archivo index.js
const { program } = require('commander'); const list = require('./list'); program.command('list').description('List all the TODO tasks').action(list); program.command('add <task>').description('Add a new TODO task').action(add); program.parse();archivo paquete.json
{ "main": "index.js", "type": "module", "keywords": [], "dependencies": { "chalk": "^5.0.0", "chalk-cli": "^5.0.0", "commander": "^8.3.0", "conf": "^10.1.1" }, "bin": { "todos": "index.js" } }En tu package.json tienes:
"type": "module", Esto significa que se supone que los archivos con el sufijo .js son ECMAScript en lugar de CommonJS. Si desea utilizar CommonJS, puede cambiar el sufijo del archivo o cambiar la propiedad "type" .
O puede usar la nueva sintaxis. En ECMAScript usa import , en CommonJS usa require .
Para leer más sobre "tipo", consulte: https://nodejs.org/dist/latest-v16.x/docs/api/packages.html#determining-module-system
Después de investigar un poco más, descubrí que estaba "enturbiando las aguas" entre los módulos CJS o ESM. Los módulos CJS usan require y esa es la forma antigua de hacer las cosas antes de los módulos ES6 Los módulos ESM usan import
Mi paquete.json dice tipo: módulo que le dice a NodeJS que estoy usando ESM. Pero el código dice CJS.
Estos son los pasos que tomo para solucionar esto: