entry[入口]

依赖图

  • 全部打包成.js .css .jpg .png
  • 根据入口文件找到依赖

    1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12492651/1630166536958-9acc6afc-c887-448f-89c3-85cb8da0a0f3.png#clientId=u481cbf0d-f360-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=247&id=u7d717bf7&margin=%5Bobject%20Object%5D&name=image.png&originHeight=494&originWidth=1012&originalType=binary&ratio=1&rotation=0&showTitle=false&size=201603&status=done&style=none&taskId=u5854f629-00bd-4d66-8455-8561cfc0826&title=&width=506)

    单入口

    module.exports = {
    entry: "./src/index.js",  // 打包文件入口文件
    }
    

    多入口

    ```javascript module.exports = { entry: “./src/index.js”, // 打包文件入口文件 appentry: “./src/appentry.js” }

// 也可以是数组‘ module.exports = { entry: [‘./fileA.js’, ‘fileB.js’] }

<a name="NZ1Tn"></a>
### output[出口]

- 将编译好的文件输出到磁盘
<a name="KgulV"></a>
#### 单入口配置
```javascript
module.exports = {
  entry: "./src/index.js",  // 打包文件入口文件
  output: {
    filename: "built.js", // 输出文件名
    path: path.join(__dirname, "build") //输出路径
  }
}

多入口配置

  • 通过占位符确保文件名称的唯一

    module.exports = {
    entry: "./src/index.js",  // 打包文件入口文件
    search: "./src/search.js"
    output: {
      filename: "[name].js", // 输出文件名
      path: path.join(__dirname, "/build") //输出路径
    }
    }
    

    Loaders

  • webpack开箱即用,只支持JS和json 两种类型文件,通过loaders 去支持其他文件类型并把他们转换成有效的模块,并且可以添加到依赖图中

  • 本身是一个函数接受源文件为参数,返回转换结果

    常见的loaders

          ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12492651/1630167798951-c28ab4f3-b26e-45bc-a7fd-0e8cb64fb9e2.png#clientId=u481cbf0d-f360-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=404&id=u273e6e83&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1190&originWidth=1520&originalType=binary&ratio=1&rotation=0&showTitle=false&size=634386&status=done&style=none&taskId=uc3ab69b8-7735-4c16-b888-ce82c8c2fd7&title=&width=516)
    

    loader用法

  • test 指定匹配规则

  • use 指定使用的loader名称 ```javascript module.exports = { module: { rules: [
    {
      test: /\.(js|jsx)$/, //匹配规则
      use: "babel-loader", //使用的loader问价
      exclude: /(node_modules)/,//排除资源
    }
    
    ] } }
<a name="Y685W"></a>
### Plugins

- **任何loader无法完成的功能plugins 可以完成**
- **作用于整个构建过程**
- **用于 bundle 文件的优化,资源管理和环境变量的注入**
<a name="M0Jj9"></a>
#### 常见的Plugins

- htmlWebpackPlugin, 动态的生成 HTML 文件
- UglifyWebpackPlugin, 压缩js文件

                       ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12492651/1630168280464-18b4c837-7f53-4cd2-abaa-05f5d8194fff.png#clientId=u481cbf0d-f360-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=394&id=ud300d043&margin=%5Bobject%20Object%5D&name=image.png&originHeight=788&originWidth=954&originalType=binary&ratio=1&rotation=0&showTitle=false&size=353461&status=done&style=none&taskId=u45623b6c-0ab3-4b0c-a958-6cd593b2828&title=&width=477)
<a name="ZHOz6"></a>
### mode[环境模式]

- production -- 生产环境
- development -- 开发环境
- 默认-- production 
<a name="wksxk"></a>
#### 内置功能函数
![image.png](https://cdn.nlark.com/yuque/0/2021/png/12492651/1630168652777-4a25c527-b050-48fb-a5cc-b6b4afbffd3c.png#clientId=u481cbf0d-f360-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=296&id=u625af921&margin=%5Bobject%20Object%5D&name=image.png&originHeight=592&originWidth=1352&originalType=binary&ratio=1&rotation=0&showTitle=false&size=520601&status=done&style=none&taskId=u400117a3-cade-4d9f-9594-bb0cfd02403&title=&width=676)
<a name="gA2XI"></a>
### 资源解析
<a name="QD31n"></a>
#### 解析ES6

- **使用babel-loader**
- **babel的配置文件是 .babelrc**
```javascript
npm i @babel/core@7.4.4 @babel/preset-env@7.4.4 babel-loader@8.0.5 -D

.babelrc 配置

{
  "presets": [
    "@babel/preset-env"
  ]
}

webpack.config.js 配置

module.exports = {
  entry: {
    index: "./src/index.js",
    search: "./src/search.js"
  },
  // devtool: 'cheap-module-source-map',
  output: {
    filename: "[name].js", // 输出文件名
    path: path.resolve(__dirname, "dist") //输出路径
  },
  mode: "development",
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/, //匹配规则
        use: "babel-loader", //使用的loader问价
        exclude: /(node_modules)/,//排除资源
      },
    ]
  },
}

解析JSX

  • 在babelrc 文件中的 presets 中添加 @babel/presets-react
    npm i react react-dom @babel/preset-react -D
    
    在src目录下引入 组件,比如 search.js ```javascript import React from ‘react’ import ReactDom from ‘react-dom’

class Search extends React.Component { render() { return

Search Text
} }

ReactDom.render( , document.getElementById(‘root’) )

在默认目录 dist 下创建 index.html 文件 引入 根节点 root 和 打包好的  search.js 文件
```javascript
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>search</title>
</head>
<body>
  <div id="root"></div>
  <script src="./search.js"></script>
</body>
</html>

解析CSS | LESS | SASS

  • css-loader 用户加载 .css 文件,并且转换成 commonjs 对象
  • style-loader 将样式 通过