2.webpack实时打包

news2025/1/15 6:47:47

简介

上一章已经实现了使用 webpack 构建了一个简单的项目;但是我们发现,每次修改了 index.js 需要重新执行 cnpm run dev 命令重新构建 main.js;这在开发阶段是无法忍受的,因为这样调式将浪费大量的时间;还好 webpack 提供了自动化更新资源的依赖 webpack-dev-server 和 html-webpack-plugin 插件让项目自动打包,可以轻松实现边开发,边调试

webpack-dev-server 有如下特点

1)类似于 node.js 阶段用到的 nodemon 工具

2)每当修改了源码,webpack 会自动进行项目的打包和构建

html-webpack-plugin有如下特点

  1. webpack 中 html 插件(类似于一个模版引擎插件)

  2. 可以通过此插件定制 index.html 页面的内容

实现步骤

  1. 安装 webpack-dev-server 依赖,执行如下命令
cnpm install webpack-dev-server@3.11.2 -D

在这里插入图片描述
2. 修改 package.json 下 scripts 节点下的 dev 命令如下:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack serve"
}
  1. 执行如下命令打包项目后,发现命令没有退出,已经进入运行状态;要退出的话,同时按下 ctrl + c 然后根据提示输入 y,或者直接按下两次 ctrl + c 即可
cnpm run dev

在这里插入图片描述
这个时候,我们修改 index.js 中的代码(将偶数行的背景色设置为蓝色),会发现命令窗口输出信息,main.js 在自动重构
在这里插入图片描述
4. webpack-dev-server 会启动一个实时打包的 http 服务器(端口默认 8080),所以我们现在可以通过访问 http://localhost:8080 访问
在这里插入图片描述
可以看到就是我们的项目结构,当访问 http://localhost:8080/src/ 的时候,会默认访问 index.html 页面;
在这里插入图片描述
问题来了,明明上一步,我们修改了偶数行的颜色为蓝色,为什么显示还是绿色?继续修改其他内容,还是无效!这是什么原因呢?我们观察 cnpm run dev 命令后,发现如下内容,这里说明输出路径就是根目录,也就是说 main.js 输出到了项目的根目录
在这里插入图片描述
但是查看项目结构,在根目录下,并没有发现 main.js
在这里插入图片描述
但是访问一下: localhost:8080/main.js 发现竟然有 main.js 内容;这说明了:webpack-dev-server 监控到项目代码的变动后,会将打包文件默认生成到项目的根路径下,并且这个文件(main.js) 实际上是在内存中的,这就是为什么重新部署的速度很快的原因;而且在内存中除了操作更快之外,对磁盘也没有什么损害,要知道频繁的读写磁盘,会影响磁盘的性能和寿命
在这里插入图片描述
5. 那么修改 index.html 中对 main.js 的引入即可

<script src="/main.js"></script>

再次访问一下,发现背景色变成了我们修改后的颜色;当改成其他颜色后,页面会自动重新渲染,不用我们手动刷新
在这里插入图片描述
6. 我们发现,现在访问 index.html 的路径是:http://localhost:8080/src/,这样并不友好,而且直接访问:http://localhost:8080 暴露了我们项目的整个结构,这是不能忍受的,所以我们需要引入一个新的插件 html-webpack-plugin 来处理这个问题;执行如下命令安装这个插件

cnpm install html-webpack-plugin@5.3.2 -D

安装完毕后,打开 webpack.config.js 添加如下配置

// 1.导入 html-webpack-plugin 插件,得到该插件的构造函数
const HtmlPlugin = require('html-webpack-plugin');

// 2. new 构造函数, 创建插件实例对象
const htmlPlugin = new HtmlPlugin({
    // 指定要复制哪个页面
    template: './src/index.html',
    // 指定复制出来的文件名和存放路径
    filename: './index.html'
});

module.exports = {
    mode: 'development', // 指定 webpack 运行模式; mode 用来指定构建模式,可选值为:development(开发环境) 和 production(生产环境)
    plugins: [htmlPlugin]// 3. 插件的数组, 指定要挂载的插件
};
  1. 执行命令 npm run dev 重新启动项目,输出的目录依然在项目根路径下
    在这里插入图片描述
    像 main.js 一样,index.html 也是生成并缓存在内存中的,所以直接访问:http://localhost:8080 即可看到首页
    在这里插入图片描述
    当修改了 html 页面元素后,会自动刷新页面;并且可以去掉 index.html 中引入的 main.js,html-web-plugin 插件也会自动帮我们添加进去
    在这里插入图片描述
  2. 到目前为止,我们要访问系统都要手动在浏览器输入访问地址,其实可以在 webpack.config.js 中添加配置,让项目打包完成后自动打开浏览器并访问;在 webpack.config.js 中添加如下配置
module.exports = {
    mode: 'development', // 指定 webpack 运行模式; mode 用来指定构建模式,可选值为:development(开发环境) 和 production(生产环境)
    plugins: [htmlPlugin], // 插件的数组, 指定要挂载的插件
    devServer: {
        open: true, // 设置自动打开浏览器
        port: 80, // 设置访问端口号
        host: "127.0.0.1" // 设置主机地址
    }
};

配置完成后,重新打包,发现浏览器自动打开了,并且访问地址也变成了我们设置的地址
在这里插入图片描述
注意:如果在 cnpm run dev 后,构建项目出现 unable to load ‘@webpack-cli/serve’ command 异常,如下所示
在这里插入图片描述
说明 webpack-cli 的版本可能有问题,执行如下命令自动引入新的版本即可解决问题

cnpm install webpack-cli -D

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

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

相关文章

开发场景中前端交付的对于后端数据的获取功能书写+页面简繁体转换+页面链接跳转新页面

1&#xff0c;开发场景中前端交付对于后端数据的获取功能书写 首先&#xff0c;我们明确基本逻辑概念&#xff0c;前端获取数据本质是利用ajax中的api接口来获取变量&#xff0c;再将其导入我们的data&#xff1b; 明确基本概念开发就可以进行ajax的定义 下文中e变量是获取前端…

「mysql是怎样运行的」第24章 一条记录的多幅面孔---事务的隔离级别与MVCC

「mysql是怎样运行的」第24章 一条记录的多幅面孔—事务的隔离级别与MVCC 文章目录「mysql是怎样运行的」第24章 一条记录的多幅面孔---事务的隔离级别与MVCC一、事前准备二、事务的隔离级别事务并发执行遇到的问题SQL标准中的四种隔离级别MySQL中支持的四种隔离级别三、MVCC原…

C++多态原理

请看下面的程序&#xff0c;该程序演示了多态类对象存储空间的大小。 #include <iostream> using namespace std; class A {public:int i;virtual void func() {}virtual void func2() {} }; class B : public A {int j;void func() {} }; int main() {cout << si…

VBA之正则表达式(41)-- 快速标记两个星号之后的字符

实例需求&#xff1a;工作表中的数据保存在A列~G列&#xff0c;现需要识别D列中包含超过两个星号的内容&#xff0c;并将第3个星号及其之后的字符设置为红色字体&#xff0c;如图所示。 示例代码如下。 Sub Demo1()Dim objRegExp As ObjectDim objMatch As ObjectDim strMatch…

【10】linux命令每日分享——cp复制文件和目录

大家好&#xff0c;这里是sdust-vrlab&#xff0c;Linux是一种免费使用和自由传播的类UNIX操作系统&#xff0c;Linux的基本思想有两点&#xff1a;一切都是文件&#xff1b;每个文件都有确定的用途&#xff1b;linux涉及到IT行业的方方面面&#xff0c;在我们日常的学习中&…

Altium Designer v23.2.1.34 PCB板设计软件中文特别版

Altium Designer 中文特别版是一款功能强大的电子设计自动化(EDA)软件,它提供了一个完整的设计环境,可以帮助电子工程师快速设计、模拟、仿真和制造电子产品。Altium Designer 中文特别版拥有丰富的功能,包括电路设计、PCB设计、回流焊接、3D设计、仿真等,可以帮助用户快…

【深度学习 01】安装环境详解之 miniconda

欢迎关注『youcans的深度学习课』系列&#xff0c;持续更新中… 【深度学习 01】安装环境之 miniconda 【深度学习 02】PyTorch CPU版本安装与环境配置 【深度学习 01】 安装环境详解之 miniconda 1. conda/Anaconda/miniconda conda可以理解为一个工具&#xff0c;也是一个可…

TensorFlow-Keras - 一文搞懂 TF 常用矩阵计算方法

目录 一.引言 二.tf.multiply 1.常规乘法 2.乘以标量 3.不规则乘法 三.tf.matmul 1.常规矩阵相乘 2.多维矩阵相乘 四.tf.tensordot 1.axes1 2.axesN 3.axesTuple 4.axesArray(Tuple()) 五.K.dot 六.K.batch_dot 1.不指定 axes 2.指定 axes 为数字 3.指定 axe…

【观察】连续八年霸榜云数据库“领导者”,揭秘亚马逊云科技背后的“统治力”...

日前&#xff0c;全球市场分析机构 Gartner发布《2022 云数据库管理系统魔力象限》报告。其中&#xff0c;在Gartner本次魔力象限报告评估的20家供应商中&#xff0c;亚马逊云科技在纵轴“执行能力”和横轴“愿景完整性”两个维度分别处于最高、最右位置&#xff0c;这也是亚马…

Zigbee物联网组网

物联网的核心和基础是互联网&#xff0c;物联网是在互联网基础上的延伸和扩展的网络&#xff0c;然而在物联网当中基于海量数据的无线传感网是物联网极具代表的网络之一&#xff0c;其用户端延伸和扩展到了任何物品与物品之间&#xff0c;进行信息交换和通信。 硬件设备及连接&…

PPC Insights系列:洞见安全多方图联邦

开放隐私计算开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播&#xff0c;愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号知…

NetCore使用SkyWalking

官网中文文档&#xff1a;SkyWalking 极简入门 | Apache SkyWalking一、引用依赖新建一个项目&#xff1a;Cbf.SkyWalking.ServiceInstancenuget安装&#xff1a;SkyAPM.Agent.AspNetCore二、launchSettings.json添加这两行配置或者在这里添加这两行也行&#xff1a;三、需要添…

界面组件DevExpress WinForms v22.2 - 全面升级数据展示功能

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…

某马程序员NodeJS速学笔记

文章目录前言一、什么是Node.js?二、fs文件系统模块三、Http模块四、模块化五、开发属于自己的包模块加载机制六、Express1.初识ExpressGET/POSTnodemon2.路由模块化3.中间件中间件分类自定义中间件4. 跨域问题七、Mysql模块安装与配置基本使用Web开发模式Session认证JWT八、大…

MySQL查询操作

系列文章目录前言一、简单查询SELECT子句SELECT后面之间跟列名DISTINCT,ALL列表达式列更名WHERE子句WHERE子句中可以使用的查询条件比较运算BETWEEN...AND...集合查询&#xff1a;IN模糊查询LIKE空值比较&#xff1a;IS NULL多重条件查询SELECT 的基本结构ORDER BY子句排序聚集…

vue导出excel

1、下载依赖 npm install --save xlsx file-saverps&#xff1a;我下载完依赖后再运行会报错&#xff0c;偶尔情况&#xff0c;没找到原因&#xff0c;只需要卸载重新npm install就好 2、新建一个写公共js方法的文件**&#xff0c;如果你有的话 &#xff0c;写在里面就好 然…

Mysql 用户管理、权限管理(含用户密码修改)

和Linux 系统一样&#xff0c;也有着自己独有的用户管理系统&#xff0c;MySQL所有的用户信息都被保存在mysql数据库中的user表中。 目录 1、用户信息 2、用户管理 (1) 创建用户 (2) 删除用户 (3) 修改用户密码 3、用户权限管理 (1) 赋予权限&#xff08;grant&#xff…

Mysql5.7+Orch+proxysql+keepalive

架构设计 通过gtid配置MySQL主从&#xff0c;通过orch实现高可用&#xff0c;orch通过raft实现自身的高可用&#xff0c;通过proxysql实现读写分离&#xff0c;proxysql可自身可以配置集群&#xff0c;通过keepalive实现虚拟IP漂移&#xff0c;keepalive可以自身配置集群 配…

蓝桥杯嵌入式LED流马灯(使用HAL_Delay、操作寄存器、使用定时器)

1.STM32CubeMX的配置 将PC8-PC15设置为GPIO_Output模式&#xff0c;将PD2也设置为GPIO_Output模式。 通过原理图知&#xff0c;LED&#xff08;PC8-PC15&#xff09;低电平有效&#xff0c;锁存器(PD2)高电平有效。 初始化时我将LED设置为高电平&#xff0c;熄灭状态&#xff0…

MyBatis - 09 - 自定义映射resultMap

文章目录1 准备工作1.1 建表1.2 创建实体类1.3 引出一个问题方案1方案2方案32.完整代码项目结构EmpMapper接口Emp类SqlSessionUtils工具类EmpMapper.xmljdbc.propertieslog4j.xmlmybatis-config.xmlResultMapTest完整代码在后面 1 准备工作 1.1 建表 t_emp 添加测试数据&…