基本配置
- 拆分配置和merge
高级配置
优化打包效率
优化产出代码
构建流程概述
babel
面试题
前端代码为何要进行构建和打包?
module chunk bundle 分别什么意思,有何区别?
loader和plugin的区别?
webpack如何实现懒加载?
webpack常见性能优化
babel-runtime和babel-polyfill的区别
主要配置
yarn add webpack@3.10.0 webpack-dev-server@2.9.7 --dev
yarn add html-webpack-plugin@2.30.1 --dev
yarn add babel-core@6.26.0 babel-preset-env@1.6.1 babel-loader@7.1.2 --dev
yarn add babel-preset-react@6.24.1 --save
yarn add react@16.2.0 react-dom@16.2.0 --save
yarn add style-loader@0.19.1 css-loader@0.28.8 --dev
yarn add extract-text-webpack-plugin@3.0.2 --dev
yarn add sass-loader@6.0.6 node-sass@4.7.2 --dev
yarn add file-loader@1.1.6 url-loader@0.6.2 --dev
yarn add font-awesome
yarn add webpack-dev-server@2.9.7 --dev
————————————
yarn add webpack webpack-dev-server --dev
yarn add html-webpack-plugin babel-core babel-preset-env babel-loader --dev
yarn add babel-preset-react react react-dom --save
yarn add style-loader css-loader extract-text-webpack-plugin sass-loader node-sass --dev
yarn add file-loader url-loader webpack-dev-server --dev
yarn add font-awesome
yarn add webpack-cli html-loader
yarn add react-router-dom axios less-loader less antd babel-plugin-import
yarn add jsonp less@^2.7.3 moment --save(jsonp跨域 同源策略 协议 域名 端口,三个都一样才能保证不跨域)
//创建一个React项目需要的依赖
yarn add react react-dom webpack webpack-cli webpack-dev-server html-webpack-plugin html-loader
yarn add @babel/core babel-loader @babel/preset-env @babel/preset-react --save-dev
yarn add react-router-dom axios less-loader less antd babel-plugin-import
yarn add jsonp less@^2.7.3 moment --save(jsonp跨域 同源策略 协议 域名 端口,三个都一样才能保证不跨域)
// 生成 package.json 文件
npm init
//安装需要的依赖
npm install --save react (安装React)
npm install --save react-dom (安装React Dom)
npm install --save-dev webpack (安装webpack,打包工具)
npm install --save-dev webpack-cli (使用 webpack 4+ 版本,还需要安装 webpack-cli)
(安装webpack-dev-server,一个小型express服务器,主要特性是支持热加载)
npm install --save-dev webpack-dev-server
(webpack需要两个额外的组件来处理HTML:html-webpack-plugin和html-loader)
npm install --save-dev html-webpack-plugin html-loader
安装过webpack
后需要修改 package.json
文件的内容
"scripts": {
"start": "webpack-dev-server --open --mode development",
"build": "webpack --mode production"
}
新建一个 webpack.config.js
文件
const HtmlWebPackPlugin = require("html-webpack-plugin");
module.exports = {
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: "babel-loader"
}
},
{
test: /\.html$/,
use: [
{
loader: "html-loader"
}
]
}
]
},
plugins: [
new HtmlWebPackPlugin({
template: "./index.html",
filename: "./index.html"
})
]
};
安装babel
,babel
是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行
npm install --save-dev @babel/core
(webpack并不知道如何将ES6语法转换为ES5,不过 webpack 可以使用 loader 来完成。即webpack加载器将一些东西作为输入,并将其转换为其他东西输出。)
npm install --save-dev babel-loader
npm install --save-dev @babel/preset-env (将ES6语法转码为ES5)
npm install --save-dev @babel/preset-react (将JSX语法转化为JavaScript)
新建一个配置文件.babelrc
写入以下内容
{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
在根目录下新建一个 index.html 写入以下内容
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>new react project</title>
</head>
<body>
<div id="app"></div>
</body>
</html>
新建一个 src
文件夹,在src
文件夹下新建一个 index.js
写入以下内容
import React from 'react';
import ReactDom from 'react-dom';
class App extends React.Component {
render() {
return (
<h1>
Hello World !
</h1>
)
}
}
ReactDom.render(
<App />,
document.getElementById('app')
);
运行`npm start`即可在浏览器访问页面。
运行`npm run build`时,会出现一个dist文件夹,文件夹中包含有一个html和一个js文件,是打包后的文件。