babel的配置能够写在 package.json中,以下面css
// .babelrc { "babel": { presets: ["@babel/preset-env", "@babel/preset-stage-2"] } }
也能够写在一个.babelrc的JSON配置文件中前端
{ "presets": ["@babel/preset-env", "@babel/preset-stage-2"] }
你能够像上面同样直接指定presets为["@babel/preset-env", "@babel/preset-stage-2"],也能够为每个preset添加配置选项。(使用数组,第一个元素表示preset的名字,第二个元素表示配置项)node
{ "presets": [ ["@babel/preset-env", { }], "@babel/preset-stage-2" ] }
presets 的编译顺序是反向的,所以你应该把"stage-2"放在"env"后面。webpack
{ "presets": [ ["@babel/preset-env": { "targets" : "last 2 versions, not dead" }] ] } // 或者直接指定须要兼容的浏览器 { "presets": [ ["env": { "targets" : { "chrome": "58", "ie": "11" } }] ] } // 或者是在targets.browsers 中指定 { "presets": [ ["env": { "targets" : { "browsers": "last 2 versions", "esmodules": true, // 指定该选项,将会忽略browserslist, 仅支持那些那些原生支持es6 module的浏览器 "safari": true , // 启用safari前沿技术 "node": "true" || "current" //兼容当前node版本代码 } }] ] }
babel使用的浏览器查询是来自于browserslist项目。这个项目同时被不少前端工具库诸如auto-prefixer,postcss使用。最好的指定browserslist的方法是使用一个.browserslistrc 配置文件。它能够被项目中多种工具共享。git
last 2 vsersions not dead
你可使用es6
npx browserslist
来查看你查看当前项目的browserslisggithub
或者是在browserslist online tool 工具中查看web
"amd" | "umd" | "systemjs" | "commonjs" | "cjs" | "auto" | false, defaults to "auto"
指定将es6 modules 转换为什么种模块规范。chrome
通常在webpack 项目中,咱们会将此参数设置为false,既将module交由webpack处理,而不是babel。npm
若是设置为false, 将不转换。这在node项目中如mocha测试中将不会转换import/export,可能会出错
"usage" | "entry" | false, defaults to false This option configures how @babel/preset-env handles polyfills.
"entry": 在入口文件中加入全部的内置类型
若是在.babelrc中指定useBuiltIns: 'entry', 则应该在项目代码的顶部引入babel-polyfill
import "@babel/polyfill"
表示全量引入。
"usage": 只在当前文件中加入该文件用到的内置类型的polyfill。
设置为usage 不须要在顶部引入polyfill
"false": 不自动加入内置类型的polyfill。
该特性babel 7 中有效, 测试地址
npm install --save-dev @babel/plugin-transform-runtime npm install --save @babel/runtime @babel/runtime-corejs2 // .babelrc { "plugins": [["@babel/plugin-transform-runtime", { "corejs": 2, "helpers": true }]] }
@babel/plugin-transform-runtime这个插件主要作了三件事
@babel/runtime 和 @babel/polyfill 虽然都是为内置类型打上垫片,可是@babel/runtime是在模块内起做用,不会污染全局的Promise,Map...。因此实例的方法不会被polyfill
'123'.padStart()
@babel/plugin-transform-runtime 能够和useBuiltIns一块儿使用,做用的顺序按照plugins --> presets 的顺序,也就是先使用@babel/plugin-transform-runtime 打上垫片,而后再使用@babel/polyfill 再打上一次垫片。