webpack结合reactjs、vuejs项目中图片处理
我的需求
項目打包之后(假定輸出目錄為 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-plugin 的 favicon 屬性配置
不適合我。
它會將文件輸出至 dist 根目錄下,與 index.html 同級,引用的是本地圖片,而非 cdn 圖片。
2.favicons-webpack-plugin
不適合我。
很強大,能根據你給的圖片,生成所有類型的 icon 圖標,問題有兩個:首先是依賴了 phantomjs,墻外的站點,你懂得;再者引用的依舊是本地圖片。
組件實現
適合我。
vuejs 的 vue-head 組件,reactjs 的 react-helmet 組件,可以配置 link 方式的 favicon。圖片打包上傳 cdn 之后,頁面的圖片地址也為 cdn 地址。
其它
如果你的模版頁面有其他諸如 src 圖片引用,可參考 html-withimg-loader
頁面 Head 大全
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 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-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); } 復制代碼最后
./ 可有可無,相對路徑是以當前的文件為基礎,注意 ../ 層數問題;不要以 / 開頭,因為最終都是引用的本地圖片。 如有謬誤,懇請斧正。
轉載于:https://juejin.im/post/5b359656e51d4558d9235f1f
總結
以上是生活随笔為你收集整理的webpack结合reactjs、vuejs项目中图片处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Swift标准库源码阅读笔记 - Arr
- 下一篇: C#操作Sqlite快速入门及相关工具收