image.png

entry

  • entry 用来指定webpack的打包入口
  • 理解依赖图的含义
  • 依赖图的入口是entry
  • 对于非代码比如图片、字体依赖也会不断加入到依赖图中

    entry的用法

  • 单入口:entry是一个字符串

    1. module.export = {
    2. entry: './path/to/my/entry/file.js'
    3. }
  • 多入口:entry是一个对象

    1. module.export = {
    2. entry: {
    3. app: './src/app.js',
    4. adminApp: './src/adminApp.js'
    5. }
    6. }

    Output

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

    Output的用法

  • 单入口配置

    1. module.export = {
    2. entry: {
    3. app: './src/app.js',
    4. search: './src/search.js'
    5. },
    6. output: {
    7. filename: '[name].js', // 通过占位符确保⽂件名称的唯⼀
    8. path: __dirname + '/dist'
    9. }
    10. }
  • 多入口配置

    1. module.export = {
    2. entry: {
    3. app: './src/app.js',
    4. search: './src/search.js'
    5. },
    6. output: {
    7. filename: '[name].js', // 通过占位符确保⽂件名称的唯⼀
    8. path: __dirname + '/dist'
    9. }
    10. }

    Loaders

    webpack 开箱即用只支持 JS 和 JSON 两种文件类型,通过 Loaders 去支持其它文件类型并且把它们转化成有效的模块,并且可以添加到依赖图中。
    本身是一个函数,接受源文件作为参数,返回转换的结果。

    常见的Loaders

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

Loader的用法

  1. const path = require('path');
  2. module.exports = {
  3. output: {
  4. filename: 'bundle.js'
  5. },
  6. module: {
  7. rules: [
  8. { test: /\.txt$/, use: 'raw-loader' } // test 指定匹配规则, use 指定使⽤的 loader 名称
  9. ]
  10. }
  11. };

Plugins

插件用于bundle文件的优化,资源管理和环境变量注入
作用于整个构建过程

常见的Plugins

名称 描述
CommonsChunkPlugin 将chunks相同的模块代码提取成公共js
CleanWebpackPlugin 清理构建的目录
ExtractWebpackPlugin 将CSS从bundle文件提取成一个独立的css文件
CopyWebpackPlugin 文件或文件夹拷贝到构建的输出目录
HtmlWebpackPlugin 创建html文件去承载输出的bundle
UglifyWebpackPlugin 压缩JS
ZipWebpackPlugin 将打包出的资源生产一个zip包

Plugins的用法

  1. const path = require('path');
  2. module.exports = {
  3. output: {
  4. filename: 'bundle.js'
  5. },
  6. plugins: [
  7. new HtmlWebpackPlugin({template: './src/index.html'}) // 放到 plugins 数组⾥
  8. ]
  9. };

Mode

Mode ⽤来指定当前的构建环境是:production、development 还是 none
设置 mode 可以使⽤ webpack 内置的函数,默认值为 production

选项 描述
development 会将 DefinePlugin 中 process.env.NODE_ENV 的值设置为 development. 为模块和 chunk 启用有效的名。
production 会将 DefinePlugin 中 process.env.NODE_ENV 的值设置为 production。
为模块和 chunk 启用确定性的混淆名称,FlagDependencyUsagePlugin,FlagIncludedChunksPlugin,ModuleConcatenationPlugin,NoEmitOnErrorsPlugin 和 TerserPlugin 。
none 不使用任何默认优化选项