Webpack 从入门到精通

news2024/11/17 19:25:42

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

一、Webpack 简介

二、Webpack 的核心概念

三、Webpack 的安装与配置

安装 Node.js

安装 Webpack

初始化项目

安装项目依赖的 Webpack

创建项目文件

配置 Webpack

修改 package.json

构建项目

四、加载器(Loaders)的使用

使用 CSS 加载器

使用图片加载器

五、插件(Plugins)的使用

使用 HtmlWebpackPlugin

使用 CleanWebpackPlugin

六、开发服务器(DevServer)

安装 webpack-dev-server

配置 devServer

修改 package.json

启动开发服务器


一、Webpack 简介

Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。它会根据模块的依赖关系,递归地构建一个依赖图(dependency graph),然后将这些模块打包成一个或多个 bundle。

Webpack 的主要目标是将 JavaScript 文件打包在一起用于在浏览器中使用,但它也能够通过 loader 的机制来打包其他资源,如 CSS、图片和 HTML。

二、Webpack 的核心概念

  1. 入口(Entry):Webpack 应该使用哪个模块作为构建其内部依赖图的开始。换句话说,入口起点指示 webpack 应该使用哪个模块作为构建其内部依赖图的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。

  2. 输出(Output):告诉 Webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,默认值为 ./dist。基本上,整个应用程序结构,都会被编译到你指定的输出路径的文件夹中。你可以通过在配置中指定一个 output 字段,来配置这些处理过程。

  3. 加载器(Loaders):让 Webpack 能够去处理那些非 JavaScript 文件(Webpack 自身只理解 JavaScript)。加载器可以将所有类型的文件转换为 Webpack 能够处理的有效模块,然后你就可以利用 Webpack 的打包能力,对它们进行处理。

  4. 插件(Plugins):可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境变量。插件接口功能极其强大,可以用来处理各种各样的任务。

  5. 模式(Mode):通过设置 mode 参数为 'development' 或 'production',你可以启用相应模式下的 Webpack 内置的优化。

三、Webpack 的安装与配置

安装 Node.js

Webpack 是运行在 Node.js 之上的,因此首先需要安装 Node.js。你可以从 Node.js 官网 下载并安装。

安装 Webpack

打开终端或命令提示符,运行以下命令全局安装 Webpack 和 Webpack CLI:

npm install -g webpack webpack-cli

初始化项目

创建一个新的目录作为项目文件夹,并初始化 npm:

mkdir my-webpack-project  
cd my-webpack-project  
npm init -y

安装项目依赖的 Webpack

在项目文件夹中,安装 Webpack 作为项目的开发依赖:

npm install --save-dev webpack webpack-cli

创建项目文件

在项目文件夹中,创建以下文件:

  • src/index.js:入口文件。
  • dist/index.html:用于测试打包后的 JavaScript 文件。

配置 Webpack

在项目根目录下创建一个名为 webpack.config.js 的文件,这是 Webpack 的配置文件。以下是一个基本的配置示例:

const path = require('path');  
  
module.exports = {  
  mode: 'development', // 开发模式  
  entry: './src/index.js', // 入口文件  
  output: { // 输出配置  
    filename: 'bundle.js', // 输出文件名  
    path: path.resolve(__dirname, 'dist'), // 输出路径  
  },  
};

修改 package.json

在 package.json 文件的 scripts 部分添加一个构建脚本:

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

构建项目

在终端或命令提示符中运行以下命令来构建项目:

npm run build

构建成功后,dist 目录下会生成 bundle.js 文件。你可以在 dist/index.html 文件中引入这个脚本来测试。

四、加载器(Loaders)的使用

Webpack 通过使用加载器(loaders)来提供一种机制来预处理文件。这允许你打包除 JavaScript 以外的任何静态资源。

使用 CSS 加载器

为了能够让 Webpack 处理 CSS 文件,你需要使用 css-loader 和 style-loadercss-loader 会遍历 CSS 文件,然后找到 url() 表达式然后处理他们,style-loader 会把原来的 CSS 代码插入页面中的一个 <style> 标签中。

安装 CSS 加载器:

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

配置 Webpack 以使用 CSS 加载器:

const path = require('path');  
  
module.exports = {  
  // ...  
  module: {  
    rules: [  
      {  
        test: /\.css$/, // 正则表达式,匹配 CSS 文件  
        use: [  
          'style-loader', // 将 JS 字符串生成为 style 节点  
          'css-loader', // 将 CSS 转化成 CommonJS 模块  
        ],  
      },  
    ],  
  },  
};

现在你可以在 JavaScript 文件中导入 CSS 文件了,例如:

import './style.css';

使用图片加载器

为了能够在 JavaScript 模块中导入图片,你需要使用 file-loader

安装图片加载器:

npm install --save-dev file-loader

配置 Webpack 以使用图片加载器:

module.exports = {  
  // ...  
  module: {  
    rules: [  
      // ...  
      {  
        test: /\.(png|svg|jpg|jpeg|gif)$/i, // 正则表达式,匹配图片文件  
        use: [  
          'file-loader', // 将文件发送到输出文件夹,并返回(相对)URL  
        ],  
      },  
    ],  
  },  
};

现在你可以在 JavaScript 文件中导入图片文件了,例如:

import imgSrc from './image.png';

五、插件(Plugins)的使用

Webpack 拥有丰富的插件系统,大多数内部功能都是基于这个插件系统构建的。这使得 Webpack 可以非常灵活地进行扩展。

使用 HtmlWebpackPlugin

HtmlWebpackPlugin 是一个非常有用的插件,它可以为你生成一个 HTML5 文件,其中包括使用 script 标签的 body 中的所有 webpack 包。这对于在文件名中包含每次会随着编译而发生变化哈希的 webpack bundle 尤其有用。

安装 HtmlWebpackPlugin:

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

配置 Webpack 以使用 HtmlWebpackPlugin:

const HtmlWebpackPlugin = require('html-webpack-plugin');  
const path = require('path');  
  
module.exports = {  
  // ...  
  plugins: [  
    new HtmlWebpackPlugin({  
      title: 'Webpack App', // 生成 HTML 文件的标题  
      template: './src/template.html', // 自定义模板文件路径  
    }),  
  ],  
};

现在当你运行 Webpack 构建时,它会生成一个包含你的 bundle 的 index.html 文件,并将其输出到 dist 目录下。

使用 CleanWebpackPlugin

CleanWebpackPlugin 用于在每次构建前清理(删除)dist 文件夹。

安装 CleanWebpackPlugin:

npm install --save-dev clean-webpack-plugin

配置 Webpack 以使用 CleanWebpackPlugin:

const { CleanWebpackPlugin } = require('clean-webpack-plugin');  
  
module.exports = {  
  // ...  
  plugins: [  
    // ...  
    new CleanWebpackPlugin(), // 添加 CleanWebpackPlugin  
  ],  
};

六、开发服务器(DevServer)

Webpack 提供了一个可选的本地开发服务器,这个本地服务器基于 node.js 构建,可以实现你想要的让浏览器自动刷新显示你所修改后的结果。

安装 webpack-dev-server

npm install --save-dev webpack-dev-server

配置 devServer

修改 webpack.config.js 文件,添加 devServer 配置:

module.exports = {  
  // ...  
  devServer: {  
    static: './dist', // 告诉服务器从哪里提供内容  
    open: true, // 自动打开浏览器  
  },  
};

修改 package.json

在 package.json 文件的 scripts 部分添加一个启动开发服务器的脚本:

"scripts": {  
  // ...  
  "start": "webpack serve --open"  
},

启动开发服务器

在终端或命令提示符中运行以下命令来启动开发服务器:

npm start

现在,当你修改源代码并保存时,Webpack 会自动重新编译代码,并且浏览器会自动刷新显示最新的结果。

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

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

相关文章

【Linux C | 网络编程】进程池退出的实现详解(五)

上一篇中讲解了在进程池文件传输的过程如何实现零拷贝&#xff0c;具体的方法包括使用mmap&#xff0c;sendfile&#xff0c;splice等等。 【Linux C | 网络编程】进程池零拷贝传输的实现详解&#xff08;四&#xff09; 这篇内容主要讲解进程池如何退出。 1.进程池的简单退…

超越基础功能:项目进度管理工具深度评测

国内外主流的10款项目进度管理网站对比&#xff1a;PingCode、Worktile、滴答清单&#xff08;TickTick&#xff09;、Todoist、NarTick、Teambition、Monday.com、Asana、ClickUp、Trello。 在选择合适的项目进度管理工具时&#xff0c;许多项目经理面临着如何找到既能满足团队…

二十二、作业

目录 1.求代码结果 2.求代码结果 3.使用指针打印数组内容 4.字符串逆序 5.计算求和 6.打印水仙花数 7.打印菱形 8.喝汽水问题 1.求代码结果 输出为00345 2.求代码结果 任何一个变量/表达式&#xff0c;都有2个属性&#xff0c;值属性和类型属性 int a 3&#xff1b;…

Python及Jupyter-Notebook安装

来源&#xff1a; “码农不会写诗”公众号 链接&#xff1a;Python及Jupyter-Notebook安装 文章目录 01 Python安装1.1 下载安装包1.2 双击安装包&#xff0c;开始安装1.3 选择安装配置1.4 选择需要安装的Optional Feature&#xff0c;点击Next1.5 选择需要安装的Advanced Feat…

matplotlib的科研绘图辅助

matplotlib的科研绘图辅助 趁着暑假&#xff0c;与和鲸科技合作了一个python绘图的教程&#xff0c;作为暑期夏令营的一小部分&#xff0c;主要内容是介绍如何使用matplotlib、pandas、seaborn和plotnine进行医学科研绘图&#xff0c;感兴趣的可以通过如下地址进行访问&#x…

Unity XR Interaction Toolkit设置或监听手柄按键事件(三)

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、XRI Default Input Actions1.导入官方案例2.设置控制器绑定&#xff0c;如手柄、主/辅助按钮、操纵杆等1.要设置控制器绑定&#xff0c;如左右手 手柄、主/辅助按钮、操纵杆等…

添加sidecar容器并输出日志

添加一个sidecar容器(使用busybox 镜像)到已有的pod 11-factor-app中,确保sidecar容器能够输出/var/log/11-factor-app.log的信息,使用volume挂载/var/log目录,确保sidecar能访问11-factor-app.log 文件 # 准备工作 创建一个 pod 11-factor-appapiVersion: v1 kind: Pod metada…

【研路导航】保研英语面试高分攻略,助你一路过关斩将

面试攻略之 千锤百炼英语口语 写在前面 在保研面试中&#xff0c;英语口语往往是让许多同学感到头疼的一部分。如何在面试中展现出自信和流利的英语表达能力&#xff0c;是我们今天要探讨的主题。以下是一些有效的英语口语练习方法和常见题型解析&#xff0c;帮助你在保研面试…

GUI - Tkinter - MVC

【python】 property属性详解_python property-CSDN博客Tkinter MVC (pythontutorial.net)GUI架构演进之MVC&#xff08;一&#xff09; - frydsh - 博客园 (cnblogs.com)MVC 模式 | 菜鸟教程 (runoob.com)MVC 架构详解 (freecodecamp.org)Python之MVC - chenbiao - SegmentFau…

灵活数据流处理:NeuronEX 支持 JavaScript 自定义函数

随着数据要素逐渐成为帮助工业企业提升智能化水平的重要助力&#xff0c;如何灵活采集和处理工业数据&#xff0c;并满足用户定制化的数据需求&#xff0c;成为企业数字化建设的焦点之一。 NeuronEX 是一款专为工业场景设计的边缘网关软件&#xff0c;具备工业设备数据采集、工…

@JSONField(format = “yyyyMMddHH“)的作用和使用

JySellerItqrdDataDO对象中的字段为&#xff1a; private Date crdat; 2.数据库中的相应字段为&#xff1a; crdat datetime DEFAULT NULL COMMENT 创建时间,2. 打印出的结果为&#xff1a; “crdat”:“2024072718” 年月日时分秒 3. 可以调整format的格式 4. 这样就把Date类…

信息搜集——小米

小米 主域名&#xff1a;www.miui.com 备案网站&#xff1a;27个 备案APP&#xff1a;21个 备案小程序&#xff1a;13个 备案公众号&#xff1a;23个 备案微博&#xff1a;43个 IP 域名 端口 状态码 Ping 网址 多地ping 网站名称 网址 域名 网站备案/许可证号 公 司名…

手撕数据结构---------顺序表和链表

1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使 ⽤的数据结构&#xff0c;常⻅的线性表&#xff1a;顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0c;也就说是连续的⼀条直…

java实战项目--拼图小游戏(附带全套源代码)

个人主页VON 所属专栏java实战项目游戏参考黑马程序员 一、效果展示 二、功能介绍 游戏中所有的图片以及代码均已打包&#xff0c;玩家直接安装游戏即可&#xff0c;不用idea也可以畅玩。 游戏功能比较单一&#xff0c;只有简单的拼图功能。 a&#xff1a;展示原图重新游戏&a…

初涉JVM

JVM 字节码、类的生命周期、内存区域、垃圾回收 JVM主要功能&#xff1a; 解释运行&#xff08;翻译字节码&#xff09;内存管理&#xff08;GC&#xff09;即使编译&#xff08;Just - In - Time&#xff0c; JIT&#xff09; 将短时间内常使用到的字节码翻译成机器码存储在内…

whaler_通过镜像导出dockerfile

1、Whaler简介 Whaler:从镜像导出Dockerfile&#xff0c;whaler英文释义捕鲸船。 2、下载安装 # wget -cO /usr/local/bin/whaler https://github.com/P3GLEG/Whaler/releases/download/1.0/Whaler_linux_amd64 3、赋予可执行权限 [rootlocalhost ~]# chmod x /usr/local/…

Android OTA刷机包制作学习笔记

前言 OTA是一个再常见不过的需求&#xff0c;Android提供了recovery用于完成相关操作。 常规OTA包制作有两种&#xff1a; 有项目的完整AOSP源码&#xff0c;可以在成构建产物zip包后利用官方脚本制作。具体参阅&#xff1a;Office OTA假设你没有1的条件那么可以利用官方非A/…

exo-tinggrad 架构解析

目录 exo-tinggrad 架构解析 8B 模型配置 70B 模型配置 exo-tinggrad 架构解析 这个项目目录包含了一系列与Python相关的文件和文件夹,它们共同构成了一个可能的项目或库。这些文件和文件夹按照特定的命名和组织方式被放置在了一起,以便于管理、开发和维护。 tinygrad: 这…

24.7.28(tarjan 割点,割边,多重背包单调队列优化)

星期一&#xff1a; cf round 960 div2 B 简单构造 cf传送门 题意有点绕 思路&#xff1a;开始容易想到 y前和 x后全-1&#xff0c;y到x填1的构造&#xff0c;但对于 5 2 1&#xff0c;1 1 -1 -1 -1有问题&#xff0c;1和5的后缀值都为 -1…

【MySQL进阶之路 | 高级篇】简述Bin Log日志

1. 日志类型 MySQL有不同类型的日志文件&#xff0c;用来存储不同类型的日志&#xff0c;分为二进制日志、错误日志、通用查询日志和慢查询日志&#xff0c;这也是常用的4种。MySQL 8又新增两种支持的日志:中继日志和数据定义语句日志。使用这些日志文件&#xff0c;可以查看M…