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.

Cómo usar Vite para crear un archivo ESM a CommonJS sin excluir los módulos de Node como stream y path?

Quiero usar vite para empaquetar mi js esm a commonjs, pero borrará los módulos de nodo.
vite.config.js

import { defineConfig } from 'vite';

const config = defineConfig({
  envDir: process.cwd(),
  build: {
    lib: {
      entry: 'index.js',
      formats: ['cjs']
    },
    rollupOptions: {
      output: {
        entryFileNames: '[name].cjs'
      }
    },
    emptyOutDir: true
  }
});

export default config;

Mi ejemplo index.js

import Stream from 'node:stream';
console.log('✨', Stream, Stream);

Cuando se compile, el stream será un objeto vacío.

¿Cómo puedo evitar que se borren los módulos de nodo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puedes evitar que los módulos de nodo se eliminen agregando una opción exclude en la configuración build de tu archivo vite.config.js. En esta opción, puedes proporcionar un array de expresiones regulares que excluyan los archivos o directorios que deseas mantener.

    Por ejemplo, para excluir el módulo node:stream, puedes modificar tu archivo vite.config.js de la siguiente manera:

    import path from 'path';
    import { defineConfig } from 'vite';
    
    const config = defineConfig({
      envDir: process.cwd(),
      build: {
        lib: {
          entry: 'index.js',
          formats: ['cjs']
        },
        rollupOptions: {
          output: {
            entryFileNames: '[name].cjs'
          }
        },
        emptyOutDir: true,
        // Agrega la opción exclude aquí
        exclude: [/^node:/, path.resolve(__dirname, 'node_modules')]
      }
    });
    
    export default config;
    

    En este ejemplo, agregamos dos expresiones regulares a la opción exclude:

    • /^node:/ excluye cualquier módulo con el prefijo node: (como node:stream, node:path, etc.).
    • path.resolve(__dirname, 'node_modules') excluye todo el directorio node_modules, ya que generalmente es donde se instalan los módulos de terceros.

    Con estas exclusiones, el módulo node:stream (y cualquier otro módulo de nodo) no se eliminará durante el proceso de compilación.

Comments are closed.