安装
npm install --save-dev babel-loader @babel/core @babel/preset-env webpack
使用
-
安装上面所示的插件,其中babel-loader是webpack的loader,用于打包时处理js文件,@babel/core是babel的核心功能,@babel/preset-env是babel预置的一系列转换ECMAScript2015+的插件。但是有可能不会把你代码中用到的所有特性都进行转译,这是可以通过@babel/polyfill来自动添加转义需要的功能。
npm install --save-dev @babel/polyfill
-
修改webpack的配置文件
moodule: [ rules: [ { test: /\.m?js$/, exclude: /(node_modules)|(bower_components)/, use: { loader: 'babel-loader', options: { presets: ['@babel-env'] } } } ] ]
通过options选项可以将参数传给babel-loader
-
运行打包命令,js文件会被自动编译成兼容低版本浏览器的代码
一个可正确运行的webpack.config.js文件代码如下(添加了polyfill):
const HtmlWebpackPlugin = require('html-webpack-plugin')
const path = require('path')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const config = {
mode: 'development',
entry: ["@babel/polyfill", './src/index.js'],
output: {
path: path.resolve(__dirname,'dist'),
filename: 'pushbox.bundle.js'
},
devServer: {
contentBase: './dist',
},
module: {
rules: [{
test: /(\.png)|(\.jpg)|(\.gif)$/,
use: ['file-loader']
},
{
test: /\.m?js$/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}]
},
plugins: [
new HtmlWebpackPlugin({template: './index.html',title:'推箱子小游戏'}),
new CopyWebpackPlugin([{
from: './src/assets',
to:'./assets'
}])
],
optimization: {
minimize: true
}
}
module.exports = config;
通过babel配置文件进行配置
通过babel配置文件,也能够向babel传递参数,我们在项目根目录下面新建babel.config.js:
module.exports = {
presets: [
[
"@babel/preset-env",
{
targets: {
ie: "9"
}
}
]
]
}
presets的详细配置项看这里:https://www.babeljs.cn/docs/babel-preset-env