1. 核心概念之entry

概念介绍

entry:用来指定webpack的打包入口。
为什么叫entry呢,因为webpck中的所有资源都会被当成模块,只有通过入口文件,到它的依赖的其他资源,最终形成依赖树才能加载所有的依赖资源。

基本用法

单入口:

  1. module.exports = {
  2. entry: "./src/index"
  3. }

多入口:

  1. module.exports = {
  2. entry: {
  3. index: "./src/index",
  4. login: "./src/login"
  5. }
  6. }

2. 核心概念之output

概念介绍

output:用来告诉webpack如何将编译后的文件输出到磁盘

基本用法

单入口配置

  1. const path = require('path');
  2. module.exports = {
  3. entry: "./src/index",
  4. output: {
  5. path:path.join(__dirname, "dist"),
  6. filename: "index.js"
  7. }
  8. }

多入口配置:通过占位符来确保文件名称的唯一

  1. const path = require('path');
  2. module.exports = {
  3. entry: {
  4. index: "./src/index",
  5. login: "./src/search"
  6. },
  7. output: {
  8. path:path.join(__dirname, "dist"),
  9. filename: "[name].js"
  10. }
  11. }

3. 核心概念之loader

概念介绍

webpack默认只支持JS和JSON,通过loaders可以支持其他类型,并转化为有效的模块。
loader本身是一个函数,接受源文件作为参数,返回转化后的结果。

常见的loaders

  • babel-loader:转换ES6、ES7等语法特性
  • css-loader:支持.css文件的加载和解析
  • less-loader:将less文件转化为css
  • ts-loader:将TS转化为JS
  • file-loader:进行图片字体等的打包
  • raw-loader:将文件以字符串的形式导入
  • thread-loader:多进程打包CSS和JS

    基本用法

    它的用法是,在module下面有一个rules数组,数组的每个对象包含了test用于指定文件名格式,use用于指定用什么loader去加载此类文件。
  1. module.exports = {
  2. module: {
  3. rules: [{
  4. test: /\.txt$/, use: 'raw-loader'
  5. }]
  6. }
  7. }

4. 核心概念之plugins

概念介绍

通常用于loaders输出后的文件内容的优化,包含资源管理、环境变量的注入。
可以理解为用loaders无法做的事情,都交给plugins来做。

常用的plugins

  • CommonChunsPlugin,把被多个chunks都依赖的模块代码提取成公共的js
  • CleanWebpackPlugin,清理构建目录
  • ExtractTextWebpackPlugin,将CSS从bundle文件里提取成独立的CSS文件
  • CopyWebpackPlugin,将文件或文件夹拷贝到构建的输出目录
  • HtmlWebpackPlugin,创建html文件去加载输出的bundle
  • UglifyjsWebpackPlugin,压缩js
  • ZipWebpackPlugin,将打包出的资源生成一个zip包

    基础用法

    1. module.exports = {
    2. plugins:[
    3. new HTMLWebPlugin({template: "./src/index.html"})
    4. ]
    5. }

    5. 核心概念之mode

    概念介绍

    用于指定打包时候的构建环境,分为:production、development、none。

mode的内置函数功能

官方文档中的表格介绍了每个mode下都做了什么具体单事情,其中none意味着任何优化都没有做。