webpack学习-4.开发环境

webpack学习-4.开发环境

  • 1.mode
  • 2.使用source map
  • 3.自动编译代码
    • 3.1 webpack 的 观察模式
    • 3.2 使用 webpack-dev-server
    • 3.3 使用 webpack-dev-middleware
  • 4.总结

1.mode

本章的标题一看就是开发环境,那就要引入webpack配置文件的mode了。

mode 属性用于指定 Webpack 的构建模式,它有三个可选值:
development:用于开发环境,启用有用的开发工具和更详细的错误信息,以增加构建速度和保持调试能力。
production:用于生产环境,启用优化功能,如代码压缩、作用域提升、副作用消除等,以生成更小、更高效的输出文件。
none:不应用任何默认优化或开发工具。

使用 mode 属性可以让 Webpack 根据不同的环境自动应用相应的优化和配置。例如,在开发环境中,你可能希望保留源代码的映射以方便调试,而在生产环境中,你可能希望进行代码压缩和优化。

如果你没有指定 mode 属性,Webpack 将默认使用 production 模式。这意味着如果你没有明确设置 mode,Webpack 将应用生产环境的优化配置。

虽然 mode 属性不是必需的,但建议在 Webpack 配置文件中设置它,以便根据不同的环境自动应用适当的配置和优化。这样可以简化配置,并确保生成的输出文件在不同的环境中具有最佳的性能和功能。

总结下就是,mode最好写上。目前没体会到它的很大区别,之后再看。呜呜呜

2.使用source map

当 webpack 打包源代码时,可能会很难追踪到错误和警告在源代码中的原始位置。例如,如果将三个源文件(a.js,b.js 和 c.js)打包到一个 bundle(bundle.js)中,而其中一个源文件包含错误,那么堆栈跟踪就会直接指向到 bundle.js,却无法准确知道错误来自于哪个源文件,所以这种提示通常无法提供太多帮助。
按例子在print.js里写上一句错误代码

export default function printMe() {conole.log('I get called from print.js12!');}

如果直接打包运行,会看到浏览器控制台有报错消息
在这里插入图片描述
点击跳转到出错的代码地方:
在这里插入图片描述
额,不是源码也。所以引入source-map,实际上就是在webpack配置文件中加上一句devtool: ‘inline-source-map’。打包运行,结果:
在这里插入图片描述
对开发就很香

3.自动编译代码

每次编译代码都需要手动运行 npm run build 会显得很麻烦。

webpack 提供了几种可选方式帮助在代码发生变化后自动编译代码:
1.webpack 的 观察模式
2.webpack-dev-server
3.webpack-dev-middleware

3.1 webpack 的 观察模式

可以指示 webpack “观察”依赖图中所有文件的更改。如果其中一个文件被更新,代码将被自动重新编译,所以不必再去手动运行整个构建。
我们在package.json中添加一个用于启动 webpack 观察模式的 npm scripts:

 {"name": "webpack-demo","version": "1.0.0","description": "","private": true,"scripts": {"test": "echo \"Error: no test specified\" && exit 1","watch": "webpack --watch",//这一行是新加的"build": "webpack"},"keywords": [],"author": "","license": "ISC","devDependencies": {"html-webpack-plugin": "^4.5.0","webpack": "^5.4.0","webpack-cli": "^4.2.0"},"dependencies": {"lodash": "^4.17.20"}}

在命令行中运行 npm run watch,然后就会看到 webpack 是如何编译代码的。 编译完成后会发现它并没有退出命令行,这是因为该脚本当前还在观察你的文件。
在这里插入图片描述
现在,在 webpack 仍在观察文件的同时,移除之前print.js故意加入的错误,然后保存。应该可以看到 webpack 已经自动地重新编译修改后的模块!但是你再点击按钮,还是会报错的。这也是这种方法的不足,需要手动刷新浏览器才能看到修改后的实际效果。

3.2 使用 webpack-dev-server

实现 webpack-dev-server 将能够自动刷新浏览器!
先安装依赖:

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

接下来修改配置文件webpack.config.js,告诉 dev server 应从什么位置开始查找文件:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {mode:'production',entry: {index: './src/index.js',print: './src/print.js',},devtool: 'inline-source-map',devServer: {static: './dist',},//新增plugins: [new HtmlWebpackPlugin({title: 'Development',}),],output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist'),clean: true},optimization: {runtimeChunk: 'single',},//新增
};

以上配置告知 webpack-dev-server 将 dist 目录下的文件作为可访问资源部署在 localhost:8080。。
再添加一个可以直接运行 dev server 的 script:

 {"name": "webpack-demo","version": "1.0.0","description": "","private": true,"scripts": {"test": "echo \"Error: no test specified\" && exit 1","watch": "webpack --watch","start": "webpack serve --open",//新增的"build": "webpack"},"keywords": [],"author": "","license": "ISC","devDependencies": {"html-webpack-plugin": "^4.5.0","webpack": "^5.4.0","webpack-cli": "^4.2.0","webpack-dev-server": "^3.11.0"},"dependencies": {"lodash": "^4.17.20"}}

现在,在命令行中运行 npm start,会看到浏览器自动加载页面。更改任何源文件并保存它们,web server 将在编译代码后自动重新加载

3.3 使用 webpack-dev-middleware

webpack-dev-middleware 是一个包装器,它可以把 webpack 处理过的文件发送到 server。这是 webpack-dev-server 内部的原理,但是它也可以作为一个单独的包使用,以便根据需求进行更多自定义设置。下面是一个 webpack-dev-middleware 配合 express server 的示例。
首先,安装 express 和 webpack-dev-middleware:

npm install --save-dev express webpack-dev-middleware

现在调整 webpack 配置文件,以确保能够正确启用中间件:

const path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {mode: 'development',entry: {index: './src/index.js',print: './src/print.js',},devtool: 'inline-source-map',devServer: {static: './dist',},plugins: [new HtmlWebpackPlugin({title: 'Development',}),],output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist'),clean: true,publicPath: '/',//新增},};

在 server 脚本使用 publicPath,以确保文件资源能够作为可访问资源正确部署在 http://localhost:3000 下,稍后我们会指定端口号。接下来是设置自定义 express server:
在dist同级新建server.js:

const express = require('express');
const webpack = require('webpack');
const webpackDevMiddleware = require('webpack-dev-middleware');const app = express();
const config = require('./webpack.config.js');
const compiler = webpack(config);// 告知 express 使用 webpack-dev-middleware,
// 以及将 webpack.config.js 配置文件作为基础配置。
app.use(webpackDevMiddleware(compiler, {publicPath: config.output.publicPath,})
);// 将文件 serve 到 port 3000。
app.listen(3000, function () {console.log('Example app listening on port 3000!\n');
});

现在添加 npm script 以便更方便地运行 server:

 {"name": "webpack-demo","version": "1.0.0","description": "","private": true,"scripts": {"test": "echo \"Error: no test specified\" && exit 1","watch": "webpack --watch","start": "webpack serve --open","server": "node server.js",//新增"build": "webpack"},"keywords": [],"author": "","license": "ISC","devDependencies": {"express": "^4.17.1","html-webpack-plugin": "^4.5.0","webpack": "^5.4.0","webpack-cli": "^4.2.0","webpack-dev-middleware": "^4.0.2","webpack-dev-server": "^3.11.0"},"dependencies": {"lodash": "^4.17.20"}}

在终端执行 npm run server,将会有类似如下信息输出:
在这里插入图片描述
打开浏览器,访问 http://localhost:3000,应该看到 webpack 应用程序已经运行!
例子中的代码是不会实时同步更改到浏览器!!!

4.总结

1.mode的配置:环境
2.source-map:代码映射,可以帮助你将编译后的代码映射回原始源代码,使得在开发环境中进行工作更加方便。你可以在浏览器中查看和编辑原始源代码,而不需要跟踪和修改编译后的代码。
3.自动编译代码:

1.使用观察模式,缺点,需要手动刷新浏览器
2.使用 webpack-dev-server
3.使用 webpack-dev-middleware,构建代码并不会自动同步更改到浏览器;这个待定

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

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

相关文章

052:vue重新发布,软件热更新方面的一点经验示例

第052个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

Github 2023-12-13 开源项目日报 Top10

根据Github Trendings的统计,今日(2023-12-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量非开发语言项目5Python项目2TypeScript项目1Jupyter Notebook项目1JavaScript项目1PHP项目1 从零开始构建技术…

Unity中Shader URP的安装与设置

文章目录 前言一、URP安装1、Window -> Project Manager -> 搜索 Render 二、URP设置1、创建一个URP配置文件2、渲染管线的修改(当为空时,使用的是 BuildIn Render Pipeline)3、这时我们新建一个对象。使用的材质球默认使用 URP 默认Sh…

MySQL基础笔记

MySQL 1. SQL1.1 SQL-DDL语句1.1.1 数据库操作1.1.2 表操作 1.2 MySQL-DML语句1.3 MySQL-DQL语句1.3.1 基本查询1.3.2 条件查询1.3.3 聚合函数1.3.4 分组查询1.3.5 排序查询1.3.6 分页查询 1.4 MySQL-DCL语句1.4.1 管理用户1.4.2 权限控制 2. 函数2.1 字符串函数2.2 数值函数2.…

数据标注公司如何确保数据安全?景联文科技多维度提供保障

数据标注公司通常拥有大量的AI数据和用户数据,保护数据安全是数据标注公司的重要任务。 数据标注公司确保标注数据的安全可以从制度、人员、工具等多个方面入手,建立完善的安全管理体系和审计机制,加强应急预案和备份机制的建立,以…

交流220V转降直流5V0.5A非隔离BUCK降压电源芯片 家电控制板MCU

交流220V转降直流5V0.5A非隔离BUCK降压电源芯片 在家电控制板MCU中,为了提供稳定可靠的电源供应,需要一个能够将交流220V的电压转换为降压后的直流5V电压的电源芯片。本文将介绍一款非隔离BUCK降压电源芯片,它能够满足这一需求。 AH8699-22…

华为云之轻松搭建 Nginx 静态网站

华为云之轻松搭建 Nginx 静态网站 一、本次实践介绍1. 本次实践目的2. 本次实践环境 二、ECS弹性云服务器介绍三、准备实践环境1. 预置环境2. 查看ECS服务器的账号密码信息3. 登录华为云4. 远程登录ECS服务器 四、安装配置 Nginx1. 安装nginx2. 启动nginx3. 浏览器中访问nginx服…

【INTEL(ALTERA)】Agilex7 FPGA Development Kit DK-DK-DEV-AGI027RBES 编程/烧录/烧写/下载步骤

DK-DEV-AGI027RBES 的编程步骤: 将 USB 电缆插入 USB 端口 J8(使用 J10 时,DIPSWITCH SW5.3(DK-DEV-AGI027RES 和 DK-DEV-AGI027R1BES)和 SW8.3(DK-DEV-AGI027RB 和 DK-DEV-AGI027-RA)应关闭&a…

人工智能_机器学习065_SVM支持向量机KKT条件_深度理解KKT条件下的损失函数求解过程_公式详细推导_---人工智能工作笔记0105

之前我们已经说了KKT条件,其实就是用来解决 如何实现对,不等式条件下的,目标函数的求解问题,之前我们说的拉格朗日乘数法,是用来对 等式条件下的目标函数进行求解. KKT条件是这样做的,添加了一个阿尔法平方对吧,这个阿尔法平方肯定是大于0的,那么 可以结合下面的文章去看,也…

微信小程序map视野发生改变时切换定位点

<!--地图--> <view><map id"myMap" style"width: 100%; height: 300px;" latitude"{{latitude}}" longitude"{{longitude}}"scale"{{scale}}" markers"{{markers}}" controls"{{controls}}&q…

PyCharm控制台堆栈乱码问题解决

目录 1、问题描述2、问题原因3、问题解决 1、问题描述 PyCharm环境都已经配置成了UTF-8编码&#xff0c;控制台打印中文也不会出现乱码&#xff0c;但报错堆栈信息中如果有中文会出现中文乱码&#xff1a; 这种该怎么解决呢&#xff1f; 2、问题原因 未将PyCharm编码环境与项目…

vivado约束方法1

关于约束方法 设计约束定义了编译流必须满足的要求&#xff0c;以便设计要在板上发挥作用。中的所有步骤都不使用所有约束编译流程。例如&#xff0c;物理约束仅在实施过程中使用步骤&#xff08;即通过放置器和路由器&#xff09;。因为AMD Vivado™集成设计环境&#xff08;…

【Linux】高性能 Web 服务器 Nginx 安装教程(Ubuntu 22.04)

前言 Nginx 是一个高性能的开源 Web 服务器软件&#xff0c;也可以用作反向代理服务器、负载均衡器、HTTP 缓存以及作为邮件代理服务器等。Nginx 以其高性能、稳定性和丰富的功能而闻名&#xff0c;被广泛用于构建高流量网站和应用程序。 步骤 更新软件源 首先需要更新系统的软…

编程应用实际场景:台球厅怎么样用电脑给客人计时,台球计时收费系统操作教程

一、前言 准确控制顾客在店内游玩的时间&#xff0c;从而控制店内的各项成本&#xff0c;并提升店内的客流量。在顾客享受计时项目的时候&#xff0c;可以同时添加其他食物消费&#xff0c;并将单据合并统一结账。软件中的会员功能可以为客户办理会员可以使用灯控器控灯&#…

tcp的聊天室

注意&#xff1a;要加库文件&#xff0c;服务端客户端都要加 network 客户端的头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpSocket>//客户端类 #include <QMessageBox>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } Q…

人工智能导论习题集(3)

第五章&#xff1a;不确定性推理 题1题2题3题4题5题6题7题8 题1 题2 题3 题4 题5 题6 题7 题8

搜维尔科技:第九届元宇宙数字人设计大赛校园行讲演活动正式启动—中国戏曲学院站!

由全国高等院校计算机基础教育研究会指导&#xff0c;利亚德集团和爱迪斯通科技发起的数字人设计大赛正在火热进行中&#xff0c;同时进行的元宇宙数字人设计大赛校园行活动也正式拉开序幕&#xff0c;12月13日校园行活动—中国戏曲学院开讲。划重点&#xff1a;此次大赛已成为…

CNN 卷积神经网络之 DenseNet 网络的分类统一项目(包含自定义数据集的获取)

1. DenseNet 网络介绍 本章实现的项目是DenseNet 网络对花数据集的五分类&#xff0c;下载链接&#xff1a; 基于迁移学习的 DenseNet 图像分类项目 DenseNet 网络是在 ResNet 网络上的改进&#xff0c;大概的网络结构如下&#xff1a; 1.1 卷积的简单介绍 图像识别任务主要…

BearPi Std 板从入门到放弃 - 先天神魂篇(3)(RT-Thread I2C设备)

简介 使用BearPi IOT Std开发板及其扩展板E53_SC1&#xff0c; SC1上有I2C1 的光照强度传感器BH1750 和 EEPROM AT24C02&#xff0c; 本次主要就是读取光照强度; 主板: 主芯片: STM32L431RCT6LED : PC13 \ 推挽输出\ 高电平点亮串口: Usart1I2C使用 : I2C1E53_SC1扩展板 : LE…

蓝牙物联网全屋智能系统解决方案

#蓝牙物联网# 蓝牙物联网全屋智能系统解决方案是一种通过低功耗蓝牙技术将家中的各种设备连接到一起&#xff0c;实现家居物联智能操控的方案。 全屋智能系统解决方案是一种将智能家居设备、传感器、照明、安防等系统集成在一起&#xff0c;实现全屋智能化控制的方案。 蓝牙物…