es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede crear un paquete de rollo de memfs para el navegador; Aparece el error “Uncaught ReferenceError: exports is not defined”.

Estaba intentando compilar el paquete memfs para el navegador. La compilación de Webpack funciona bien, pero quiero agruparlo con rollup y constantemente obtengo el error “Uncaught ReferenceError: exports is not defined”.

Hice un ejemplo en repl.it con mi configuración.

Para aquellos que no quieran usar repl.it, aquí están mis archivos:

// rollup.config.js

import resolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import nodePolyfills from "rollup-plugin-polyfill-node";

export default {
    input: 'index.js',
    output: {
        dir: "dist",
        format: 'esm',
    },
    plugins:[
        nodePolyfills(),
        resolve({
            preferBuiltins: false,
            browser: true,
        }),
        commonjs(),
    ],
}

Archivo que estoy intentando procesar:

// index.js
import { fs } from "memfs";

let code = `
  console.log("hello, world!");
`;

fs.writeFileSync("./code", code);

console.log(fs.readFileSync("./code"));

He probado muchas opciones de “commonjs” y nada ha funcionado para mí.
¿Quizás me falta algo?

Gracias =)

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema puede estar relacionado con la forma en que rollup maneja los módulos commonjs. Una cosa que puedes intentar es configurar la opción namedExports en el plugin commonjs para especificar los valores exportados para el paquete memfs. Aquí tienes un archivo rollup.config.js actualizado con esa opción agregada:

    // rollup.config.js
    
    import resolve from "@rollup/plugin-node-resolve"
    import commonjs from "@rollup/plugin-commonjs"
    import nodePolyfills from "rollup-plugin-polyfill-node";
    
    export default {
        input: 'index.js',
        output: {
            dir: "dist",
            format: 'esm',
        },
        plugins:[
            nodePolyfills(),
            resolve({
                preferBuiltins: false,
                browser: true,
            }),
            commonjs({
              namedExports: {
                memfs: ['constants', 'createFsFromVolume', 'Volume']
              }
            }),
        ],
    }
    

    Es posible que debas ajustar las exportaciones específicas para el paquete memfs según la funcionalidad que estés utilizando. ¡Espero que esto ayude a resolver el problema!

Comments are closed.