Babel处理es6语法

npm install --save-dev babel-loader @babel/core

npm install @babel/preset-env --save-dev // 语法转义

npm install --save @babel/polyfill  // 往低版本浏览器中添加缺失的js对象和方法

module: {
    rules: [
      {
        test: /\.m?js$/,
        exclude: /node_modules/, // 第三方的不做转义
        use: {
          loader: "babel-loader", // babel-loader并不能将es6转成ES5,所以还需要下方的插件
          options: {
            presets: ['@babel/preset-env']// 语法转义,但是只有这些还不够,这里只是转义,还需要将一些低版本的浏览器缺失的js方法和对象都添加到低版本浏览器中
          }
        }
      }
    ]
  }

import "@babel/polyfill"; 在js文件中引入, 但是这样直接引入过大,有时候不需要这么多的配置,所以需要 

module: {
    rules: [
      {
        test: /\.m?js$/,
        exclude: /node_modules/, // 第三方的不做转义
        use: {
          loader: "babel-loader", // babel-loader并不能将es6转成ES5,所以还需要下方的插件
          options: {
            presets: [['@babel/preset-env'], {
                useBuiltIns: 'usage' // 通过这个配置来优化,只添加自己需要的内容到低版本浏览器
            }]
          }
        }
      }
    ]
  }

presets还有其他的配置项 如果是业务类型的代码使用presets即可

module: {
    rules: [
      {
        test: /\.m?js$/,
        exclude: /node_modules/, // 第三方的不做转义
        use: {
          loader: "babel-loader", // babel-loader并不能将es6转成ES5,所以还需要下方的插件
          options: {
            presets: [['@babel/preset-env', {
                "targets": {
                   "chrome": "67", // 浏览器版本大于67就不需要做babel了
                },
                "useBuiltIns": "usage", // 通过这个配置来优化,只添加自己需要的内容到低版本浏览器
            }]]
          }
        }
      }
    ]
  }

 npm install --save-dev @babel/plugin-transform-runtime

npm install --save @babel/runtime

npm install --save @babel/runtime-corejs2

如果是插件库类型的代码使用plugins runtime即可, 因为在import "@babel/polyfill";会污染全局环境

module: {
    rules: [
      {
        test: /\.m?js$/,
        exclude: /node_modules/, // 第三方的不做转义
        use: {
          loader: "babel-loader", // babel-loader并不能将es6转成ES5,所以还需要下方的插件
          options: {
            "plugins": [
                [
                  "@babel/plugin-transform-runtime",
                  {
                    "corejs": 2,
                    "helpers": true,
                    "regenerator": true,
                    "version": "7.0.0-beta.0"
                    }
                ]]
          }
        }
      }
    ]
  }

 如果一直配置babel的内容 options中的内容会特别多,所以需要建立.babelrc文件

在Babel执行编译的过程中,会从项目的根目录下的 .babelrc文件中读取配置。.babelrc是一个json格式的文件。
在.babelrc配置文件中,主要是对预设(presets) 和 插件(plugins) 进行配置。.babelrc配置文件一般为如下:

{
  "plugins": [
                [
                  "@babel/plugin-transform-runtime",
                  {
                    "corejs": 2,
                    "helpers": true,
                    "regenerator": true,
                    "version": "7.0.0-beta.0"
                    }
                ]]
   presets: [
        [
            '@babel/preset-env', {
            "targets": {
                chrome": "67", // 浏览器版本大于67就不需要做babel了
            },
            "useBuiltIns": "usage", // 通过这个配置来优化,只添加自己需要的内容到低版本浏览器
            }
        ],
        "@babel/preset-react"
    ]
}

全量

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const webpack = require('webpack');

module.exports = {
	mode: 'development',
	devtool: 'cheap-module-eval-source-map',
	entry: {
		main: './src/index.js'
	},
	devServer: {
		contentBase: './dist',
		open: true,
		port: 8080,
		hot: true,
		hotOnly: true
	},
	module: {
		rules: [{ 
			test: /\.js$/, 
			exclude: /node_modules/, 
			loader: 'babel-loader',
		}, {
			test: /\.(jpg|png|gif)$/,
			use: {
				loader: 'url-loader',
				options: {
					name: '[name]_[hash].[ext]',
					outputPath: 'images/',
					limit: 10240
				}
			} 
		}, {
			test: /\.(eot|ttf|svg)$/,
			use: {
				loader: 'file-loader'
			} 
		}, {
			test: /\.scss$/,
			use: [
				'style-loader', 
				{
					loader: 'css-loader',
					options: {
						importLoaders: 2
					}
				},
				'sass-loader',
				'postcss-loader'
			]
		}, {
			test: /\.css$/,
			use: [
				'style-loader',
				'css-loader',
				'postcss-loader'
			]
		}]
	},
	plugins: [
		new HtmlWebpackPlugin({
			template: 'src/index.html'
		}), 
		new CleanWebpackPlugin(['dist']),
		new webpack.HotModuleReplacementPlugin()
	],
	optimization: {
		usedExports: true
	},
	output: {
		filename: '[name].js',
		path: path.resolve(__dirname, 'dist')
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值