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

IT技术 javascript vue.js leaflet
2021-01-18 00:12:04

我正在寻找正确的 url 来引用静态资产,比如 Vue javascript 中的图像。

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

主视图:

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

我试过将图像放在资产文件夹和静态文件夹中,但没有运气。我是否必须告诉 vue 以某种方式加载这些图像?

6个回答

对于希望从模板中引用图像的任何人,您可以使用“@”直接引用图像

例子:

<img src="@/assets/images/home.png"/>
它可以工作,但是template如果您想在 css background-img 属性中使用,请尝试类似的操作../../assets/bg/login.svg,将图像放入资产文件夹
2021-03-16 00:12:04
也没有为我工作,但是..... 我看到我使用了错误的文件名 ;p 完美无缺!
2021-03-19 00:12:04
谢谢你。关于静态资产的 vue 文档不必要地冗长,并将这个主要用例几乎埋在页面底部,在一个小项目符号中。
2021-03-20 00:12:04
...假设您有一个文件夹 src/assets/images。开箱即用,vue-loader 将资源从 src/../... 复制到 build/../.. 或将较小的图片自动内联为 data.image/png.. 。
2021-03-23 00:12:04
对我不起作用: This dependency was not found:* @/assets/more-ico.svg. To install it, you can run: npm install --save @/assets/more-ico.svg...
2021-04-02 00:12:04

在 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',
//  iconUrl: require('@/assets/img.png'), // use @ as alternative, depending on the path
    // ...
});

使用相对路径

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

- src
  +- assets
     - myImage.png
  +- components
     - MyComponent.vue

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


这是一个演示代码沙盒,展示了它的运行情况。

在使用 vue-cli 搭建我的应用程序之后,这种技术对我有用。代码沙箱非常有帮助。答案并不像代码沙箱那样清晰。
2021-03-16 00:12:04
require('./assets/img.png')在我的组件选项中对我不起作用,我不得不替换 . 带有 @: require('@/assets/img.png')
2021-04-11 00:12:04

更好的解决方案是

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

在 JavaScript 中

require("@/assets/images/user-img-placeholder.png")

在 JSX 模板中

<img src="@/assets/images/user-img-placeholder.png"/>

using@指向src目录。

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

如果它不是图像而是文本文件或 csv 呢?只想获取路径/网址?
2021-03-21 00:12:04

为了让 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
  }
}

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

在打开脚本标签后,只需添加import someImage from '../assets/someImage.png' 并将其用于图标 urliconUrl: someImage

在导入中合并“@”时,这对我很有效。
2021-04-01 00:12:04
动态图像呢?
2021-04-09 00:12:04