vue項目運行至ipad白屏問題

Vue做了一個單頁面應用,它在一切設備上都工作正常。
在調試另一個dug時,發現了這個問題。
項目在其他端都可以正常打開,只有在paid上打開時,顯示的是白屏狀態。
在剛開始解決這個問題時,花費了好幾個小時都沒解決,都準備從新編譯代碼了。
發現並沒有寫錯,uglify也沒搞錯,錯的是Safari本身。他們在第十七萬一千零四十一號bug中承認了自己的錯誤:

We incorrectly throw a syntax error when declaring a top level for-loop iteration variable the same as a parameter
當你定義一個與參數同名的for循環迭代變量時,我們錯誤地認爲這是一個語法錯誤。

解決方法其實很簡單:

  1. 進入build文件夾;
  2. 找到webpack.prod.conf.js文件;
  3. UglifyPlugin的定義裏添加關於mangle的選項,使它變成下面這個樣子:
new UglifyJsPlugin({
      uglifyOptions: {
        compress: {
          warnings: false
        },
        mangle: {
          safari10: true
        }
      },
      sourceMap: config.build.productionSourceMap,
      parallel: true
    }),

實際上,除此之外,還有另外一個bug也會影響到vue網頁在iOS上的展現,特別是當你用到廣爲流傳的Swiper插件的時候。這是因爲Swiper插件中用到了ES6的語法a = b ** cabc次方,而iOSSafari裏不認識這樣的語法,認爲這是一個錯誤,所以你需要讓Swiper經過babel的包裝,而缺省狀態下babel是不對node_modules裏的模塊進行編譯的。

解決方法是在項目根目錄下新建一個文件vue.config.js,在裏面添加如下語句:

module.exports = {
  chainWebpack: config => {
    config.rule('js').include.add(/node_modules\/(dom7|swiper)\/.*/)
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章