webpack 结合 vuejs 或 reactjs 开发过程中图片的处理方法。我的需求
项目打包之后(假定输出目录为 dist),除了 index.html,将所有的静态资源上传至 cdn,而并非打包之后所有静态资源都在应用服务器上。
index.html 中的图片
因为是 SPA,模版页面唯一要处理的图片就是 favicon,这个资源在 IE 10 及以下浏览器只需要在 dist 根目录下存在 favicon.icon 文件(名称、后缀固定)即可,这种方式已经废弃,更好的做法是使用 标签引用,如:
< rel="icon" sizes="192x192" href="/path/to/icon.png">复制代码处理这个图片,我尝试了三个方法:
1.html-webpack-plugin 的 favicon 属性配置
不适合我。
它会将文件输出至 dist 根目录下,与 index.html 同级,引用的是本地图片,而非 cdn 图片。
2.favicons-webpack-plugin
不适合我。
很强大,能根据你给的图片,生成所有类型的 icon 图标,问题有两个:首先是依赖了 phantomjs,墙外的站点,你懂得;再者引用的依旧是本地图片。
组件实现
适合我。
vuejs 的 vue-head 组件,reactjs 的 react-helmet 组件,可以配置 方式的 favicon。图片打包上传 cdn 之后,页面的图片地址也为 cdn 地址。
其它
如果你的模版页面有其他诸如 src 图片引用,可参考 html-withimg-loader
vuejs 项目中图片处理
前提:使用 vue-loader v15,webpack 配置好 url-loader 和 alias:
module.exports = { // ...其他配置 modules: { rules: [ { test: /.(jpe?g|png|gif)(?.*)?$/, use: 'url-loader?limit=1024&name=statics/img/[name]-[hash:5].[ext]', exclude: /node_modules/, }, ] }, resolve: { alias: { Images: path.resolve('public', 'statics', 'img'), }, }, // ...其他配置}复制代码template 中使用
<img src="~Images/logo.png"><img :src="require('Images/logo.png')"> // 注意 v-bind复制代码有个问题我目前没有解决(精简代码),还请大神指教:
// 无效,提示无法找到这个资源<img :src="require(`${img}`)">data() { img: 'Images/logo.png'}复制代码// 有效<img :src="require(`Images/${img}`)">data() { img: 'logo.png'}复制代码已解决,官网对 require 的说明: A context is created if your request contains s, so the exact module is not known on compile time.
样式表中使用
貌似无法使用 alias,只能使用 ~ 和相对路径:
body { background: url(Images/logo.png); // alias,错误 background: url(/Images/logo.png); // 有效,但是引用本地文件 background: url(~Images/logo.png); background: url(../../statics/img/logo.png); background: url(./../../statics/img/logo.png);}复制代码以 . 开头,将会被看作相对的模块依赖,并按照你的本地文件系统上的目录结构进行解析。
reactjs 中图片处理
前提:webpack 配置好 url-loader 和 alias
使用
不管是组件中还是样式表中,都可以使用 alias 和相对路径:
require('Images/logo.png');require('../../statics/img/logo.png');require('./../../statics/img/logo.png');复制代码body { background: url(Images/logo.png); background: url(../../statics/img/logo.png); background: url(./../../statics/img/logo.png);}复制代码最后
./ 可有可无,相对路径是以当前的文件为基础,注意 ../ 层数问题;不要以 / 开头,因为最终都是引用的本地图片。如有谬误,恳请斧正。
继续阅读与本文标签相同的文章
jQuery 前后端分离项目总结
前端的水平线,错误处理和调试
-
TypeScript 数据模型层编程的最佳实践
2026-06-02栏目: 教程
-
前端工程师面试题(性能优化)
2026-06-02栏目: 教程
-
让前端的子弹飞-TypeScript
2026-06-02栏目: 教程
-
Vue 全家桶,深入Vue 的世界
2026-06-02栏目: 教程
-
ZanProxy —— 本地代码调试线上页面,环境再也不是问题
2026-06-02栏目: 教程
