初试构建工具Webpack

news2024/12/24 2:42:20

文章目录

  • 一、Webpack概述
  • 二、安装Webpack
  • 三、Webpack打包实战
    • 1、创建index.js
    • 2、创建index.html
    • 3、运行webpack
    • 4、浏览index.html
    • 5、添加第二个脚本
      • (1)创建index2.js
      • (2)修改index.js
      • (3)重新运行 webpack
      • (4)浏览index.html
    • 6、引入CSS样式进行编译
      • (1)安装必要的 Loaders
      • (2)更新 webpack 配置
      • (3)重新运行 webpack
      • (4)浏览index.html
  • 四、Webpack实战总结

一、Webpack概述

  • Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(static module bundler)。它在构建过程中通过将项目中的各种资源,如 JavaScript 文件、图片、CSS 样式表等,打包成浏览器可以加载的静态文件,从而优化了资源加载和执行效率。以下是 Webpack 的一些核心概念和特性:

    1. 入口(Entry):Webpack 从配置的入口文件开始,构建一个依赖图,这个依赖图包含了项目运行所依赖的所有模块。

    2. 输出(Output):配置输出选项告诉 Webpack 如何输出最终的打包文件,包括文件名和输出路径。

    3. Loaders:Webpack 本身只理解 JavaScript 和 JSON 文件。Loaders 允许 Webpack 处理其他类型的文件,并将它们转换为可以在 JavaScript 中使用的模块。常见的 loader 包括 babel-loader(转换 ES6+ 代码)、css-loaderstyle-loader(处理 CSS 文件)等。

    4. 插件(Plugins):Plugins 用于在构建过程中执行更广泛的任务,如优化打包文件、管理资源、注入环境变量等。它们可以扩展 Webpack 的核心功能。

    5. 模式(Mode):Webpack 允许设置模式为 developmentproductionnone,以启用针对不同环境的优化和警告。

    6. 模块热替换(HMR - Hot Module Replacement):在开发过程中,Webpack 支持模块热替换,这意味着在开发过程中,当某个模块发生变化时,它可以被单独重新加载,而不需要刷新整个页面。

    7. 代码分割(Code Splitting):Webpack 可以自动或手动进行代码分割,将代码拆分成多个小块(chunks),这些小块可以按需加载或并行加载,以提高应用的加载速度。

    8. 缓存(Caching):Webpack 通过内容哈希和文件名来实现缓存,使得未发生变化的资源可以被浏览器缓存,避免不必要的网络请求。

    9. 开发服务器(Development Server):Webpack 提供了一个快速、零配置的本地开发服务器,支持模块热替换。

    10. 兼容性(Compatibility):Webpack 支持所有 ES5 兼容的浏览器,对于旧版浏览器,可能需要引入 polyfills。

  • Webpack 的强大之处在于它的灵活性和可扩展性,它通过各种 loader 和插件支持广泛的项目需求,从简单的小型项目到复杂的大型应用程序。通过合理配置,Webpack 可以显著提高开发效率和最终产品的用户体验。

二、安装Webpack

  • 执行命令:cnpm install -D webpack-cli
    在这里插入图片描述

三、Webpack打包实战

1、创建index.js

  • webpack里创建src,在src里创建index.js
    在这里插入图片描述

2、创建index.html

  • webpack里创建index.html
    在这里插入图片描述

3、运行webpack

  • 执行命令:webpack --mode development ./src/index.js --output-filename build.js
    在这里插入图片描述
  • 查看生成的build.js
    在这里插入图片描述

4、浏览index.html

  • 在浏览器里访问index.html
    在这里插入图片描述

5、添加第二个脚本

(1)创建index2.js

  • src里创建index2.js
    在这里插入图片描述
export let world = () => {
    document.write("Welcome to Vue World~");
}

(2)修改index.js

  • 导入和调用
    在这里插入图片描述
import { world } from './index2'

world();

(3)重新运行 webpack

  • 执行命令:webpack --mode development ./src/index.js --output-filename build.js
    在这里插入图片描述

(4)浏览index.html

  • 在浏览器里访问index.html
    在这里插入图片描述

6、引入CSS样式进行编译

  • 新建style.css
    在这里插入图片描述

  • index.js里导入样式
    在这里插入图片描述

  • 重新打包生成build.js,执行命令:webpack --mode development ./src/index.js --output-filename build.js
    在这里插入图片描述

  • 运行 webpack 时遇到了一个错误,这个错误与 CSS 文件的处理有关。错误信息表明 webpack 在解析 style.css 文件时失败了,因为它没有配置适当的 loader 来处理 CSS 文件。

  • 要解决这个问题,需要在 webpack 配置中添加一个适当的 loader 来处理 CSS 文件。常用的 loader 包括 style-loader 和 css-loader。style-loader 将 CSS 嵌入到 JavaScript 中,而 css-loader 允许您使用 @import 和 URL(…/fonts.woff)。

(1)安装必要的 Loaders

  • 首先,您需要安装 style-loadercss-loader。执行命令:cnpm install --save-dev style-loader css-loader
    在这里插入图片描述

(2)更新 webpack 配置

  • webpack.config.js 文件中,添加一个规则来使用这些 loaders 处理 CSS 文件。如果还没有这个文件,就需要创建它。
    在这里插入图片描述
const path = require('path');

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    filename: 'build.js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.css$/, // 匹配所有的 CSS 文件
        use: ['style-loader', 'css-loader'] // 使用 style-loader 和 css-loader
      }
    ]
  }
};
  • 这个配置告诉 webpack,对于所有 .css 文件,都应该使用 style-loadercss-loaderstyle-loaderCSS 嵌入到生成的 JavaScript 中,而 css-loader 处理 CSS 文件中的 @importURL

(3)重新运行 webpack

  • 执行命令:webpack
    在这里插入图片描述

(4)浏览index.html

  • 在浏览器里访问index.html,样式起作用了,页面背景变成黄色
    在这里插入图片描述

四、Webpack实战总结

  • 在本次实战中,我们通过以下步骤成功地使用Webpack打包了一个简单的项目。

    1. 初始化项目并安装Webpack CLI
    2. 创建入口文件index.js和HTML页面。
    3. 配置Webpack,设置入口和输出,实现了基础打包。
    4. 添加了模块热替换和代码分割,优化了开发体验和加载性能。
    5. 引入CSS样式,通过配置相应的loader,实现了样式的打包。
    6. 遇到并解决了CSS文件处理的问题,通过安装和配置style-loadercss-loader
  • 通过这些步骤,我们不仅了解了Webpack的核心概念,还掌握了其在实际开发中的应用。Webpack的强大功能和灵活性为前端开发提供了极大的便利。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2092006.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

乱弹篇(44)涨洪水了

今(2024年8月31日)晨,笔者一如既往地骑上小型电三轮车,去到了寄居养老已逾六年的崇州市街子古镇味江河边遛弯健身。放眼远眺,啊!涨洪水了。 照片:笔者手机自拍 看那刚刚修建好的,沿…

【C++】1326. 需要安排几位师傅加工零件

问题:1326. 需要安排几位师傅加工零件 类型:贪心 题目描述: 某工厂有 n 个零件加工的师傅,每位师傅每天能够加工出不同数量的零件。 现有 m 个零件要求一天加工完,请问该工厂最少需要派几个师傅来完成这次零件加工任…

兴业证券基于Apache DolphinScheduler的应用实践

文 / 兴业证券股份有限公司 刘洋 石良生 柳君 李致琪 本文来源于网络,如有侵权,请联系删除 任务调度平台,扮演着自动执行预设任务的重要角色,是业务开展过程中不可或缺的一环。随着业务规模的不断扩展,兴业证券每日…

物联网之硬件元器件基础知识介绍、集成电路、电阻器、电容器、电感器、二极管、三极管、晶体管、连接器、传感器、开关、电源

MENU 前言电子元件采购网址三极管持续更新中 前言 序言 硬件元器件是电子设备和系统的基本构成部分,它们在电子产品的设计、制造和功能实现中起着至关重要的作用。 电阻器(Resistor) 功能:电阻器用于限制电流流过电路的流动,并分配电压。它们…

【复旦微FM33 MCU 外设开发指南】外设篇3——SPI

前言 本系列基于复旦微FM33系列单片机的DataSheet编写,旨在提供一些开发指南。 本文章及本系列其他文章将持续更新,本系列其它文章请跳转【复旦微FM33 MCU 外设开发指南】总集篇 本文章最后更新日期:2024/08/31 文章目录 前言GPIO配置SPI配…

钓鱼特辑(四)安全较量,摆脱“麻瓜”标签

时至今日,尽管员工们对网络安全有所了解,却往往因缺乏足够的安全意识而对攻防没有直观感知。在红队看来,普通员工可能犹如“麻瓜”,防御薄弱,易于突破。 现在红队以求职者或合作方等“人畜无害”的身份在日常沟通中发动…

2024年【广东省安全员C证第四批(专职安全生产管理人员)】新版试题及广东省安全员C证第四批(专职安全生产管理人员)考试试卷

题库来源:安全生产模拟考试一点通公众号小程序 广东省安全员C证第四批(专职安全生产管理人员)新版试题是安全生产模拟考试一点通生成的,广东省安全员C证第四批(专职安全生产管理人员)证模拟考试题库是根据…

adb大全指令(持续更新)

连接adb adb connect 192.168.1.133(局域网ip)连接调试命令 adb shell打开日志工具 logcat

Shopify接口开发工具shopify-sdk踩坑

背景:   先介绍一下shopify-sdk,它使用java语言开发,是用来做shopify接口二次开发的。做过Shopify独立站的都知道,shopify店铺有管理后台去给管理员增删改查商品和订单等数据,这些数据其实都是可以通过shopify提供的…

uniapp__微信小程序如何对比时间组件框选中框之后的时间大小

1、时间组件框选择时间 2、做判断 if (new Date(selectedDate) < new Date(this.startDate)) {uni.showToast({title: 结束时间不能早于起始时间,icon: none,duration: 2000});return;}console.log(new Date(selectedDate),new Date(this.endDate)); 3、打印出来的时间对比…

C#设计模式

前言 大家熟知的GOF23种设计模式&#xff0c;源自《Design Patterns: Elements of Reusable Object-Oriented Software》一书&#xff0c;由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著&#xff0c;四人组Gang of Four简称GOF&#xff01;总结了在面 向…

【例002】利用MATLAB绘制有趣的空间曲线

题目&#xff1a;利用MATLAB绘制以下函数的空间曲线 空间曲线1&#xff1a; { x cos ⁡ ( 3 t ) y sin ⁡ ( 3 t ) for − m 1000 ≤ t ≤ m 1000 z t \begin{cases} x \cos(3t) \\ y \sin(3t) & \text{for } -\frac{m}{1000} \leq t \leq \frac{m}{1000} \\ z t …

心理健康问答系统-AIGC大模型-小程序制作

制作一个心理健康问答系统的小程序&#xff0c;涉及到多个环节和技术领域。这里将从需求分析、技术选型、开发流程、API调用等方面进行详细说明。 一、需求分析与规划 在开始任何项目之前&#xff0c;首先需要明确的是你的小程序想要解决什么样的问题&#xff0c;提供哪些功…

Spring——控制反转(IOC)与依赖注入(DI)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

【C++题解】1722 - 输出两位的巧数

问题&#xff1a;1722 - 输出两位的巧数 类型&#xff1a;简单循环 题目描述&#xff1a; 巧数指的是这样一种特殊的数&#xff0c;该数的各个位数字之和加上各个位数字之积等于本身的自然数。 比如整数 19 &#xff0c;就是一个巧数&#xff0c;因为(19)(19)10919。 请编程输…

DataWhale AI夏令营 2024大运河杯-数据开发应用创新赛-task3

DataWhale AI夏令营 2024大运河杯-数据开发应用创新赛 数据增强数据收集打标签 多的不说少的不唠&#xff0c;之前说过初赛基本就是比谁的数据好了&#xff0c;因为原始数据的质量太低了想跑到0.25都很难所以需要使用一些数据增强策略以及收集一些新的数据集。 数据增强 计算…

LVGL 控件之按钮(lv_button)

目录 一、按钮1、概述2、样式2.1 设置背景2.1.1 颜色2.1.2 透明度2.1.3 渐变色2.1.4 渐变色起始位置设置 2.2 修改边界2.2.1 宽度2.2.2 颜色2.2.3 透明度2.2.4 指定边 2.3 修改边框2.4 修改阴影2.4.1 宽度2.4.2 透明度2.4.3 偏移坐标2.4.4 颜色2.4.5 延伸 2.5 设置圆角弧度2.6 …

C++STL~~list

文章目录 一、list的概念二、list的使用三、list的练习四、与vector的对比五、总结 一、list的概念 list 是一种容器&#xff0c;实现了双向链表结构 它具有以下特点&#xff1a; 动态大小&#xff0c;可按需增减元素数量。高效的插入和删除操作&#xff0c;在任意位置插入和…

(四)进入MySQL 【事务】

一、MySQL事务的概念 MySQL 事务主要用于处理操作量大&#xff0c;复杂度高的数据。比如说&#xff0c;在人员管理系统中&#xff0c; 要删除一个人员&#xff0c;即需要删除人员的基本资料&#xff0c;又需要删除和该人员相关的信息&#xff0c;如信箱&#xff0c; 文章等等。…

unity中的InstanceID详解 即Object.GetInstanceID

GetInstanceID 是 Unity 中 Object 类的一个方法,它用于获取一个对象的唯一实例标识符。每个 Unity 对象(如游戏对象、组件、资源等)都有一个唯一的实例 ID,这个 ID 在对象的生命周期内是唯一的。 对于它的生命周期是不确定的。网上说在切换场景或者编辑器关闭重启后会变。…