在 vue-cli 建立的專案中,用預設的 webpack 配置對專案打包後,發現 css 檔案中樣式的字首有所缺失,例如:flex 這個應該有字首的屬性卻沒有(display:-webkit-flex; && -webkit-flex:1),導致樣式在 iphone 6s plus 上出現了相容問題。
postcss 對 css 的字首是有處理功能的,在專案的預設配置中,會根據各個瀏覽器最新兩個版本的支援情況去新增字首的,而現在瀏覽器都應該能很好地支援 flex 了,於是,便不再加字首。對此,我們可以做如下處理:
//vue-loader.config.js
......
module.exports =)
]}
經過以上處理,打包後的 css 應該就擁有合適的字首了,但並不如此,原因是在打包過程中,css 有個壓縮動作,在這個動作中,壓縮外掛程式(用的是 optimize-css-assets-webpack-plugin 這個外掛程式)會再一次對 css 的字首做處理,會將它認為不需要的**(如不需要的 css 字首)去掉。因為前面已經用 postcss 對 css 的字首做過處理,所以在這裡對 css 字首的處理是多餘的,我們可以做如下處理:
//webpack.prod.config.js
......
const optimizecssplugin = require('
optimize-css-assets-webpack-plugin')
......
newoptimizecssplugin(,
//避免 cssnano 重新計算 z-index
safe: true
,
//cssnano通過移除注釋、空白、重複規則、過時的瀏覽器字首以及做出其他的優化來工作,一般能減少至少 50% 的大小
//cssnano 整合了autoprefixer的功能。會使用到autoprefixer進行無關字首的清理。預設不相容ios8,會去掉部分webkit字首,比如flex
//所以這裡選擇關閉,使用postcss的autoprefixer功能
autoprefixer: false
}, canprint:
true
//cssprocessoroptions: config.build.productionsourcemap ? } :
}),......
再次打包後,你會發現你想要的字首出現了。
即便如此做了,你發現 -webkit-flex:1 這個還是沒有出現,於是有了下面這個檔案
const fs = require('fs');const path = require('
path');
const config = require('
../config/index.js');
function resolve(dir)
function changefile(obj)
else
); fs.unlink(obj.changefile, function(err)
else
else
});}})}
});}
// 因為每次打包,css 的檔名都不一樣,所以通過遍歷資料夾來找到 css 檔案
function getfile(obj)
else
});}
});}var webkit =
var webkithtml =
function cssfix()
module.exports = cssfix;
這個**是在 npm run build 之後執行的,其作用就是給需要新增 -webkit-flex:x 的地方加上這個。
這個也是無奈之下不得已而為之,我會繼續尋找別的更好的方法,之後再更新了。
2018.10.22 更新:使用 vue-cli 3.0 建立專案,這個問題解決了。
C 中對DataSet進行壓縮
下面的方法中用到了 datasetsurrogate 附錄中帶了原始碼 1 呼叫 datasetsurrogate 對資料集進行序列化操作,生成二進位制陣列 public byte getserializedataset dataset dt 2 對二進位制陣列進行壓縮,得到壓縮後的二進位制陣列 p...
對webpack從零配置
一.新建配置檔案,檔名一般為webpack.config.js 二.配置檔案目錄,一般為根目錄,一般會放在.build資料夾下 三.配置檔案格式一般為module.exports 四.結構如下 module.exports module resolve performance devtool sou...
webpack對靜態資源的處理
一 對的處理 1.首先安裝url loader 因為依賴 file loader 所以要一併安裝,為其指定版本。yarn add url loader 0.6.2 file loader 1.1.6 dev 2.在webpack配置檔案的module中寫入以下內容。的配置 3.在css中引入測試,會...