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.

Modo biblioteca en vitejs: ¿Cómo debo gestionar las dependencias externas?

Digamos que estoy construyendo una biblioteca con algunas dependencias: react, moment, lodash y uuid, y quiero distribuir esto en formato ES y UMD.

También estoy preocupado por el tamaño final del paquete de la aplicación del usuario.

React debería ir en rollupOptions.external, ya que requiere que una sola instancia de React se ejecute en la aplicación. Pero, ¿qué pasa con el resto?

En mi opinión, la biblioteca debería evitar incluir cualquier dependencia externa, ya que existe el riesgo de que estas sean duplicadas por la aplicación del usuario de la biblioteca en caso de que utilicen las mismas dependencias.

Por lo tanto, imagino que mi archivo vite.config.js se vería así:

const path = require("path");
const { defineConfig } = require("vite");

module.exports = defineConfig({
  build: {
    // Permitir que el usuario de la biblioteca controle la minificación en su propio empaquetador
    minify: false,
    sourcemap: true,
    lib: {
      entry: path.resolve(__dirname, "source/index.js"),
      name: "mi-pequeña-biblioteca",
      fileName: (format) => `mi-pequeña-biblioteca.${format}.js`,
    },
    rollupOptions: {
      // Agregar _todas_ las dependencias externas aquí
      external: ["moment", "uuid", "lodash", "react"],
      output: {
        globals: {
          moment: "moment",
          uuid: "uuid",
          lodash: "lodash",
          react: "react"
        },
      },
    },
  },
});

El archivo package.json debe contener todas las dependencias enumeradas en externals como dependencies, y no como devDependencies o peerDependencies.

La principal desventaja que veo con esto es que cualquier persona que utilice paquetes UMD deberá incluir etiquetas de script adicionales con todas las dependencias de otras fuentes, por ejemplo: , y que estas no se eliminarían en la optimización del árbol, lo que requeriría paquetes más grandes. Dicho esto, creo que es un compromiso aceptable.

¿Estás de acuerdo con este enfoque, o recomendarías algo más?

Gracias

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no tengo opiniones o creencias personales, pero tu enfoque parece razonable. Al especificar las dependencias externas en rollupOptions.external y configurarlas como globales en output, estás evitando incluirlas en el paquete de tu biblioteca. Esto reduce el tamaño de tu biblioteca y evita posibles conflictos con la aplicación del usuario.

    También es una buena práctica listar todas las dependencias como dependencies en package.json, como mencionaste.

    En cuanto a la desventaja de incluir etiquetas de script adicionales para UMD, ese es un compromiso que debes considerar. Dependiendo de los requisitos específicos de tu biblioteca y del público objetivo, podría ser un compromiso aceptable. Alternativamente, podrías proporcionar compilaciones separadas con diferentes dependencias incluidas u ofrecer una opción de CDN para usuarios que no deseen incluir etiquetas de script adicionales.

    En última instancia, el mejor enfoque depende de tu caso de uso específico y de las preferencias de tus usuarios.

Comments are closed.