Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

404
Views
Importación dinámica en línea de SVG sin formato en Vue.js y Vite

Así que estoy tratando de importar SVG como cadena en mi componente Vue usando la importación en línea en Vite de la siguiente manera

 <script> const getSvgIcon = async (name) => { const module = await import(`../icons/${name}.svg?raw`) return module.default } export default { props: { name: String, }, data() { return { svg: null, } }, watch: { name: { async handler(name) { this.svg = await getSvgIcon(name) }, immediate: true, }, }, } </script> <template> <div v-html="svg"></div> </template>

Esto funciona bien cuando se ejecuta en modo npm run dev .

Sin embargo, el problema ocurre cuando npm run build , termino obteniendo Error: Unknown variable dynamic import aparentemente porque estoy usando el sufijo ?raw .

¿Hay una solución o es una desventaja de Vite a partir de ahora?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Como comentó @ tony19, probablemente se trate de un error. Abrí un tema que puedes seguir aquí .

Sin embargo, como una solución para que su código funcione, siga a continuación:

Paso 1:

Convierta todos sus SVG en componentes Vue. De esa manera, usted puede tener una mejor gestión. Para hacer eso, simplemente edite el nombre del archivo reemplazando de .svg a .vue y envolviendo el contenido dentro de la etiqueta de la template .

Sin embargo, si desea conservar archivos svg , puede usar el complemento vite-svg-loader y con esto, podrá hacer:

import IconComponent from './my-icon.svg?component'

Paso 2:

Cree un componente de icono SVG:

 <script> import { defineAsyncComponent } from 'vue'; export default { props: { name: { type: String, required: true, }, }, computed: { dynamicComponent() { const name = this.name; return defineAsyncComponent(() => import(`./icons/${name}.vue`)); }, }, }; </script> <template> <component :is="dynamicComponent" /> </template>

Paso 3

Ahora puede importar SvgIcon.vue y usar el nombre del icono SVG así:

 <script> import SvgIcon from './components/SvgIcon.vue' export default { components: { SvgIcon } } </script> <template> <SvgIcon name="user" /> </template>

Véalo en vivo en Stackblitz


Si te gusta el enfoque anterior, recientemente escribí un artículo al respecto:

Iconos SVG unificados con Vite, Vue 3, Quasar y Pinia

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!