babel是一个javascript编译器,是前端开发中的一个利器。它突破了浏览器实现es标准的限制,使咱们在开发中可使用最新的javascript语法。javascript
经过构建和babel,可使用最新js语法进行开发,最后自动编译成用于浏览器或node环境的代码。前端
配合webpack使用babel前,须要首先使用npm init
初始化一个项目,npm install -g webpack
安装webpack(全局安装是为了在命令行使用webpack命令)。java
npm install --save-dev babel-loader babel-core babel-preset-env
其中,babel-preset-env插件是为了告诉babel只编译批准的内容,至关于babel-preset-es2015, es2016, es2017及最新版本。经过它可使用最新的js语法。node
在webpack配置文件中配置bable-loaderwebpack
module: { rules: [ { test: /\.js$/, use: { loader: 'babel-loader', options: { presets: [ ['env',{ targets: { browsers: ['> 1%', 'last 2 versions'] } }] ] } }, exclude: '/node_modules/' } ] }
其中,exclude是定义不但愿babel处理的文件。targets是presets的一些预设选项,这里表示将js用于浏览器,只确保占比大于1%的浏览器的特性,主流浏览器的最新两个主版本。
更多与配置有关的信息,能够参考:
babel env preset设置,
browserlist预设置.git
//.bablerc文件 { "presets": [ ['env',{ "targets": { "browsers": ['> 1%', 'last 2 versions'] } }] ] } //原webpack.config.js文件 module: { rules: [ { test: /\.js$/, use: { loader: 'babel-loader' }, exclude: '/node_modules/' } ] }
在上面的babel配置中,babel只是将一些es6,es7-8的语法转换成符合目标的js代码,可是若是咱们使用一些特性或方法,好比Generator, Set, 或者一些方法。babel并不能转换为低版本浏览器识别的代码。这时就须要babel-polifill。es6
简单的说,polifill就是一个垫片,提供了一些低版本es标准对高级特性的实现。使用polifill的方法以下:github
npm install --save babel-polifill
web
而后在应用入口引入polifill,要确保它在任何其余代码/依赖声明前被调用。npm
//CommonJS module require('babel-polyfill'); //es module import 'babel-polifill';
在webpack.config.js中,将babel-polifill加入entry数组中:
entry: ["babel-polifill", "./app.js"]
相比于runtime-transform,polifill用于应用开发中。会添加相应变量到全局,因此会污染全局变量。
更多细节参考babel-polifill。
runtime transform也是一个插件,它与polifill有些相似,但它不污染全局变量,因此常常用于框架开发。
安装:npm install --save-dev babel-plugin-transform-runtime
npm install --save babel-runtime
用法:
将下面内容添加到.bablerc文件中
{ "plugins": ["transform-runtime"] }
更多细节参考bable-runtime-transform插件。