vue-cli 3/4兼容Android低版本白屏问题
问题描述:
运行很久的H5页面,突然大量用户反馈打开页面白屏,根据多方问题排查 最终确定是Android版本导致的 目前已知Android6.0运行是OK的 Android5.0环境允许白屏 ,具体原因是低版本安卓系统内置的 webview 不支持 ES6 语法等一些新特性,所以报错。
根目录下新建 .babelrc 文件
1
2
3
4
5
6
7{
"presets": ["@babel/preset-env"],
"plugins": [
"@babel/plugin-transform-runtime"
]
}修改 babel.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14module.exports = {
presets: [
[
'@vue/app',
{
useBuiltIns: 'entry',
polyfills: [
'es6.promise',
'es6.symbol'
]
}
]
]
}修改 main.js 文件,导入依赖
1
2
3
4
5import '@babel/polyfill'
import Es6Promise from 'es6-promise'
require('es6-promise').polyfill()
Es6Promise.polyfill()配置vue.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39const path = require('path');
function resolve(dir) {
return path.join(__dirname, '.', dir);
}
module.exports = {
... // 其他配置
// 默认情况下 babel-loader 会忽略所有 node_modules 中的文件。
// 如果你想要通过 Babel 显式转译一个依赖,可以在这个选项中列出来
// 重要
transpileDependencies: ['node_modules/webpack-dev-server/client'],
chainWebpack: config => {
//重要
config.entry.app = ['@babel/polyfill', './src/main.js']
//重要:通过add方法,配置babel需要另外转换的文件
config.module.rule('compile')
.test(/\.js$/)
.include
.add(resolve('src'))
.add(resolve('test'))
.add(resolve('static'))
.add(resolve('node_modules/webpack-dev-server/client'))
.add(resolve('node_modules'))
.end()
.use('babel')
.loader('babel-loader')
.options({
presets: [
['@babel/preset-env', {
modules: false
}]
]
});
}
}安装的依赖
1
2npm install --save-dev @babel/core @babel/plugin-transform-runtime @babel/preset-env es6-promise @babel/polyfill babel-plugin-transform-remove-console
注意:如果发布到测试环境和线上环境时,发现没有生效,主要问题在第5步安装依赖,npm时使用–save-dev只会将依赖保存到package.json的devDependencies中,只有开发环境才有效,其他环境无效;故将命令修改为以下命令:
1
2
3
4
5
6
7
8# 如果知道依赖的确切版本,可以直接配置到package.json的dependencies中
npm install --save @babel/core @babel/plugin-transform-runtime @babel/preset-env es6-promise @babel/polyfill
# To install it, you can run: npm install --save --
# @babel/runtime/helpers/createForOfIteratorHelper
# 如果上一步没有报缺少该依赖,可以不要
npm install –save @babel/runtime–save-dev说明:
1 | --save || -S // 运行依赖(发布) |
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 吴星喜的博客!
評論