Vue 3中如何导入svg文件?
P粉021854777
P粉021854777 2023-08-23 08:37:27
[Vue.js讨论组]

我尝试了以下内容:
https://github.com/visualfanatic/vue-svg-loader/tree/master

但是由于Vue 2中使用了vue-template-compiler,所以存在版本冲突。

我尝试了:
https://github.com/visualfanatic/vue-svg-loader

但是我缺少特定的Vue依赖项。

我注意到在使用TypeScript时有一个注意事项,需要声明类型定义文件。然而,我仍然得到了“无法找到模块'../../assets/myLogo.svg'或其对应的类型声明”的错误。

这是我添加的内容:

vue.config.js

module.exports = {
  chainWebpack: (config) => 
  {
    const svgRule = config.module.rule('svg');

    svgRule.uses.clear();

    svgRule
      .use('vue-loader-v16')
      .loader('vue-loader-v16')
      .end()
      .use('vue-svg-loader')
      .loader('vue-svg-loader');
  },
  configureWebpack: process.env.NODE_ENV === 'production' ? {} : {
    devtool: 'source-map'
  },
  publicPath: process.env.NODE_ENV === 'production' ?
    '/PersonalWebsite/' : '/'
}

shims-svg.d.ts

declare module '*.svg' {
  const content: any;
  export default content;
}

MyComponent.vue

<template>
  <div>
     <MyLogo />
  </div>
</template>

<script lang="ts">
import * as MyLogo from "../../assets/myLogo.svg";

export default defineComponent({
  name: "MyComponent",
  components: {
    MyLogo
  },
  props: {
    
  },
  setup(props)
  {
    return {
      props
    };
  }
});


</script>


P粉021854777
P粉021854777

全部回复(2)
P粉676588738

vue-svg-loader 不兼容 vue 3。要导入 svg 并将其用作组件,只需将文件内容包裹在 'template' 中

在组件中:

<template>
  <div class="title">
    <span>Lorem ipsum</span>
    <Icon />
  </div>
</template>

<script>
import Icon from '~/common/icons/icon.svg';

export default {
  name: 'PageTitle',
  components: { Icon },
};
</script>

Webpack:

{
   test: /\.svg$/,
   use: ['vue-loader', path.resolve(__dirname, 'scripts/svg-to-vue.js')],
}

scripts/svg-to-vue.js:

module.exports = function (source) {
  return `<template>\n${source}\n</template>`;
};
P粉587970021

实际上,Vue CLI已经原生支持SVG。它内部使用file-loader。您可以通过在终端上运行以下命令来确认:

vue inspect --rules

如果“svg”被列出(应该会被列出),那么您只需要:

<template>
  <div>
    <img :src="myLogoSrc" alt="my-logo" />
  </div>
</template>

<script lang="ts">
  // 请使用`@`来引用项目的根目录“src”
  import myLogoSrc from "@/assets/myLogo.svg";

  export default defineComponent({
    name: "MyComponent",

    setup() {
      return {
        myLogoSrc
      };
    }
  });
</script>

因此,如果您的目的只是显示SVG,那么不需要任何第三方库。

当然,为了满足TypeScript编译器的类型声明要求:

declare module '*.svg' {
  // 它实际上是一个字符串,精确地说是指向图像文件的解析路径
  const filePath: string;

  export default filePath;
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号