VueJS

Usar librería de NPM en Vue con webpack y require

En este post de programación con JavaScript y Vue te enseñaré a importar una librería de NPM a un componente de Vue. Si bien esto es algo muy simple, en ocasiones podemos olvidarnos o perdernos.

Por ello es que en el post de hoy te enseñaré a importar un paquete de NPM desde un componente de Vue y usarlo dentro de ese componente a través de require.

Estoy suponiendo que usas la Vue CLI con Webpack, pero incluso si no lo haces, esto podría darte una ayuda.

La librería de NPM

Puedes usar e importar cualquier librería de NPM en Vue. Para este ejemplo usaré el paquete llamado qrious que ya expliqué en su momento y que sirve para generar códigos QR. El mismo se instala con:

npm install --save qrious

Te repito que solo lo estoy tomando de ejemplo.

Importando paquete dentro de Vue

Ahora solo debemos usar require e importar el paquete, accediendo a los node_modules. En este caso para acceder a la librería de npm del ejemplo hacemos lo siguiente:

const QRious = require("../../node_modules/qrious/dist/qrious");

La ubicación cambiará dependiendo de la ubicación de tu componente. Recuerda que el .. significa ir al directorio padre, por lo que estoy saliendo 2 directorios arriba y después importando lo que hay dentro de node_modules/qrious/dist/qrious.

Usar package dentro de Vue

Y ahora ya podemos usar la librería pues ya la hemos importado en Vue. Obviamente cada cosa cambiará dependiendo de la misma, pero aquí puedes ver el uso que yo le estoy dando en mi componente de Vue:

async obtenerIp() {
  this.cargando = true;
  const ip = await AjustesService.obtenerIp();
  this.direccionServidor = `${window.location.protocol}//${ip}:${window.location.port}${window.location.pathname}${window.location.hash}`;
  new QRious({
    element: this.$refs.imagenQr,
    value: this.direccionServidor,
    size: 200,
    backgroundAlpha: 1,
    foreground: "#000000",
    level: "H",
  });
  this.cargando = false;
},

Y aquí el componente completo por si te queda alguna duda, solo para ejemplificar:

<template>
  <div>
    <div class="columns">
      <div class="column">
        <h2 class="is-size-2">Impresora</h2>
        <b-message title="Aviso" has-icon type="is-warning" :closable="false"
          >Recuerde seleccionar solo impresoras térmicas, no virtuales ni de
          otro tipo. Si la impresora no aparece en la lista, probablemente no la
          haya compartido anteriormente</b-message
        >
        <b-field label="Impresora">
          <b-select
            :loading="cargando"
            v-model="impresoraSeleccionada"
            placeholder="Seleccione una impresora"
          >
            <option
              v-for="impresora in impresoras"
              :value="impresora"
              :key="impresora"
            >
              {{ impresora }}
            </option>
          </b-select>
        </b-field>
        <b-button :loading="cargando" @click="guardar()" type="is-success"
          >Guardar</b-button
        >
      </div>
    </div>
    <div class="columns">
      <div class="column">
        <h2 class="is-size-2">Conexión remota</h2>
        <p>
          Usted puede escanear el siguiente código QR o acceder a
          <code>
            {{ direccionServidor }}
          </code>
          desde su navegador.
          <strong
            >Recuerde que todos los dispositivos deben estar en la misma red de
            área local</strong
          >
        </p>
        <img alt="" ref="imagenQr" />
      </div>
    </div>
  </div>
</template>
<script>
import AjustesService from "../services/AjustesService";
const QRious = require("../../node_modules/qrious/dist/qrious");
export default {
  data: () => ({
    cargando: false,
    impresoraSeleccionada: "",
    impresoras: [],
    direccionServidor: "",
  }),
  async mounted() {
    await this.obtenerIp();
    await this.obtenerImpresoras();
    await this.obtenerImpresora();
  },
  methods: {
    async guardar() {
      this.cargando = true;
      await AjustesService.guardarImpresora(this.impresoraSeleccionada);
      this.$buefy.dialog.alert(
        "Se ha guardado la impresora. Verifique que se haya impreso un ticket de prueba para asegurarse de que todo ha funcionado"
      );
      this.cargando = false;
    },
    async obtenerImpresora() {
      this.cargando = true;
      this.impresoraSeleccionada = await AjustesService.obtenerImpresora();
      this.cargando = false;
    },
    async obtenerIp() {
      this.cargando = true;
      const ip = await AjustesService.obtenerIp();
      this.direccionServidor = `${window.location.protocol}//${ip}:${window.location.port}${window.location.pathname}${window.location.hash}`;
      new QRious({
        element: this.$refs.imagenQr,
        value: this.direccionServidor,
        size: 200,
        backgroundAlpha: 1,
        foreground: "#000000",
        level: "H",
      });
      this.cargando = false;
    },
    async obtenerImpresoras() {
      this.cargando = true;
      this.impresoras = await AjustesService.obtenerImpresoras();
      this.cargando = false;
    },
  },
};
</script>

Te repito: puede que cambie según la librería que utilices, o tal vez haya una versión de la misma para Vue. En todo caso aquí te mostré cómo importar un paquete de NPM desde Vue.

Por aquí te dejo más posts sobre JavaScript y Vue.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.