【问题标题】:vue + webpack project img cannot load static srcvue + webpack项目img无法加载静态src
【发布时间】:2017-04-05 14:40:28
【问题描述】:

在我的 vue(2.0)+ webpack 项目中,我配置了 vue-html-loader,但在我的 .vue 文件中,img 标签无法加载静态 src 图像。 以下是我的 webpack 配置:

module: {
    loaders: [
        ...
        {
            test: /\.html$/,
            exclude: /node_modules/,
            loaders: ['html', 'html-minify']
        }
        , {
            test: /\.vue$/,
            loader: 'vue'
        }
        ...
    ]
},
vue: {
    ...
    html: {
        root: path.resolve(__dirname, './source/static'),
        attrs: ['img:src', 'img:srcset']
    },
    loaders: {
        css: ExtractTextPlugin.extract("css"),
        sass: ExtractTextPlugin.extract("css!sass")
    }
},
resolve: {
    root: [
        path.resolve('./source')
    ],
    extensions: ['', '.js', '.json', '.scss', '.html', '.css', '.vue'],
    alias: {
        'vue': 'vue/dist/vue.js'
    }
},

下面是我的 .vue 文件:

<img src="/web/img/sieleLogo@1x.png" srcset="/web/img/sieleLogo@2x.png" />

我的浏览器总是出现 404 错误。有人遇到同样的问题吗?

【问题讨论】:

标签: javascript webpack vue.js


【解决方案1】:

我的 webpack 配置中有以下内容,对我有用:

  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue',
        options: vueConfig
      },
      {
        test: /\.js$/,
        loader: 'babel',
        exclude: /node_modules/
      },
      {
        test: /\.(png|jpg|gif|svg)$/,
        loader: 'url',
        options: {
          limit: 10000,
          name: '[name].[ext]?[hash]'
        }
      }
    ]
  }

我在src/assets 文件夹中有图像,无需任何特定设置即可访问和显示。

【讨论】:

  • 你在img标签中添加“srcset”属性了吗?
【解决方案2】:

我会在你的 webpack 别名中为你的静态 img 目录添加一个别名,即

resolve: {
  ...
  alias: {
    'vue': 'vue/dist/vue.js',
    'img': path.resolve(__dirname, '../web/img') // or wherever it is located relative to this file
  }
}

现在您可以通过~img 引用静态图片,即

<img src="~img/sieleLogo@1x.png" srcset="~img/sieleLogo@2x.png" />

为确保您可以在您的 html 中解析上述内容,您需要将 vue-html 加载器添加到您的 webpack 配置中:

module: {
  loaders: [
    ...
    {
        test: /\.html$/,
        loaders: 'vue-html'
    }

我会用上面的替换你当前的 html 加载器。

不过,抛开这一切不谈 - 由于构建可靠的 webpack vue 应用程序的复杂性,我强烈建议您安装 vue-clihttps://github.com/vuejs/vue-cli

然后,您可以简单地推出经过测试且正常运行的 webpack 环境:

https://github.com/vuejs-templates/webpack

只需将您的应用程序复制到其中即可。您可能需要进行一些重构,但在设置上节省时间是绝对值得的。

【讨论】:

  • 我按照你说的做了,但是在浏览器中,srcset属性无法解析~img,它把“~img”当作url的字符串部分。
猜你喜欢
  • 2021-05-30
  • 2020-11-05
  • 2018-08-20
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多