babel是一个javascript编译器,可以转换语法(箭头函数)为es5类型,但是不会转化新的全局变量,如Promise,新的原生方法Array.from()、Object.assign(),此时需要用到Polyfill插件或者Runtime transform插件
yarn init -y
yarn add babel-cli babel-polyfill babel-preset-env -D
文件结构如下
│ package.json
│ yarn.lock
│
├─node_modules
│
└─src
index.js
print.js
index.js
import './print'
Object.assign({})
Array.from([1,2,3])
new Promise(resolve => console.log('promise'))
function* geneFn() {
yield 1
}
let g = geneFn()
g.next()
async function asyncFn() {
return await 1
}
print.js
console.log('there is print')
"scripts": {
"build": "babel --plugins babel-polyfill --presets env src -d dist"
}
"scripts": {
"build": "babel src -d dist"
}
.babelrc
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}]
],
"plugins": ["babel-polyfill", "transform-es2015-modules-commonjs"]
}
yarn add babel-cli babel-plugin-transform-runtime babel-preset-env -D
"scripts": {
"build": "babel --plugins transform-runtime --presets env src -d dist"
}
"scripts": {
"build": "babel src -d dist"
}
.babelrc
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}]
],
"plugins": ["transform-runtime", "transform-es2015-modules-commonjs"]
}
Polyfill适合单个项目,会污染全局变量。
Runtime transform适合对外发布的项目,不会污染全局环境(推荐)。
https://www.babeljs.cn/docs/usage/polyfill/
https://www.babeljs.cn/docs/plugins/transform-runtime