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 的相关文章

  • 将 Javascript 对象的属性从 string 更改为 int

    我有一个对象数组 每个对象具有三个属性 年份 总计 人均 例子 0 Object per capita 125 8 total 1007 2 year 2009 这些属性是字符串 我想创建一个循环来遍历数组并将它们转换为 int 我尝试了以
  • 如何删除除任何特定 id 之外的元素

    假设有一个父 id 其中包含许多元素 我想删除除一个元素之外的所有元素 ex parent id children not id n remove
  • JavaScript 添加布尔值

    console log true true 2 console log typeof true true number console log isNaN true true false 为什么两个布尔类型相加会产生一个数字 我有点理解 如
  • 显示具有多个父代的 D3 树

    我目前有this http bl ocks org mbostock 4339083图已实现 我希望在描述具有多个父节点的子节点时保持结构和可折叠性 有没有办法做到这一点 我研究了力图 但我也想保留一组层次结构 这意味着 1 级的父级可以有
  • Firebase,只得到新的孩子[重复]

    这个问题在这里已经有答案了 var firebase new Firebase firebaseRef on child added function snapshot 这将接收所有元素 有没有办法在创建新的 Firebase 引用时不接收
  • 从函数返回函数的目的是什么?

    阅读一些遗留代码 发现 A prototype setSize function var v1 new Vector2 return function size var halfSize v1 copy size multiplyScala
  • 如何在没有 jQuery 的情况下删除 Javascript 中的元素

    我试图通过以下方式从 DOM 中删除 Div a 标签嵌套在其中 我想我正在寻找的是 jQuery 的纯 Javascript 版本 div remove 这是html设置 div a href Click me to remove the
  • 如何正确清理来自 AngularJS 控制器的无效输入的表单?

    我有一个 AngularJS 表单 其中包含 除其他字段之外 类型之一url 后者很重要 因为这会强制相应的输入成为有效的 URL 在某些条件下 例如 要关闭具有此类表单的模式对话框 我想以编程方式清除该表单 为此 我实现了方法reset基
  • 使用 Angular 指令禁用文本选择

    我正在学习 JavaScript 和 AngularJS 我想使用 Angular Directive 禁用文本选择 我有该函数的 JavaScript 代码 function clearSelection if document sele
  • .push() 将多个对象放入 JavaScript 数组中返回“未定义”

    当我将项目添加到beats数组然后console log用户时 我得到了数组中正确的项目数 但是当我检查 length 时 我总是得到 1 尝试调用索引总是会给我 未定义 如下所示 Tom beats 1 我想我错过了一些明显的东西 但这让
  • 在版本 4.4.6 中禁用 ckeditor 上下文菜单

    我在 Rails4 项目中使用 ckeditor 我尝试了 ckeditor gem 和 ckeditor rails gem 来提供 ckeditor 库 这里有多个帖子 人们希望删除 ckeditor 上下文菜单 以便可以显示本机浏览器
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • JavaScript推送函数中的动态变量

    我在 JavaScript 中使用推送功能 var chartData for var i 0 i lt 3 i chartData push date new Date year s mon s date s hr s min s sec
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • 改变 JavaScript 中的顶部填充

    以下是我在 css 中设置顶部填充的方法 body font size font size px margin 0 padding 100px 0 20px 0 width 100 important 如何使用最简单的 javascript
  • webpack TS2304 找不到名称“Map”、“Set”、“Promise”

    我有以下 webpack config js var path require path var webpack require webpack module exports entry ng2 auto complete path joi
  • 聆听 Angular 2 中的元素可见性

    我正在为我的网络应用程序使用 Bootstrap 和 Angular 2 v4 我想监听指令中的元素以了解可见性变化 我的元素有一个可以隐藏其子元素的父元素hidden sm up我需要在每次隐藏或显示时触发一个函数 div hidden
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J
  • react-native - 图像需要来自 JSON 的本地路径

    你好社区 我正在react native中开发一个测试应用程序 并尝试从本地存储位置获取图像 我实际在做什么 我将图像直接链接源提供给 var 并在渲染函数中调用此方法 react 0 14 8 react native 0 23 1 np
  • 在 iOS 7 Safari 中,如何区分通过边缘滑动与后退/前进按钮的 popstate 事件?

    在 iOS 7 Safari 中 现在有两种后退 前进导航方式 使用底部的传统后退 前进按钮箭头或从屏幕边缘滑动 我正在使用动画在 ajax 应用程序中的页面之间进行转换 但如果用户通过边缘滑动进行导航 我不想触发该转换 因为这本身就是一个

随机推荐

  • 如何在网上赚钱,下班兼职赚钱,这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