webpack结合reactjs、vuejs项目中图片处理

简介:
unsplash@gui_vasconcelos
这篇文章主要整理一下自己在使用 webpack 结合 vuejsreactjs 开发过程中图片的处理方法。

我的需求

项目打包之后(假定输出目录为 dist),除了 index.html,将所有的静态资源上传至 cdn,而并非打包之后所有静态资源都在应用服务器上。

index.html 中的图片

因为是 SPA,模版页面唯一要处理的图片就是 favicon,这个资源在 IE 10 及以下浏览器只需要在 dist 根目录下存在 favicon.icon 文件(名称、后缀固定)即可,这种方式已经废弃,更好的做法是使用 link 标签引用,如:

<link rel="icon" sizes="192x192" href="/path/to/icon.png">
复制代码

处理这个图片,我尝试了三个方法:

1.html-webpack-pluginfavicon 属性配置

不适合我。

它会将文件输出至 dist 根目录下,与 index.html 同级,引用的是本地图片,而非 cdn 图片。

2.favicons-webpack-plugin

不适合我。

很强大,能根据你给的图片,生成所有类型的 icon 图标,问题有两个:首先是依赖了 phantomjs,墙外的站点,你懂得;再者引用的依旧是本地图片。

组件实现

适合我。

vuejsvue-head 组件,reactjsreact-helmet 组件,可以配置 link 方式的 favicon。图片打包上传 cdn 之后,页面的图片地址也为 cdn 地址。

其它

如果你的模版页面有其他诸如 src 图片引用,可参考 html-withimg-loader

页面 Head 大全

vuejs 项目中图片处理

前提:使用 vue-loader v15webpack 配置好 url-loaderalias

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 expressions, 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-loaderalias

使用

不管是组件中还是样式表中,都可以使用 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);
}
复制代码

最后

./ 可有可无,相对路径是以当前的文件为基础,注意 ../ 层数问题;不要以 / 开头,因为最终都是引用的本地图片。 如有谬误,恳请斧正。



原文发布时间:2018年06月29日
原文作者:zhCN_超
本文来源 掘金,如需转载请紧急联系作者
相关文章
|
6天前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
102 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
4月前
|
前端开发
在Webpack配置文件中,如何配置loader以处理其他类型的文件,如CSS或图片
在Webpack配置文件中,通过设置`module.rules`来配置loader处理不同类型的文件。例如,使用`css-loader`和`style-loader`处理CSS文件,使用`file-loader`或`url-loader`处理图片等资源文件。配置示例:在`rules`数组中添加对应规则,指定`test`匹配文件类型,`use`指定使用的loader。
|
1月前
|
前端开发 JavaScript Java
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
126 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
|
1月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
97 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
1月前
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
86 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
1月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
101 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
7天前
|
资源调度 JavaScript 前端开发
Pinia 如何在 Vue 3 项目中进行安装和配置?
Pinia 如何在 Vue 3 项目中进行安装和配置?
|
1月前
|
监控 JavaScript 前端开发
ry-vue-flowable-xg:震撼来袭!这款基于 Vue 和 Flowable 的企业级工程项目管理项目,你绝不能错过
基于 Vue 和 Flowable 的企业级工程项目管理平台,免费开源且高度定制化。它覆盖投标管理、进度控制、财务核算等全流程需求,提供流程设计、部署、监控和任务管理等功能,适用于企业办公、生产制造、金融服务等多个场景,助力企业提升效率与竞争力。
95 12
|
2月前
|
资源调度 JavaScript 前端开发
创建vue3项目步骤以及安装第三方插件步骤【保姆级教程】
这是一篇关于创建Vue项目的详细指南,涵盖从环境搭建到项目部署的全过程。
274 1
|
4月前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。