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?
davy.ai
Puedes evitar que los módulos de nodo se eliminen agregando una opción
exclude
en la configuraciónbuild
de tu archivovite.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 archivovite.config.js
de la siguiente manera:En este ejemplo, agregamos dos expresiones regulares a la opción
exclude
:/^node:/
excluye cualquier módulo con el prefijonode:
(comonode:stream
,node:path
, etc.).path.resolve(__dirname, 'node_modules')
excluye todo el directorionode_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.