webpack学习第九步——babel编译es6及react

2020-02-14  本文已影响0人  Love小六六

es6 在低版本浏览器程序报错

安装相关babel

// JS和loader打通
npm install babel-loader @babel/core -D
// 将es6转化为es5
npm install @babel/preset-env -D
const arr = [
    new Promise(() => {}),
    new Promise(() => {})
]

arr.map(item => console.log(item))
module: {
    rules: [{
        test: /\.(jpg|png|gif)$/,
        use: {
            loader: "url-loader",
            options: {
                name: '[name]_[hash].[ext]',
                outputPath: 'images/',
                limit: 2048
            }
        }
    },{
        test: /\.css$/,
        use: [
            'style-loader',
            'css-loader',
            'postcss-loader'
        ]
    },{
    // 对js文件使用babel-loader 及 @babel/preset-env
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        options: {
            presets: ["@babel/preset-env"]
        }
    }]
}
"scripts": {
    "start": "webpack",
},

babel-polyfill

npm install @babel/polyfill -D
// 引入polyfill
import "@babel/polyfill"
const arr = [
    new Promise(() => {}),
    new Promise(() => {})
]

arr.map(item => console.log(item))
module: {
    rules: [{
        test: /\.(jpg|png|gif)$/,
        use: {
            loader: "url-loader",
            options: {
                name: '[name]_[hash].[ext]',
                outputPath: 'images/',
                limit: 2048
            }
        }
    },{
        test: /\.css$/,
        use: [
            'style-loader',
            'css-loader',
            'postcss-loader'
        ]
    },{
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        options: {
            presets: [["@babel/preset-env",{
                // polyfill只添加业务代码用到的特性
                useBuiltIns: 'usage'
            }]]
        }
    }]
},

配置其他属性

{
    test: /\.js$/,
    exclude: /node_modules/,
    loader: 'babel-loader',
    options: {
        presets: [["@babel/preset-env",{
            useBuiltIns: 'usage',
            targets: {
                // 大于67版本的chrome上
                chrome: '67',
            }
        }]]
    }
}

polyfill 全局污染问题解决

npm install @babel/plugin-transform-runtime -D
npm install @babel/runtime -D 
npm install @babel/runtime-corejs2 -D

{
    test: /\.js$/,
    exclude: /node_modules/,
    loader: 'babel-loader',
    options: {
        // presets: [["@babel/preset-env",{
        //     useBuiltIns: 'usage',
        //     targets: {
        //         chrome: '67',
        //     }
        // }]]
        
        // 使用plugin-transform-runtime
        plugins: [["@babel/plugin-transform-runtime",{
            "corejs": 2,
            "helpers": true,
            "regenerator": true,
            "useESModules": false
        }]]
    }
}
// import "@babel/polyfill"
const arr = [
    new Promise(() => {}),
    new Promise(() => {})
]

arr.map(item => console.log(item))

babelrc文件

{
    test: /\.js$/,
    exclude: /node_modules/,
    loader: 'babel-loader',
}
//.babelrc文件
{
  "plugins": [["@babel/plugin-transform-runtime",{
    "corejs": 2,
    "helpers": true,
    "regenerator": true,
    "useESModules": false
  }]]
}

打包react文件

npm install react react-dom -D
npm install @babel/preset-react -D
{
  "presets": [
    [
      "@babel/preset-env",{
        "targets": {
          "chrome": "67"
        },
        "useBuiltIns": "usage"
      }
    ],
    // 增加react的babel
    "@babel/preset-react"
  ]
}
import "@babel/polyfill"
import React,{ Component } from 'react'
import ReactDom from 'react-dom'
class App extends Component {
    render() {
        return <div>hello world</div>
    }
}

ReactDom.render(<App/>,document.getElementById('root'))
上一篇 下一篇

猜你喜欢

热点阅读