webpack5基本教程-1

2023-11-02

基本使用

Webpack 是一个静态资源打包工具。
它会以一个或多个文件作为打包的入口,将我们整个项目所有文件编译组合成一个或多个文件输出出去。输出的文件就是编译好的文件,就可以在浏览器段运行了。我们将 Webpack 输出的文件叫做 bundle。

功能介绍

Webpack 本身功能是有限的:

  • 开发模式:仅能编译 JS 中的 ES Module 语法
  • 生产模式:能编译 JS 中的 ES Module 语法,还能压缩 JS 代码

开始使用

案例

webpack_code # 项目根目录(所有指令必须在这个目录运行)
    └── src # 项目源码目录
        ├── js # js文件目录
        │   ├── count.js
        │   └── sum.js
        └── main.js # 项目主文件

count.js

export default function count(x, y) {
  return x - y;
}

sum.js

export default function sum(...args) {
  return args.reduce((p, c) => p + c, 0);
}

main.js

import count from "./js/count.js";
import sum from "./js/sum.js";

console.log(count(2, 1));
console.log(sum(1, 2, 3, 4));

index.html

<!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>Document</title>
    <script type="module" src="/src/main.js"></script>
  </head>
  <body>
    <h1>hello webpack</h1>
  </body>
</html>

在这里插入图片描述
运行结果如下:
在这里插入图片描述
报错原因: 用了es6的语法, 浏览器默认将它作为js解析会出现问题,需要将它作为模块导入,script标签默认type=“text/javascript”,需要改为type=“module”。
此外,webpack也可以解决这个问题。

webpack初始化

初始化webpack 生成package.json文件
npm init -y
下载依赖
npm i webpack webpack-cli -D

在这里插入图片描述

启用webpack打包

开发模式

npx webpack ./src/main.js --mode=development

生成模式

npx webpack ./src/main.js --mode=production

npx webpack: 是用来运行本地安装 Webpack 包的。
./src/main.js: 指定 Webpack 从 main.js 文件开始打包,不但会打包 main.js,还会将其依赖也一起打包进来。
–mode=xxx:指定模式(环境)

打包成功结果如下:
在这里插入图片描述
在这里插入图片描述
修改index.html
在这里插入图片描述
运行不会报错
在这里插入图片描述

基本配置

  1. entry(入口)
    指示 Webpack 从哪个文件开始打包
  2. output(输出)
    指示 Webpack 打包完的文件输出到哪里去,如何命名等
  3. loader(加载器)
    webpack 本身只能处理 js、json 等资源,其他资源需要借助 loader,Webpack 才能解析
  4. plugins(插件)
    扩展 Webpack 的功能
  5. mode(模式
    主要由两种模式:
    开发模式:development
    生产模式:production

Webpack 配置文件

在项目根目录下新建文件:webpack.config.js
在这里插入图片描述

const path = require("path");

module.exports = {
  // 入口,相对路径和绝对路径都可以
  entry: "./src/main.js",
  // 输出
  output: {
    path: path.resolve(__dirname, "./dist"),
    // 输出文件名
    filename: "main.js",
  },
  // 记载器
  module: {
    rules: [],
  },
  // 插件
  plugins: [],
  // 模式
  mode: "development",
};

运行

npx webpack

处理资源文件

webpack中文官方文档

学习使用 Webpack 如何处理 Css、Less、Sass、Scss、Stylus 样式资源

1.安装css-loader, style-loader

npm install --save-dev css-loader
npm install --save-dev style-loader

  1. 创建css文件,并在入口文件main.js引入
    在这里插入图片描述
    在这里插入图片描述
  2. 修改webpack.config.js配置文件
const path = require("path");

module.exports = {
  // 入口,相对路径和绝对路径都可以
  entry: "./src/main.js",
  // 输出
  output: {
    path: path.resolve(__dirname, "./dist"),
    // 输出文件名
    filename: "main.js",
  },
  // 记载器
  module: {
    rules: [
      // loader的配置
      {
        test: /\.css/, // 只检测.css文件
        use: [
          // 执行顺序:从右到左
          "style-loader", // 将js中的css通过创建style标签添加到html文件中生效
          "css-loader", // 将css资源编译成commonjs模块到js中
        ],
      },
    ],
  },
  // 插件
  plugins: [],
  // 模式
  mode: "development",
};

运行 npx webpack 结果如下:
在这里插入图片描述

测试less-loader

首先,你需要先安装 less 和 less-loader:

npm install less less-loader --save-dev

在这里插入图片描述
在这里插入图片描述

const path = require("path");

module.exports = {
  // 入口,相对路径和绝对路径都可以
  entry: "./src/main.js",
  // 输出
  output: {
    path: path.resolve(__dirname, "./dist"),
    // 输出文件名
    filename: "main.js",
  },
  // 记载器
  module: {
    rules: [
      // loader的配置
      {
        test: /\.css/, // 只检测.css文件
        use: [
          // 执行顺序:从右到左
          "style-loader", // 将js中的css通过创建style标签添加到html文件中生效
          "css-loader", // 将css资源编译成commonjs模块到js中
        ],
      },
      {
        test: /\.less$/,
        use: [
          "style-loader",
          "css-loader",
          "less-loader", // 将less编译成css文件
        ],
      },
    ],
  },
  // 插件
  plugins: [],
  // 模式
  mode: "development",
};

打包运行结果如下:
在这里插入图片描述
其他样式资源的配置差不多,具体查看官方文档

处理图片资源

过去在 Webpack4 时,我们处理图片资源通过 file-loader 和 url-loader 进行处理
现在 Webpack5 已经将两个 Loader 功能内置到 Webpack 里了,我们只需要简单配置即可处理图片资源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

const path = require("path");

module.exports = {
  // 入口,相对路径和绝对路径都可以
  entry: "./src/main.js",
  // 输出
  output: {
    path: path.resolve(__dirname, "./dist"),
    // 输出文件名
    filename: "main.js",
  },
  // 记载器
  module: {
    rules: [
      // loader的配置
      {
        test: /\.css/, // 只检测.css文件
        use: [
          // 执行顺序:从右到左
          "style-loader", // 将js中的css通过创建style标签添加到html文件中生效
          "css-loader", // 将css资源编译成commonjs模块到js中
        ],
      },
      {
        test: /\.less$/,
        use: [
          "style-loader",
          "css-loader",
          "less-loader", // 将less编译成css文件
        ],
      },
      {
        test: /\.(png|jpe?g|git|webp|svg)$/,
        type: "asset",
        parser: {
          dataUrlCondition: {
            // 这里配置小于20kb的图片就转为base64
            // 优点:减少请求数量
            // 缺点:体积会变大
            maxSize: 20 * 1024,
          },
        },
      },
    ],
  },
  // 插件
  plugins: [],
  // 模式
  mode: "development",
};

打包
在这里插入图片描述
其中一张图片是base64
在这里插入图片描述

修改输出资源的名称和路径

打开webpack官方文档
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

const path = require("path");

module.exports = {
  // 入口,相对路径和绝对路径都可以
  entry: "./src/main.js",
  // 输出
  output: {
    path: path.resolve(__dirname, "./dist"),
    // 入口文件打包输出文件名
    filename: "static/js/main.js",
  },
  // 记载器
  module: {
    rules: [
      // loader的配置
      {
        test: /\.css/, // 只检测.css文件
        use: [
          // 执行顺序:从右到左
          "style-loader", // 将js中的css通过创建style标签添加到html文件中生效
          "css-loader", // 将css资源编译成commonjs模块到js中
        ],
      },
      {
        test: /\.less$/,
        use: [
          "style-loader",
          "css-loader",
          "less-loader", // 将less编译成css文件
        ],
      },
      {
        test: /\.(png|jpe?g|git|webp|svg)$/,
        type: "asset",
        parser: {
          dataUrlCondition: {
            // 这里配置小于20kb的图片就转为base64
            // 优点:减少请求数量
            // 缺点:体积会变大
            maxSize: 20 * 1024,
          },
        },
        generator: {
          // 输出图片路径及名称
          // [hash:10] hash值只取前10位
          filename: "static/images/[hash:10][ext][query]",
        },
      },
    ],
  },
  // 插件
  plugins: [],
  // 模式
  mode: "development",
};

打包结果如下:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webpack5基本教程-1 的相关文章

  • 禁用内容安全策略

    当我开发网站时 我经常想看看特定功能在网站上的外观如何 所以我会使用 chrome 开发者工具并经常运行一些 javascript 脚本 我经常发现一些脚本由于内容安全策略 CSP 而无法运行的问题 我完全理解该策略是为了防止跨站点脚本攻击
  • chrome 调试器承诺在暂停时不会解析?

    也许我没有正确调试承诺 但基本上 如果您在断点处停止并运行异步代码 它实际上不会完成 直到您恢复执行为止 这是一个问题 调试器允许您快速试验多个 api 方法 但如果您恢复它 您就不能 debugger now type the follo
  • React-native:将场景绑定到导航栏

    我正在整理这个提问 回答应用程序 并遇到了这个障碍 我想从导航栏触发场景中的功能 与登录应用程序类似 我在导航栏中有一个用于提交答案的按钮 RightButton route navigator index navState if rout
  • 访问sendBeacon发送的数据

    文档表明sendBeacon通过发送其数据HTTP POST request 但在 PHP 中 POST变量似乎是一个空数组 这是我的 JavaScript 代码 navigator sendBeacon beacon log php My
  • 如何使用 JavaScript 中的值填充下拉列表?

    我在 Tridion CMS 扩展中的功能区工具栏按钮中添加了一个按钮 单击该按钮后 将显示一个弹出页面 其中包含两个下拉菜单 通过更改第一个下拉控件中的值 我应该填充第二个下拉控件的值 就我而言 我正在使用ASP drop down li
  • 消息“在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调”

    我正在使用 Puppeteer 和 Jest 来运行一些前端测试 我的测试如下 describe Profile Tab Exists and Clickable settings user gt test Assert that you
  • 使用 moment.js 检查输入日期是否为星期一

    好吧 我想检查日期是否是星期一 例如 var myDate new Date moment myDate DD MM YYYY dayIs monday 在我的国家 一周的第一天是星期一 所以 我真的想检查输入日期是否是一周的开始 我尝试使
  • 动画进度元素值

    我有一个progress元素 该元素如下所示 div class container div div div
  • Leaflet js虚构地图

    我是 Leaflet 的新手 我想了解如何创建完全交互式的虚构地图 我有一张图像想要转换为传单地图 该图像基本上像图表一样具有许多连接和点 我想首先将该图像转换为地图 能够将鼠标悬停在这些点上 突出显示它们并显示有关它们的信息 并且还可以在
  • 在闪亮的数据表中为每个单元格显示工具提示或弹出窗口?

    有没有什么方法可以为 r闪亮数据表中的每个单元格获取工具提示 有很多方法可以获取悬停行或列 但我找不到一种方法来获取行和列索引并为每个单元格显示不同的悬停工具提示 任何人都可以修改以下代码吗 library shiny library DT
  • Javascript - 将值从下拉框传递到 Google Maps API

    我正在使用 Google 地图 API 为一家出租车公司创建报价表 目前 用户在 2 个文本框中输入出发点和接载点 API 会计算两点之间的距离以及行程费用 我正在尝试添加两个具有设定位置的下拉框 以便用户可以选择这些位置之一或使用文本框输
  • Google Chrome 106 可拖动导致元素消失

    使用拖放元素时 绝对定位元素中包含的大多数其他元素都会从屏幕上消失 如果我调整窗口大小 这些元素会出现 但在开始拖动时会再次消失 我在最新版本的 Google Chrome 106 和 Beta 版本 107 0 5304 18 以及现在的
  • Typeahead.js substringMatcher 函数说明

    我只是在做一些研究Typeahead js这是一个非常酷的图书馆 感谢文档 我已经成功地获得了一个基本的示例 该文档也非常好 但是我试图弄清楚以下代码块实际上在做什么 var substringMatcher function strs r
  • JS用正则表达式替换数字

    我有元素的标识符 如下所示 form book 1 2 3 我想要的是用其他值替换该标识符中的第二个数字 我将函数 match 与以下正则表达式一起使用 var regexp d d d 但它返回我包含的数组 1 2 3 2 因此 当我尝试
  • Chartjs刻度标签位置

    尝试让 Y 轴刻度标签看起来像image https i stack imgur com XgoxX png 位于秤顶部且不旋转 缩放选项当前如下所示 scales yAxes id temp scaleLabel display true
  • Select2 下拉列表动态添加、删除和刷新项目

    这让我发疯 为什么 Select2 不能在其页面上实现清晰的方法或示例如何在 Select2 上进行简单的 CRUD 操作 我有一个 select2 从 ajax 调用获取数据
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • 如何在 javascript 正则表达式中匹配平衡分隔符?

    我原以为这个问题是不可能的 据我所知 Javascript 的正则表达式既没有递归插值 也没有漂亮的 NET 平衡组功能 但问题就在那里 如问题 12 所示正则表达式 alf nu http regex alf nu 匹配平衡对 lt an
  • 如何在打字稿文件中导入没有定义文件的js库

    随着我们的项目变得越来越大 我想从 JavaScript 切换到 TypeScript 以帮助进行代码管理 然而 我们使用许多库作为 amd 模块 我们不想将其转换为 TypeScript 我们仍然想将它们导入 TypeScript 文件
  • 单击列表时使用 bootstrap Dropdown 防止下拉菜单消失

    我正在使用使用引导下拉菜单 http twitter github com bootstrap javascript html dropdowns生成下拉菜单 我想防止点击菜单时菜单消失 我已经实现了以下代码 但它不起作用 知道如何修复它吗

随机推荐

  • 如何在网上赚钱,下班兼职赚钱,这8种方法或许有适合你的

    网上赚钱 简称 网赚 网赚 主要是指利用计算机 服务器等设备 通过互联网上的各种信息差 从互联网上赚钱的一种方式 兼职赚钱 简单点说就是 你有一份自己的工作是正职 除此之外你还可以再找一份别的工作作为副职 就是工作的同时 兼作另一份工作 叫
  • windows 查看端口占用情况

    方法一 开始 运行 cmd 进入命令提示符 输入netstat ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项 可以在任务管理器中选 查看 选择列 方法二 查看所有的端口占用情
  • 牛客网刷题笔记

    本来想在牛客网上刷完一道在线编程题后就写以下体会笔记 可是找了半天都没找到在哪里写东西 无奈 我就只好来CSDN上写了 只是想写而已 刚开始写 肯定会很不理想 但是没关系 慢慢写吧 总会有提高的 今天在牛客网刷了一道求最长字串是回文数的长度
  • android中出现javax.net.ssl.SSLPeerUnverifiedException的解决方案

    javax net ssl SSLPeerUnverifiedException No peer certificate的错误 根据有关资料解决如下 1 编写SSLSocketFactoryEx 以代替原有的SSLSocketFactory
  • activiti7-4-流程激活和挂起

    我是一个目录 1 分析 2 全部流程实例的挂起和激活 3 单个流程实例挂起 1 分析 如果公司制度发生变化 1 原本没有批完的流程怎么办 例如 30人没有处理完 怎么办 看公司制度了 有可能 按原来的走 也有可能全部打回 重新发起 全部按照
  • windows创建软连接

    可用于地址映射 方便统一配置管理 打开cmd执行 创建命令 指令 软连接地址 实际地址 mklink J D bwopt booway bwss D Java Project main insenattendance bwopt boowa
  • Java http请求工具类

    近期使用json请求很多 数据交互格式统一 方便数据转化 但是过时的工具类在后台之间请求时 发现接收到并不是标准的JSON 请求头也有问题 造成很大的困扰 所以整理了一个标准的工具类 import org apache http NameV
  • c语言中八进制输出的格式说明符,C 的输入&输出格式说明符讲解

    C的输入 输出格式说明符讲解 方便你了解C的输入与输出格式的写法 d整型输出 ld长整型输出 o以八进制数形式输出整数 x以十六进制数形式输出整数 或输出字符串的地址 u以十进制数输出unsigned型数据 无符号数 注意 d与 u有无符号
  • win服务器上的虚拟机反应慢,高手解读Win10系统打开vmware特别慢的具体方法

    大家在用win10系统的过程中 各位难免会遇到Win10系统打开vmware特别慢的问题 Win10系统打开vmware特别慢这样的情况还真的把很多电脑高手都为难住了 别着急 我们自己就可以处理掉Win10系统打开vmware特别慢的问题
  • 【毕业季·进击的技术er】 我 能

    你陪我步入蝉夏 越过城市喧嚣 歌声还在游走 你榴花般的双眸 不见你的温柔 丢失花间欢笑 岁月无法停留流云 的等候 在纸短情长里 我们迎来了毕业季 这是告别 也是迈向新起点的开始 本文我从一个大三在校生的角度来讲讲我和编程的那些事 希望技术社
  • Android 系统865虚拟化集成无源码apk示例

    一 环境 高通865虚拟化Android 10 版本 二 具体修改的文件 以集成OppoAnonymousId apk为例 1 新建OppoAnonymousId目录 将apk放到该目录 vendor qcom proprietary pr
  • g2o编译错误

    ORBSLAM2 with pointcloud map g2o with orbslam2 g2o types slam2d edge se2 pointxy bearing cpp 51 39 error cannot convert
  • uniapp uni.setClipboardData成功默认提示

    uni setClipboardData data hello uniapp success function 重点 做笔记 在success中加入uni hideToast 可以解决 uni hideToast 以下就可自定义操作了 fa
  • SpringBoot(八)拦截器Interceptor

    上篇介绍了Filter过滤器的使用 提起过滤器 就不得不再提起另外一个叫做拦截器的东西 两者的作用类似 都可以实现拦截请求的作用 但其实两者有着非常大的区别 本篇 我们就来学习下拦截器的使用 如果你是新手 且没看过我之前的一系列Spring
  • Ubuntu系统使用光盘作为apt-get源

    1 将系统光盘插入光驱 接入系统 并挂载 mount dev sr0 mnt 2 修改apt get源 将光驱挂着的目录加入源 vim etc apt sources list 在首行加入 deb file mnt trusty main
  • 【Linux服务器】 .bashrc设置永久环境变量后不起作用的问题

    在使用vi打开 bashrc文件以后设置环境变量 vim bashrc export PATH PATH home uusama mysql bin 然而发现设置了以后不起作用 这时候可以在终端界面使用export命令查看当前所有的PATH
  • 基于Aidlux的自动驾驶智能预警方案

    forewarning py为智能预警代码 运行后视频结果如下所示 基于Aidlux的自动驾驶智能预警方案 YOLOP导出onnx模型 执行命令 python3 export onxx py height 640 width 640 执行完
  • 问题 E: 括号的最大嵌套深度

    题目描述 如果字符串满足以下条件之一 则可以称之为 有效括号字符串 valid parentheses string 可以简写为 VPS 字符串是一个空字符串 或者是一个不为 或 的单字符 字符串可以写为 AB A 与 B 字符串连接 其中
  • 机器学习课后习题 --- 逻辑回归

    一 单选题 1 一监狱人脸识别准入系统用来识别待进入人员的身份 此系统一共包括识别4种不同的人员 狱警 小偷 送餐员 其他 下面哪种学习方法最适合此种应用需求 A 二分类问题 B 多分类问题 C 回归问题 D 聚类问题 2 以下关于分类问题
  • webpack5基本教程-1

    基本使用 Webpack 是一个静态资源打包工具 它会以一个或多个文件作为打包的入口 将我们整个项目所有文件编译组合成一个或多个文件输出出去 输出的文件就是编译好的文件 就可以在浏览器段运行了 我们将 Webpack 输出的文件叫做 bun