webpack基本用法

webpack 的 使用

前言

  • webpack 作为前端主要的模块化打包工具,我们是必然需要去掌握,理解其用法的。接下来我们就来一起学习 webpack 吧 ☺️

创建项目 webpack-project 文件夹

  • npm 或 yarn 包下载器 任选一个 我们这里就是用 yarn
  1. 我们在项目根目录 通过 yarn init -y 生成默认 package.json 包管理文件
yarn init -y
  1. 安装 webpack webpack-cli
yarn add webpack webpack-cli -D
  1. webpack 默认有打包入口和出口
打包入口 src/index.js
输出出口 dist/main.js
  1. 执行 yarn webpack 就可以生成 dist 打包目录了
webpack 或
yarn webpack
  1. webpack 执行命令 mode 默认为 production webpack 默认会帮你进行代码压缩

自定义配置 创建 webpack.congfig.js ( wepacke 会读取 webpack.config.js 配置 )

webpack 五个核心概念

  1. entry
  • 指定入口文件
  1. output
  • 输出文件,位置,文件名
  1. loader 翻译官
  • 处理非 js 文件,webpack 自身只能打包 js 或 json
    如:css,img,font,html 等一系列文件 将其打包成 js 模块
  1. plugins 压缩,版本
  • 扩展 webpack 的功能
  1. mode
  • 可以设置 development,production,none 这个详情见中文官网
  1. optimization 最佳化
  • 可以设置代码切割,树摇等一些列操作, 生产模式下自动开启
entry
// entry 可以是string,array , object 类型  这里我设为了object 既可以多入口也可单入口 😝
// 入口文件路径 如果是相对路径不可以省略 ./
entry: {
   
    bundle: "./src/index.js" },

  • 扩展

  // String 单入口 会打包生成一个默认名 main.js 的 chunk包
  entry: path.join(__dirname, "/src/index.js"),

  //Array  多入口还是会打包生成一个默认名 main.js 的 chunk包 , 主要是开发环境 html中的hmr

  entry:[path.join(__dirname, "/src/index.js"),path.join(__dirname, "/src/test.js")]
  //Object 生成多个chunk
  entry: {
   
   
    index: path.join(__dirname, "/src/index.js"),
    test: path.join(__dirname, "/src/test.js"),
  },

  // 特殊用法 就是object和array 相结合
  在dll中  vue vue-router vuex 可以打包成一个chunk模块
  entry:{
   
   
    index:[path.join(__dirname, "/src/index.js"),path.join(__dirname, "/src/add.js")]
    test: path.join(__dirname, "/src/test.js"),
  }
output
 //出口文件配置
output: {
   
   
  //输出的路径,当前项目更路径生成dist目录
  path: path.resolve(__dirname, "dist"),
  //输出的文件名称 dist/js/bundle.js
  filename: "js/[name].js",
  // 模块资源引用路径  通常 dist 会放在服务器端 作为文件更路径 👌
  publicPath: "/",
},
  • 扩展
  output: {
   
   
    // 文件位置/文件名
    filename: "js/[name].[contenthash:6].build.js",
    // 所有资源的公共目录位置
    path: path.join(__dirname, "dist"),
    //所有资源的公共路径
    publicPath: "/",
    // 拆分的chunk命名规则
    chunkFilename:[name]_chunk.js,
    //chunk暴露的变量
    library: [name],
    //变量名添加到那个对象上 window commonjs global umd
    libraryTarget: "umd",
  },

loader
module:{
   
   
  rules:[
    // 添加各种静态资源模块文件
    ... loaders
  ]
}

css 文件解析加载
  1. css-loader 将 css 文件转成 js 模块
yarn add css-loader -D
  1. style-loader 将 js 模块中的 css 标识 创建 style 标签插入
yarn add style-loader -D

  • 基本用法
{
   
   
  // 要匹配的文件名
  test: /\.css$/,
  use: [
    //从下往上执行
    // 创建style标签会将 下面的js文件插入进去 ,放在head标签中
    "style-loader",
    //将css 文件变成commonJs模块加载js中  样式字符串
    "css-loader",
  ],
},

字体,图片 文件解析加载
  1. file-loader 就是将文件复制到了指定目录
yarn add file-loader -D

  • 基本用法
{
   
   
  test: /\.(otf|eot|svg|ttf|woff|woff2)(\?\S*)?$/,
  loader: "file-loader",
  options: {
   
   
    // 输出目录
    outputPath: "fonts",
  },
},

处理图片 转成 base64 减小服务器压力,增加包的体积, 一般我们处理 4k 以下的小图片 超过 4k 会类似 file-loader 一样导出文件
yarn add url-loader -D
  • 基本用法
{
   
   
  test: /\.(png|jpg|gif)$/,
  use: [
    {
   
   
      loader: "url-loader",
      options: {
   
   
        limit: 4 * 1024,
        // 图片的路径 hash8位,后缀名
        name: "[name].[hash:8].[ext]",
        //打包输出的地址
        outputPath: "img",
        //使用commonJs 解析, 新版无需添加 😬
        esModule: false,
      },
    },
  ],
},

处理 html 文件 解析 html 文件中的 img src a href 等( 新版本有点兼容问题,我这用 1.3.2 版本的 😺)
yarn add html-loader@1.3.2 -D

  • 基本用法
{
   
   
  test: /\.(html)$/,
  use: [
      {
   
   
        loader: "html-loader",
        options: {
   
   
          esModule: false,
          attributes: {
   
   
        list: [
            {
   
   
              tag: "img",
              attribute: "src",
              type: "src",
            },
            {
   
   
              tag: "img",
              attribute: "data-src",
              type: "src",
            },
            {
   
   
              tag: "img",
              attribute: "data-srcset",
              type: "srcset",
            },
            {
   
   
              tag: "a",
              attribute: "href",
              type: "src",
            },
          ],
        },
      },
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值