如何在vue javascript中引用静态资产

JBa*_*zuk 49 javascript leaflet vue.js

我正在寻找引用静态资产的正确网址,例如Vue javascript中的图片.

例如,我正在使用自定义图标图像创建传单标记,我尝试了几个网址,但它们都返回了404 (Not Found):

Main.vue:

var icon = L.icon({
    iconUrl: './assets/img.png',
    iconSize:     [25, 25],
    iconAnchor:   [12, 12]
});
Run Code Online (Sandbox Code Playgroud)

我已经尝试将图像放在assets文件夹和静态文件夹中,没有运气.我是否必须告诉vue以某种方式加载这些图像?

azy*_*777 73

对于想要从模板中引用图像的任何人,您可以使用"@"直接引用图像

例:

<img src="@/assets/images/home.png"/>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。关于静态资产的 vue 文档不必要地冗长,并且将这个主要用例几乎隐藏在页面底部的一个小项目符号中。 (6认同)
  • 对我不起作用:`找不到这种依赖:*@/assets/more-ico.svg.要安装它,您可以运行:npm install --save @/assets/more-ico.svg` ... (4认同)
  • ...假设您有一个文件夹 src/assets/images。开箱即用,vue-loader 将资源从 src/../... 复制到 build/../.. 或自动将较小的图片内联为 data.image/png.. 。 (2认同)
  • 也没有为我工作,但是..... 我看到我使用了错误的文件名 ;p 完美无缺! (2认同)
  • 它可以工作,但是在`template`上,如果要在css background-img属性中使用,请尝试`../../ assets / bg / login.svg`之类的东西,并将图像放入资产文件夹中 (2认同)

acd*_*ior 39

在Vue常规设置中,/assets不提供服务.

src="data:image/png;base64,iVBORw0K...YII="相反,图像成为字符串.


在JavaScript中使用: require()

要从JS代码获取图像,请使用require('../assets.myImage.png').路径必须是相对的(见下文).

所以你的代码是:

var icon = L.icon({
    iconUrl: require('./assets/img.png'),   // was iconUrl: './assets/img.png',
    // ...
});
Run Code Online (Sandbox Code Playgroud)


使用相对路径

例如,假设您具有以下文件夹结构:

- src
  +- assets
     - myImage.png
  +- components
     - MyComponent.vue
Run Code Online (Sandbox Code Playgroud)

如果你想引用图像MyComponent.vue,路径应该是../assets/myImage.png


这是一个DEMO CODESANDBOX,展示了它的实际效果.

  • 在使用 vue-cli 搭建我的应用程序之后,这种技术对我有用。代码沙箱非常有帮助。答案并不像代码沙箱那样清晰。 (2认同)

Muh*_*mad 31

更好的解决方案是

在@acdcjunior 的答案中添加一些良好的做法和安全性,以使用@而不是./

在 JavaScript 中

require("@/assets/images/user-img-placeholder.png")
Run Code Online (Sandbox Code Playgroud)

在 JSX 模板中

<img src="@/assets/images/user-img-placeholder.png"/>
Run Code Online (Sandbox Code Playgroud)

使用@指向src目录。

using~指向项目根目录,这样可以更轻松地访问node_modules和其他根级别资源


Yuc*_*uci 14

为了让Webpack返回正确的资产路径,您需要使用require('./ relative/path/to/file.jpg'),它将由文件加载器处理并返回已解析的URL.

computed: {
  iconUrl () {
    return require('./assets/img.png')
    // The path could be '../assets/img.png', etc., which depends on where your vue file is
  }
}
Run Code Online (Sandbox Code Playgroud)

请参阅VueJS模板 - 处理静态资产


Jor*_*ñan 8

这终于对我有用,图像作为道具传递:

<img :src="require(`../../assets/${image}.svg`)">
Run Code Online (Sandbox Code Playgroud)

  • 或者使用“@”:`&lt;img :src="require(\`@/assets/${image}.svg\`)"&gt;` (3认同)

neb*_*raa 5

在添加脚本标记后,只需添加import someImage from '../assets/someImage.png' 并用于图标网址iconUrl: someImage

  • 当我在导入中合并“@”时,这对我来说效果很好。 (2认同)