2024 年最新前端工程师使用 Webpack 模块打包工具详细教程(更新中)

概述 Webpack 模块打包工具

Webpack 是一个现代的静态模块打包工具,用于将前端应用程序的各种资源(例如如:JavaScript、CSS、图片等)视为模块,并将它们打包成可以在浏览器中运行的静态文件。它的主要功能包括模块打包、资源优化、代码分割、加载器转换等。

Webpack 官方网址:https://webpack.js.org/

在这里插入图片描述

Webpack 在内部会构建一个依赖图(dependency graph),这个依赖图映射到项目所需的每个模块,并生成一个或多个 bundle。在打包过程中,Webpack 可以进行各种优化,如代码压缩、文件合并、按需加载等,以提高应用程序的性能和加载速度。

Webpack 的配置包括入口(entry)、出口(output)、加载器(loader)和插件(plugins)。入口决定了 Webpack 从哪个模块开始生成依赖关系图,而出口则指定了生成的静态文件的输出目录。加载器用于转换不同类型的模块,以便能够被打包和引用,而插件则用于执行更广泛的任务,如代码分割、资源优化、生成 HTML 文件等。

为了进一步提高 Webpack 的打包速度,可以使用一些优化技巧,如使用线程加载器(例如:thread-loader)来启用多线程打包,或者使用缓存加载器来缓存已经编译过的文件,从而避免重复编译。总的来说,Webpack是一个强大而灵活的工具,能够帮助开发者更高效地构建和优化前端应用程序。

下载安装 Webpack 环境

安装 Node.js 环境

访问 Node.js 官网,下载并安装适合你操作系统的Node.js版本。安装完成后,你可以在命令行中运行 node -v 来检查 Node.js 是否安装成功,以及安装的版本。

初始化项目

在你的项目文件夹中,打开命令行窗口,并输入 npm init 来初始化一个新的 npm 项目。这会创建一个 package.json 文件,这个文件会保存你的项目依赖和其他配置信息。

全局安装 webpack webpack-cli

NPM 进行全局安装 webpack webpack-cli

npm install webpack webpack-cli -g

全局安装意味着你可以在任何地方使用 webpack 和 webpack-cli 命令。然而对于大多数项目,推荐进行局部安装,以避免不同项目之间的版本冲突。

局部安装 webpack webpack-cli

如果你选择局部安装在项目的根目录下运行如下:

npm install webpack webpack-cli --save-dev

这样 webpack 和 webpack-cli 就会被添加到你的 package.json 文件的 devDependencies 部分,成为项目的开发依赖。

使用 Webpack 流程图

配置 webpack.config.js 入口 entry 出口 output

const path = require("path")

module.exports = {
    entry: "./src/main.js",
    output: { 
        path: path.join(__dirname, "dist"),
        filename: "bundle.js"
    }
}

配置 package.json script 脚本

{
	"description": "",
	"scripts": {
		"build": "webpack"
	},
	"devDependencies": {
		"webpack": "^5.91.0",
		"webpack-cli": "^5.1.4"
	}
}

打包流程图
在这里插入图片描述

注意:所有要被打包的资源都要跟入口产生直接 / 间接的引用关系。

使用 Webpack 打包静态网页

Webpack 本身并不直接处理 HTML 文件,但是你可以使用 html-webpack-plugin 插件来简化静态 HTML 文件的打包过程。使用 html-webpack-plugin 来简化静态 index.html 文件的打包过程了。

如何使用 html-webpack-plugin 来打包静态 index.html 的步骤:

安装必要的插件和依赖

在你的项目中,首先确保已经安装了 webpack 和 webpack-cli。安装 html-webpack-plugin

npm install --save-dev html-webpack-plugin

配置 webpack.config.js

在你的 webpack.config.js 文件中,引入 html-webpack-plugin 并添加到 plugins 数组中:

const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html',
      filename: 'index.html',
    })
  ],
};

编写 index.html

在你的源代码目录(在这个例子中是 src)中,创建一个 index.html 文件。这个文件将被 html-webpack-plugin 用作模板,并且插件会自动将你的打包后的 JavaScript 文件(例如 main.js)注入到这个 HTML 文件中。

运行 webpack

当运行 webpack 构建过程时,html-webpack-plugin 会自动处理你的 index.html 文件,并将它输出到你的构建目录(默认为 dist)中。

注意事项

确保你的 HTML 文件中引用了正确的脚本和样式文件路径。在开发环境中,你可能直接引用 src 目录下的文件,但在生产环境中,这些文件会被 webpack 打包并输出到不同的位置。你可以使用 webpack 的 publicPath 配置项来确保引用路径正确。

如果你的项目中有多个 HTML 文件需要打包,你可以为每个文件创建一个 HtmlWebpackPlugin 实例,并在 plugins 数组中添加它们。

启动本地服务 webpack-dev-server

启动本地服务,可实时更新修改的代码,打包变化代码到内存中,然后直接提供端口和网页访问。也就是说以后改了 src 目录下的资源代码,就会直接更新到内存打包,然后反馈到浏览器上了。

下载 webpack-dev-server

npm install webpack-dev-server -D

配置 package.json 自定义脚本

scripts: {
	"build": "webpack",
	"serve": "webpack serve"
}

运行脚本启动 webpack 开发服务器

npm run serve

使用 Webpack 打包 css 文件

const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
    module: { 
        rules: [
	        {
				test: /\.css$/,
				use: [ "style-loader", "css-loader"]
	        }
        ]
    }
}

匹配所有的 css 文件,use数组里从右向左运行,先用 css-loader 让 webpack 能够识别 css 文件的内容并打包,再用 style-loader 将样式,把 css 插入到 dom 中。

总结:webpack 默认只认识 js 文件和 json 文件。万物皆模块,引到入口才会被 webpack 打包,css打包进 js 中,然后被嵌入在 style 标签插入 dom 上。

style-loader 文档:https://webpack.docschina.org/loaders/style-loader/
css-loader 文档:https://webpack.docschina.org/loaders/css-loader/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯-【二分】分巧克力,跳石头

代码及解析: #include<bits/stdc.h> using namespace std; int n,k; const int N100010; int h[N],w[N]; bool check(int d){int num0;for(int i0;i<n;i) num (h[i]/d)*(w[i]/d);if(num>k) return true; //够分else return false; //不够分 } in…

Java代码基础算法练习-统计学生成绩-2024.04.11

任务描述&#xff1a; 编写程序&#xff0c;输入n个(0<n<50)学生的成绩(输入-1结束)&#xff0c;要求统计并输出优秀(大任务描述:于85)、及格(60~84)和不及格(小于60)的学生人数。(成绩取值范围0~100) 任务要求&#xff1a; 代码示例&#xff1a; /*** 这个程序用于统计…

《看漫画学C++》第12章 可大可小的“容器”——向量

在C编程的世界里&#xff0c;数组是一种基础且广泛使用的数据结构。然而&#xff0c;传统的静态数组在大小固定、管理不便等方面的局限性&#xff0c;常常让开发者感到束手束脚。幸运的是&#xff0c;C标准库中的vector类为我们提供了一种更加灵活、高效的动态数组解决方案。 …

Qt for MCUs 2.7正式发布

本文翻译自&#xff1a;Qt for MCUs 2.7 released 原文作者&#xff1a;Qt Group高级产品经理Yoann Lopes 翻译&#xff1a;Macsen Wang Qt for MCUs的新版本已发布&#xff0c;为Qt Quick Ultralite引擎带来了新功能&#xff0c;增加了更多MCU平台的支持&#xff0c;并且我们…

容错组合导航

在初始值正确的情况下&#xff0c;惯性导航短期精度较高&#xff0c;但是其误差随着时间是累计的。如果要提高惯性导航的长期精度&#xff0c;就必须提高惯性器件的精度和初始读准精度&#xff0c;这必将大大提高成本。 如果将惯性导航与其他导航系统适当地组合起来&#xff0c…

为什么在深度神经网络中,网络权重的初始化很重要?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 在深度神经网络中&#xff0c;网络权重的初始化非常关键&#xff0c;因为它对网络的训练速度、收敛能力以及最终的性能都有重大影响。具体来说&#xff0c;权重初始化的重要性主要体现在以下几个方面&a…

【从浅学到熟知Linux】冯诺依曼体系结构及进程概念详谈!

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 冯诺依曼体系结构操作系统如何理解管理操作系统概念设计操作系统目的系统调用和库函数概念 进程基本概念描…

探索设计模式的魅力:MVVM模式在AI大模型领域的创新应用-打破传统,迎接智能未来

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 MVVM模式在AI大模型领域的创新应用-打破传统迎接智能未来 &#x1f680; “在人工智能的领域里&a…

炒股自动化:交易接口API才是重点,券商官方散户可用的接口

上一篇我们用get_full_tick取到了数据&#xff0c;也讲了变量和字典的基本概念&#xff0c;这次我们向交易所发送订单试试。前面文章的链接放在文末了&#xff0c;需要的可以看一下 这些内容是给新手看的&#xff0c;找接口的大佬们直接拉到文末即可 取市场数据的方法很多&am…

Python中Python-docx 包的run介绍

先对run做一个简单地介绍。每个paragraph对象都包含一个run对象的列表。举例&#xff1a; 这是一个简短的段落。 from docx import Document doc Document("1.docx") #上面这段话保存在1.docx中 print("这一段的run个数是&#xff1a;",len(doc.paragr…

国家统计局行政区划获取及入库ES实践

我们先看下最终效果&#xff1a; 1. ES索引新建 PUT administrative_division {"mappings": {"properties": {"province": {"type": "keyword"},"province_code": {"type": "keyword"},&q…

HarmonyOS 开发-阻塞事件冒泡

介绍 本示例主要介绍在点击事件中&#xff0c;子组件enabled属性设置为false的时候&#xff0c;如何解决点击子组件模块区域会触发父组件的点击事件问题&#xff1b;以及触摸事件中当子组件触发触摸事件的时候&#xff0c;父组件如果设置触摸事件的话&#xff0c;如何解决父组…

最近一些前端面试问题整理

最近一些前端面试问题整理 4月8号1. TS 中的 类型别名 和接口的区别是什么&#xff1f;2. 什么是深拷贝和浅拷贝&#xff1f;深浅拷贝的方法有哪些&#xff1f;浅拷贝&#xff08;Shallow Copy&#xff09;深拷贝&#xff08;Deep Copy&#xff09;区别总结 3. 使用 JSON.strin…

wsl 2在windows11上的设置

详细参考&#xff1a;Manual installation steps for older versions of WSL | Microsoft Learn 1.系统组件要打开 分别是&#xff1a;Hyper-V、虚拟机平台、适用于Windows的Linux子系统 2.以管理员方式运行命令行&#xff0c;逐步执行下面的命令 update to WSL 2, you must…

【MATLAB源码-第185期】基于matlab的16QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术&#xff0c;作为一种高效的调制方案&#xff0c;能够通过在相同的带宽条件下传输更多的数据位来满足这一需求…

数组去重的方法

1.方法一&#xff1a;利用对象属性名的唯一性 去重 数字或者数组去重&#xff0c;效率高 function unique(arr){var result {}; //利用对象属性名的唯一性来保证不重复for(var i0;i<arr.length;i){console.log("result[arr[i]]",result[arr[i]]);if(!result[arr…

4月9号总结

java学习 一.steam流 1.介绍 Stream 是 Java 8 中引入的一种处理集合数据的新抽象。它提供了一种高效且便利的方式来处理集合中的元素&#xff0c;支持函数式编程的特性&#xff0c;使得集合操作变得更加简洁和灵活。 2.创建 List和Set可以直接调用接口的steam方法转换为流 …

FreeRTOS学习 -- 移植

一、添加FreeRTOS源码 在基础工程中新建一个名为FreeRTOS的文件夹&#xff0c;创建FreeRTOS文件夹以后将FreeRTOS的源码添加到这个文件夹中。 portable 文件夹&#xff0c;只需要保留keil、MemMang 和 RVDS这三个文件夹&#xff0c;其他的都可以删除掉。 移植FreeRTOSConfig…

2024 年“认证杯”数学中国数学建模网络挑战赛

题目 A题 保暖纤维的保暖能力 冬装最重要的作用是保暖&#xff0c;也就是阻挡温暖的人体与寒冷环境之间的热 量传递。人们在不同款式的棉衣中会填充保暖材料&#xff0c;从古已有之的棉花、羽绒 到近年来各种各样的人造纤维。不同的保暖纤维具有不同的保暖性能&#xff0c;比如…

为什么要“挺”鸿蒙?

鸿蒙到底是什么&#xff1f; 随着5G、物联网等技术的快速发展&#xff0c;智能终端设备的应用场景也越来越广泛。为了满足不同设备间的互联互通需求&#xff0c;华为在2019年推出了自主研发的操作系统——鸿蒙OS。值得关注的是&#xff0c;这也是首款国产操作系统。 要了解鸿…