webpack 4.x使用babel8.x编译es6及新API

1、初始化项目

如图:(所有文件为空白或者初始化)
执行命令:npm init
在这里插入图片描述

2、webpack安装及初始化

1)安装命令:npm install -D webpack webpack-cli

安装完成提示:
+ webpack@4.32.2
+ webpack-cli@3.3.2

2)在js文件夹下创建index.js文件

//index.js

console.log("恭喜你打印了index.js文件的内容");

3)配置webpack.config.js

const path = require("path");

module.exports = {
	entry:"./src/js/index.js",
	
	output:{
		path:path.resolve(__dirname,"dist"),
		filename:"bundle.js"
	}
}

4)配置package.json

在这里插入图片描述
5)终端执行:npm run build
然后把index.html引入dist下的bundle.js文件,并执行index.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>webpackdemo</title>
	</head>
	<body>
		
		<script src="dist/bundle.js"></script>
	</body>
</html>

浏览器成功提示:
在这里插入图片描述

3、babel

安装babel

1)安装babel-loader:npm install babel-loader
2)安装babel相关的插件:npm install --save-dev @babel/core @babel/cli @babel/preset-env

插件用途:

1)@babel/core:@babel/core是babel的核心存在,babel的核心API都存在这个模块里面,比如:transform。@babel/preset-env是一个只能预设,允许你使用最新的js。

根目录创建babel.config.js文件
//babel.config.js
const presets = [
	["@babel/preset-env", {
		"useBuiltIns": "usage", // 在每个文件中使用polyfill时,为polyfill添加特定导入。利用捆绑器只加载一次相同的polyfill。
		"modules": false, // 启用将ES6模块语法转换为其他模块类型,设置为false不会转换模块。
	}]
];

module.exports = {
	presets
};
webpack.config.js配置
//webpack.config.js
const path = require("path");

module.exports = {
	entry: "./src/js/index.js",

	output: {
		path: path.resolve(__dirname, "dist"),
		filename: "bundle.js"
	},

	module: {
		rules: [{
			test: /\.js$/,
			loader: 'babel-loader',
			exclude: /node_modules/
		}]
	}
}

到了这一步执行npm run build,在index.html下添加es6的语法,然后IE9浏览器打开index.html,浏览器是不会报错了,因为babel已经把es6的语法编译成es5语法了,但是babel只是转换es6新语法,不会转换新的API,如:Set,Map,Promise等,那么就要使用到@babel/polyfill和@babel/plugin-transfrom-runtime两个东西,由于@babel/polyfill添加到全局范围,所以@babel/plugin-transfrom-runtime是防止@babel/polyfill全局污染。

安装@babel/polyfill和@babel/plugiin-transfrom-runtime

1)安装命令:npm install --save @babel/polyfill

npm install --save @babel/plugin-tranfrom-runtime

修改babel.config.js文件
//babel.config.js
const presets = [
	["@babel/preset-env", {
		"useBuiltIns": "usage", // 在每个文件中使用polyfill时,为polyfill添加特定导入。利用捆绑器只加载一次相同的polyfill。
		"modules": false, // 启用将ES6模块语法转换为其他模块类型,设置为false不会转换模块。
		"targets": {
			"browsers": "last 2 versions, not ie <= 9"
		}
	}]
];

const plugins = [
	["@babel/plugin-transform-runtime", {
		"helpers": false
	}]
];

module.exports = {
	presets,
	plugins
};

到了这一步就可以在js文件下的index.js写新的API了,如:Set,Map等。

配置文件详情预览

1)webpack.config.js

//webpack.config.js
const path = require("path");

module.exports = {
	entry: "./src/js/index.js",

	output: {
		path: path.resolve(__dirname, "dist"),
		filename: "bundle.js"
	},

	module: {
		rules: [{
			test: /\.js$/,
			loader: 'babel-loader',
			exclude: /node_modules/
		}]
	}
}

2)package.json

{
  "name": "webpackdemo",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --mode production"
  },
  "keywords": [
    "webpack"
  ],
  "author": "lv",
  "license": "ISC",
  "devDependencies": {
    "@babel/cli": "^7.4.4",
    "@babel/core": "^7.4.5",
    "@babel/plugin-transform-runtime": "^7.4.4",
    "@babel/polyfill": "^7.4.4",
    "@babel/preset-env": "^7.4.5",
    "babel-loader": "^8.0.6",
    "webpack": "^4.32.2",
    "webpack-cli": "^3.3.2"
  },
  "dependencies": {}
}

3)babel.config.js

//babel.config.js
const presets = [
	["@babel/preset-env", {
		"useBuiltIns": "usage", // 在每个文件中使用polyfill时,为polyfill添加特定导入。利用捆绑器只加载一次相同的polyfill。
		"modules": false, // 启用将ES6模块语法转换为其他模块类型,设置为false不会转换模块。
		"targets": {
			"browsers": "last 2 versions, not ie <= 9"
		}
	}]
];

const plugins = [
	["@babel/plugin-transform-runtime", {
		"helpers": false
	}]
];

module.exports = {
	presets,
	plugins
};

4)项目的目录列表
在这里插入图片描述
友情链接:前端网

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值