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.rhkb.cn/news/216638.html

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

相关文章

发布jar包到maven中央仓库

1. 环境 在网上找的很多文章中写得都有很多问题,这里记录一下最近一次成功地发布jar包到maven中央仓库的过程。并附带上每一个步骤官方的指导链接。 系统:mac(windows系统在下载辅助工具时不太一样,在配置上和mac系统没有区别&…

HarmonyOS4.0从零开始的开发教程14Web组件的使用

HarmonyOS(十二)Web组件的使用 1 概述 相信大家都遇到过这样的场景,有时候我们点击应用的页面,会跳转到一个类似浏览器加载的页面,加载完成后,才显示这个页面的具体内容,这个加载和显示网页的…

C++初阶(十五)Stack和Queue

文章目录 一、Stack的模拟实现二、Queue的模拟实现三、容器适配器1、什么是容器适配器2、STL标准库中stack和queue的底层结构3、 deque的简单介绍(了解)1、deque的原理介绍2、deque的缺陷 4、为什么选择deque作为stack和queue的底层默认容器 一、Stack的模拟实现 #include<…

用23种设计模式打造一个cocos creator的游戏框架----(十五)策略模式

1、模式标准 模式名称&#xff1a;策略模式 模式分类&#xff1a;行为型 模式意图&#xff1a;定义一系列的算法&#xff0c;把它们一个个封装起来&#xff0c;并且使它们可以相互替换。此模式使得算法可以独立于使用它们的客户而变化 结构图&#xff1a; 适用于&#xff1…

掌握Web、DNS、FTP、DHCP服务器的配置。掌握简单网络方案的规划和设计

1、Web服务器配置 2、综合设计 配置完后,所有的终端主机都要能够访问外网服务器,并进行测试。(本题可以自行选题,自行设计,但必须包含路由器、服务器(web、dns、DHCP、)、交换机及防火墙)。 3.做好规划并搭建拓扑图: 4.给PC机与服务器配置好IP,网关 5.给每个交换机…

python和pygame实现烟花特效

python和pygame实现烟花特效 新年来临之际&#xff0c;来一个欢庆新年烟花祝贺&#xff0c;需要安装使用第三方库pygame&#xff0c;关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 效果图及源码 先看效果图&#xff1a…

R语言对医学中的自然语言(NLP)进行机器学习处理(1)

什么是自然语言(NLP)&#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…

flutter调试器查看不了副页面(非主页面/子页面)

刚接触flutter&#xff0c;写了两个页面&#xff0c;通过按钮&#xff0c;可以从主页面跳转到副页面&#xff0c;副页面我自己写的一个独立的dart文件&#xff0c;在主页面的代码中导入使用。但是当我运行代码后&#xff0c;点击跳转的时候&#xff0c;却发现查看不到对应的副页…

​flutter 代码混淆

Flutter 应用混淆&#xff1a;Flutter 应用的混淆非常简单&#xff0c;只需要在构建 release 版应用时结合使用 --obfuscate 和 --split-debug-info 这两个参数即可。–obfuscate --split-debug-info 用来指定输出调试文件的位置&#xff0c;该命令会生成一个符号映射表。目前支…

Leetcode 139.单词拆分

OJ链接 &#xff1a;139.单词拆分 代码&#xff1a; class Solution {public boolean wordBreak(String s, List<String> wordDict) {Set<String> set new HashSet<String>(wordDict);int n s.length();boolean[] dp new boolean[n1];dp[0] true;//初始…

C# 编写Windows服务程序

1.什么是windows服务&#xff1f; Microsoft Windows 服务&#xff08;即&#xff0c;以前的 NT 服务&#xff09;使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动&#xff0c;可以暂停和重新启动而且不显示任何用…

Ajax原理以及优缺点

Ajax原理 1.Ajax的原理简单来说是在用户和服务器之间加了—个中间层(AJAX引擎)&#xff0c;通过XmlHttpRequest对象来向服务器发异步请求&#xff0c; 2.从服务器获得数据&#xff0c;然后用javascript来操作DOM而更新页面。使用户操作与服务器响应异步化。 3.这其中最关键的一…

jmeter配置使用(mac)

前言 这篇文件就是一个笔记&#xff0c;非mac用户不用看了&#xff0c;我这是换了mac&#xff0c;要用jmeter的倒腾。 一、下载 二、使用步骤 1.解压 tgz格式的直接用tar命令就行 tar -zxvf 包名2.启动 一种是进入解压包的bin目录启动 这种方式启动的就是命令框不能关闭&am…

UDP分片与丢包,UDP真的比TCP高效吗?

一、UDP 报文格式 每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长&#xff08;2 字节&#xff09;字段组成&#xff0c;分别说明该报文的源端口、目的端口、报文长度和校验值。 UDP 报文格式如图所示。 UDP 报文中每个字段的含义如下&#xff1a; 源端…

[LCTF 2018]bestphp‘s revenge

文章目录 前置知识call_user_func()函数session反序列化PHP原生类SoapClient 解题步骤 前置知识 call_user_func()函数 把第一个参数作为回调函数调用 eg:通过函数的方式回调 <?php function barber($type){echo "you wanted a $type haircut, no problem\n";}c…

【人工智能Ⅰ】实验8:DBSCAN聚类实验

实验8 DBSCAN聚类实验 一、实验目的 学习DBSCAN算法基本原理&#xff0c;掌握算法针对不同形式数据如何进行模型输入&#xff0c;并结合可视化工具对最终聚类结果开展分析。 二、实验内容 1&#xff1a;使用DBSCAN算法对iris数据集进行聚类算法应用。 2&#xff1a;使用DBS…

感知机(perceptron)

一、感知机 1、相关概念介绍 感知机&#xff08;perceptron&#xff09;是二分类的线性分类模型&#xff0c;属于监督学习算法。输入为实例的特征向量&#xff0c;输出为实例的类别&#xff08;取1和-1&#xff09;。 2、&#xff08;单层&#xff09;感知机存在的问题 感知机…

自动化测试、压力测试、持续集成

因为项目的原因&#xff0c;前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api。下面将研究的成果展示给大家&#xff0c;希望对需要的人有所帮助。 SoapUI 是什么&#xff1f; SoapUI 是一个开源测试工具&#xff0c;通过 soap/http 来检查、调用、实现 Web Service …

【Jmeter】Jmeter基础5-Jmeter元件介绍之线程(用户)

2.5.1、线程组 一个线程组即一个虚拟用户组&#xff0c;线程组中的每个线程即为1个虚拟用户&#xff0c;每个线程互相隔离&#xff0c;互不影响参数说明&#xff1a; 在取样器错误后要执行的动作 继续&#xff1a;忽略错误&#xff0c;继续执行启动下一进程循环&#xff1a; 终…