vue.js - Vue-cli 生产构建不显示静态图像

标签 vue.js webpack vue-cli vue-cli-3

我正在尝试让我们的 Logo 显示在 vue-cli 生产构建中。

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

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

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

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

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

Logo .vue

<template>
  <img src="../img/logo.png" alt="logo">
</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

最佳答案

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

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

如果没有我们的代码,这没有帮助,但将以下内容添加到我们的路由处理中可以解决问题:

routes.ts

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

关于vue.js - Vue-cli 生产构建不显示静态图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52958762/

相关文章:

css - 如何更改 <v-text-field> 图标的颜色?

vue.js - 有条件地渲染指令

vue.js - Vue - 在 Vue.js 项目中编译/src 之外的其他文件夹

javascript - 在 webpack 的 js 文件中导入 moment.js

javascript - 如何在 Vue JS 的单个文件中访问样式内的组件变量

docker - 如何在Docker容器中运行grails-vue配置文件?

arrays - Vue.js 过滤数组

webpack - 解析器 "babylon"不推荐使用的错误 - webpack 构建

javascript - 如何使用 Storybook 配置 VueJS + PostCss + Tailwind

javascript - Vuex 商店/导航守卫第一次不起作用