使用Babel处理ES6语法
https://www.babeljs.cn/
https://www.babeljs.cn/setup#installation
npm install --save-dev babel-loader @babel/core
| module: {
rules: [
{ test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" }
]
}
|
npm install @babel/preset-env --save-dev
| rules: [{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader",
options: {
"presets": ["@babel/preset-env"]
}
},
|
npm install --save @babel/polyfill
index.js
| import "@babel/polyfill";
const arr = [
new Promise(() => {}),
new Promise(() => {})
]
arr.map(item => {
console.log(item);
})
|
| Asset Size Chunks Chunk Names
index.html 197 bytes [emitted]
main.js 934 KiB main [emitted] main
|
打包后的main.js
特别大
useBuiltIns
| rules: [{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader",
options: {
"presets": [["@babel/preset-env", {
useBuiltIns: 'usage'
}]]
}
},
|
| Asset Size Chunks Chunk Names
index.html 197 bytes [emitted]
main.js 165 KiB main [emitted] main
|
上面的适合写业务代码,但是如果写的是类库需要用下面的方式(因为presets
会污染全局环境)
npm install --save-dev @babel/plugin-transform-runtime
npm install --save @babel/runtime
npm install --save @babel/runtime-corejs2
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | options: {
// "presets": [["@babel/preset-env", {
// targets: {
// chrome: "67",
// },
// useBuiltIns: 'usage'
// }]]
"plugins": [["@babel/plugin-transform-runtime", {
"corejs": 2,
"helpers": true,
"regenerator": true,
"useESModules": false
}]]
}
|
.babelrc
.babelrc
| {
"plugins": [["@babel/plugin-transform-runtime", {
"corejs": 2,
"helpers": true,
"regenerator": true,
"useESModules": false
}]]
}
|
.babelrc
| {
"presets": [
[
"@babel/preset-env", {
targets: {
chrome: "67",
},
useBuiltIns: 'usage'
}]
]
}
|