公司项目,因为一些特殊原因,需要兼容到 IE
,最低还要兼容到 chrome 33
,记录一下解决过程。
起因是在项目中引入了一个新包 crypto-js,其中的一个文件 enc-base64url.js
中的 parse
和 stringify
方法使用ES6的默认参数语法,导致低版本浏览器无法解析:1
2parse: function (base64Str, urlSafe=true) { ... }
stringify: function (wordArray, urlSafe=true) { ... }
起步
- 软件环境
1
2
3node v14.16.1
npm v6.14.12
@vue/cli v4.5.13 - package.json
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"dependencies": {
"vue": "2.6.10",
"vue-router": "3.0.6",
"vuex": "3.1.0"
},
"devDependencies": {
"@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
"@vue/cli-plugin-babel": "4.4.4",
"@vue/cli-plugin-eslint": "4.4.4",
"@vue/cli-plugin-unit-jest": "4.4.4",
"@vue/cli-service": "4.4.4",
"@vue/test-utils": "1.0.0-beta.29",
"autoprefixer": "9.5.1",
"babel-eslint": "10.1.0",
"babel-jest": "23.6.0",
"babel-plugin-dynamic-import-node": "2.3.3",
"babel-plugin-jsx-v-model": "^2.0.3",
"chalk": "2.4.2",
"connect": "3.6.6",
"eslint": "6.7.2",
"eslint-plugin-vue": "6.2.2",
"html-webpack-plugin": "3.2.0",
"less": "^3.12.2",
"less-loader": "^7.1.0",
"mockjs": "1.0.1-beta3",
"runjs": "4.3.2",
"sass": "1.26.8",
"sass-loader": "8.0.2",
"script-ext-html-webpack-plugin": "2.1.3",
"serve-static": "1.13.2",
"svg-sprite-loader": "4.1.3",
"svgo": "1.2.2",
"vue-template-compiler": "2.6.10"
}
解决过程
修改
browserslist
配置
在package.json
文件中修改browserslist
配置为:1
2
3
4
5"browserslist": [
"> 1%",
"last 2 versions",
"not ie < 9"
]修改
vue.config.js
配置
在vue.config.js
中修改配置如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19module.exports = {
/* 其它配置 */
transpileDependencies: [
// 因为项目新引入这个包,所以在这里写入报名
// 文档:https://cli.vuejs.org/zh/guide/browser-compatibility.html
'crypto-js',
],
chainWebpack(config) {
/* 其它配置 */
config.entry.app = ["babel-polyfill", "./src/main.js"];
/* 其它配置 */
}
/* 其它配置 */
}修改
babel.config.js
配置
在babel.config.js
中修改配置如下:1
2
3
4
5
6
7
8
9
10module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
],
'env': {
'development': {
'plugins': ['dynamic-import-node']
}
}
}
至此,问题解决。