Vue CLI图像不会通过Webpack加载

Ale*_*ter 5 webpack vue.js

我在做什么?

我正在使用相交观察器API进行延迟加载。

我尝试了什么?

我在一个简单的HTML页面中尝试了该代码,并且效果很好,但是当我在vue中使用该代码时,图像将不会加载(本地图像)。如果我放一个htttp源图像(在线图像),它也可以完美工作。我认为这是一个webpack错误配置。我对吗?我该如何解决?

有什么错误?

当我使用本地图像时,代码不起作用,如果仅使用该图像来更改该src,例如此图像https://images.pexels.com/photos/69817/france-confectionery-raspberry-cake-fruit-69817.jpeg? auto = compress&cs = tinysrgb&dpr = 2&h = 650&w = 940代码有效,为什么我不能使它与本地图像一起使用?

HTML和脚本

<template>
    <div class="container" id="section3">
        <span class="containerTitle">Galeria</span>
        <div class="wrapper">
            <img v-lazyload data-src="@assets/images/001.jpg" class="card">
        </div>
    </div>
</template>
<script>
import lazyload from '../directives/lazyload'
export default {
    directives:{
      lazyload
    },   
}
</script>
Run Code Online (Sandbox Code Playgroud)

指示

export default{
    inserted: el =>{
        const options = {
            // root:
            rootMargin: '0px 0px 0px 0px',
            threshold:1
        }
        var observer = new IntersectionObserver((entries,observer) =>{
            entries.forEach(entry => {
                if(entry.isIntersecting){
                    el.src = el.dataset.src
                    observer.unobserve(el)
                    console.log('intersecting');

                }
            })
            },options) 
            observer.observe(el) 
    }
}
Run Code Online (Sandbox Code Playgroud)

代码图像

在此处输入图片说明

在此处输入图片说明

Ale*_*ter -2

经过广泛的研究,我发现了这篇关于 vuejs 和静态资产的文章。

\n\n

https://edicasoft.com/weblog/2018/04/27/static-vs-srcassets-webpack-template-vue-cli/

\n\n

他们说这种问题的发生是“因为”webpack,就像我一样,所以这个问题的解决方案(我希望不是唯一的解决方案),但这是迄今为止的解决方案......

\n\n

引用

\n\n

所有资源 URL(如 、background: url(...) 和 CSS @import)均由 Webpack 解析为模块依赖项,如 require(\'./logo.png\')。

\n\n

然后我们使用 Webpack 的加载器(例如 file-loader 和 url-loader)来处理它们。Webpack 模板已经配置了这些加载器。

\n\n

文件加载器有助于确定最终文件位置以及如何使用版本哈希对其进行命名以实现更好的缓存。因此,您可以将静态资源放在 .vue 文件附近并使用相对路径。无需严格将它们放入 \xe2\x80\x98assets\xe2\x80\x99 文件夹中。

\n\n

Url-loader 有助于有条件地内联诸如 base64 数据 URL 之类的资产,从而减少 HTTP 请求量。

\n\n

那么我到底应该用它做什么呢?

\n\n

答案是:将你的资源放在 \xe2\x80\x98src\xe2\x80\x99 文件夹中。

\n\n

我测试了这个,它工作得很好,但不能创建一个子文件夹,这对我来说是杂乱无章的。

\n\n

这是使用交集观察器 api 作为 vue 指令来完成此操作的最终文件夹结构

\n\n

在此输入图像描述

\n