Vue-cli 生产版本不显示静态图像

Posted

技术标签:

【中文标题】Vue-cli 生产版本不显示静态图像【英文标题】:Vue-cli production build not displaying static images 【发布时间】:2019-03-28 06:21:34 【问题描述】:

我正在尝试让我们的徽标出现在 vue-cli 生产版本中。

如果我执行vue-cli-service serve(运行 webpack 开发服务器),图像会解析(我可以在 Web 浏览器中看到它们)。但是,如果我提供捆绑文件(使用节点或其他),图像不会解析,尽管它们位于正确的文件夹中。我可以在我的网络选项卡中看到对http://localhost:8888/img/logo.fdcc9ca9.png 的 200 OK 请求,这意味着在正确的位置可以看到正确的文件命名对象。我也可以在我的来源选项卡的适当位置看到它。

另外,如果我检查元素,它看起来像这样,看起来也是正确的:

<img data-v-0242e324="" src="/img/logo.fdcc9ca9.png" >

尽管如此,在生产构建中,图像显示类 html“损坏的图像”缩略图。

怎么了?如何在生产版本中不显示“损坏的图像”缩略图?为什么它在 webpack-dev-server 上工作而不是生产?

Logo.vue

<template>
  <img src="../img/logo.png" >
</template>
<script>
  ...
</script>

vue.config.js

const path = require('path');
const webpack = require('webpack');
module.exports = 
    chainWebpack: config => 
        config.resolve.alias
            .set('@', path.resolve(__dirname, 'client/src'));
        config
            .plugin('provide')
            .use(webpack.ProvidePlugin, [
                $: 'jquery',
                jquery: 'jquery',
                jQuery: 'jquery',
                'window.jQuery': 'jquery'
            ]);
        config.plugin("html")
            .tap(args => 
                args[0].template = "./client/index.html"
                return args
            )
    ,
    runtimeCompiler: true,
    devServer: 
        proxy: 'http://localhost:8888'
    

package.json

...
    "serve:ui": "vue-cli-service serve client/src/main.js",
    "build:ui": "vue-cli-service build --dest build/public/ client/src/main.js",
...

文件夹结构,开发中

client/
  src/
    img/
      logo.png
    components/
      Logo.vue

文件夹结构,输出构建

build/
  public/
    css/
    fonts/
    img/
      logo.fcdd9ca9.png
    js/
    index.html

【问题讨论】:

您可以在生产中通过直接 url 访问图像吗? your-domain.com/img/logo.fdcc9ca9.png?它是否正确加载图像或有任何其他响应? 啊哈,很好,它解析为我们的 index.html,这可能是我们 API 的错误配置。将对此进行调查。 确保 Web 服务器配置为仅将 404 个请求重定向到 index.html,而不是所有请求。这将确保所有静态资源都可以访问,除了那些无法被 Web 服务器定位的资源。 【参考方案1】:

答案是我们的 API 配置错误。

简而言之,没有图像(或字体)处理程序。正如@aBiscuit 指出的那样,直接在我的浏览器中尝试请求返回 index.html 的图像 URL,这是我们的 API 对它不理解的堆栈文件请求的后备。

没有我们的代码,这无济于事,但将以下内容添加到我们的路由处理中解决了这个问题:

routes.ts

router.get('/img/:file', async (ctx, next) => 
    await next();
    await send(ctx, `build/public/img/$ctx.params.file`);
);

【讨论】:

以上是关于Vue-cli 生产版本不显示静态图像的主要内容,如果未能解决你的问题,请参考以下文章

React Native Android:静态图像未在生产发布的 apk 中显示

图片不显示在生产版本中,仅在开发中(webpack/sass-loader)

Django静态图像不显示

图像不显示在 VueJS 的组件中

.json 数据显示在 webpack 服务器中,但不显示在生产版本中

Rails 3.2-在生产模式下不显示jQuery-UI图像