Webpack学习笔记(5)

embedded/2024/12/27 2:17:47/

1.拆分开发环境和生产环境配置

很多配置在开发环境和生产环境存在不一致的情况,比如开发环境没有必要设置缓存,生产环境需要设置公共路径等等。

2.公共路径

使用publicPath配置项,可以通过它指定应用程序中所有资源的基础路径

webpack.config.js中output增加publicPath:

打开app.html发现每个路径前多了一个域名,这个域名可以指定为前端域名或cdn服务器域名都可以:

3.环境变量

环境变量可以帮我们消除webpack.config.js配置文件中的开发环境和生产环境的差异。

调整webpack.config.js为函数形式,并且将mode修改为通过env进行传参;

当需要使用生产环境时:npx webpack --env production

使用terser-webpack-plugin 对script文件进行压缩;

安装:npm install terser-webpack-plugin -D

配置一下:

执行npx webpack --env production后代码会被打包压缩生成LICIENCE文件;

执行npx webpack --env development后没有被压缩;

4.拆分配置文件

如果都用判断的方法来区分生产和开发环境,很麻烦,所以将配置文件拆分为两个,专门应对两个环境。

创建一个config文件夹,分别存放两个js文件对应两个环境:

在开发环境将mode设置为‘development’,去除不需要的一些插件例如压缩、公共域名等;

在生产环境将mode设置为‘production’,去除不需要的一些插件例如dev-server等;

运行时指定配置文件 npx webpack -c ./config/webpack.config.prod.js或 npx webpack -c ./config/webpack.config.dev.js即可。

5.npm脚本

每次打包或者启动服务时,要在命令行输入很长的命令,如何优化

在package.json中配置script:

这样就可以直接执行npm run start和npm run build.

如果想要隐藏一些性能提示信息,可以在performance中配置:

6.提取公共配置

生产环境和开发环境分开配置后发现,会有大量重复的代码,可否抽离到一个配置文件,作为公共配置?

创建一个config文件夹下分别放三个js文件:公共、开发、生产

webpack.config.common.js中存放二者共有的代码;其余两个环境js文件保留自己特有的代码。

简化后的webpack-config-dev.js:

简化后的webpack-config-prod.js:

然后在config文件夹下的webpack.config.js中合并环境配置,使用webpack-merge

通过env携带参数指定环境配置,所以package.json脚本中也要修改:

tips:

开发环境

  • 目标是快速开发和调试,配置注重灵活性和调试能力。
  • 使用未优化的代码和资源,支持本地开发工具和代理。

构建工具配置

  • 使用 webpack-dev-server 或类似工具,提供实时重新加载和热更新。
  • 使用 Source Maps 来帮助调试(如 devtool: 'eval-source-map')。
  • 不进行代码压缩和优化,保留原始代码结构以便调试。

静态资源处理

  • 直接提供未优化的静态资源(如图片、字体),不进行压缩或其他处理。
  • 使用 publicPath: '/' 或自定义路径来提供静态文件。

API 请求

  • 使用代理(如 webpack-dev-server 的 proxy 配置)将请求转发到本地或远程开发服务器。
  • 可能使用 Mock API 来模拟数据。

日志与调试

  • 启用详细的日志输出(如 console.log 和调试信息)。
  • 使用开发工具(如 Chrome DevTools)来调试代码。

依赖管理

  • 安装所有依赖(包括开发依赖和生产依赖)。
  • 可能使用未发布的库或本地构建的工具。

生产环境

  • 目标是高性能、稳定性和安全性,配置注重优化和保护。
  • 使用压缩、混淆、缓存和 CDN 等技术提升用户体验。

构建工具配置

  • 使用 Webpack 或其他构建工具进行代码压缩(如 TerserPlugin)、混淆和优化。
  • 禁用 Source Maps(或生成生产环境专用的 Minified Source Maps)。
  • 使用 Tree Shaking 和 Code Splitting 来减少代码体积和加载时间。
  • 对静态资源进行优化(如图片压缩、字体转 WebP)并上传到 CDN。

静态资源处理

  • 使用缓存控制(如 Cache-Control 头部)来提升资源加载速度。
  • 配置 publicPath: '/static/' 或 CDN 路径。

API 请求

  • 直接请求真实的 API 服务器,可能需要配置 HTTPS 和 CORS。
  • 优化 API 请求(如使用 GraphQL 或合并请求)以减少延迟。

日志与调试

  • 移除或禁用所有调试代码(如删除 console.log)。
  • 使用错误日志记录工具(如 Sentry、ELK)来监控和分析生产环境的问题。

依赖管理

  • 只安装生产依赖(如 npm install --production)。
  • 使用经过测试和稳定的依赖库。

http://www.ppmy.cn/embedded/149059.html

相关文章

SpringBoot3——基础特性

SpringApplication 自定义banner 类路径添加banner.txt或设置spring.banner.location就可以定制banner推荐网站:Spring Boot banner 在线生成工具,制作下载英文 banner.txt,修改替换 banner.txt 文字实现自定义,个性化启动 bann…

【Spring】Spring的模块架构与生态圈—Spring Boot、Spring Cloud与Spring Security

随着互联网的发展,企业对快速开发和高可用性的需求不断增加,Spring生态系统(包括Spring Boot、Spring Cloud和Spring Security)应运而生,为Java开发提供了强大的支持。 在实际应用中,Spring Boot使得开发者…

【git】git命令

目录 1. 在当前目录下创建一个新的git仓库2. 克隆一个远程仓库到本地3. 显示工作目录和暂存区的状态4. 将文件添加到暂存区,准备提交5. 将暂存区的文件提交到本地仓库6. 显示提交历史记录7.版本回退8.查所有操作记录(包括删除记录)9.添加文件到忽略列表10.列出所有本…

【理解机器学习中的过拟合与欠拟合】

在机器学习中,模型的表现很大程度上取决于我们如何平衡“过拟合”和“欠拟合”。本文通过理论介绍和代码演示,详细解析过拟合与欠拟合现象,并提出应对策略。主要内容如下: 什么是过拟合和欠拟合? 如何防止过拟合和欠拟…

运动控制卡网络通讯的心跳检测之C#上位机编程

本文导读 今天,正运动小助手给大家分享一下如何使用C#上位机编程实现运动控制卡网络通讯的心跳检测功能。 01 ECI2618B硬件介绍 ECI2618B经济型多轴运动控制卡是一款脉冲型、模块化的网络型运动控制卡。控制卡本身最多支持6轴,可扩展至12轴的运动控制…

芯科科技蓝牙、Wi-Fi、Wi-SUN产品广获业界认可,技术创新引领行业潮流

物联网领军企业领跑未来无线开发平台发展 2024年,Silicon Labs(亦称“芯科科技“,NASDAQ:SLAB)在物联网(IoT)领域持续深耕,凭借创新的企业发展理念与实践、行业领先的技术与产品&am…

No.27 笔记 | RCE远程命令执行基础

一、RCE概述 (一)定义 RCE指攻击者可以通过远程方式在目标系统上执行恶意代码的漏洞或攻击技术,范围广泛,包括代码执行、文件包含、反序列化、命令执行、写文件Getshell等情况。 (二)危害 攻击者可继承…

云手机群控能用来做什么?

随着云手机的发展,云手机群控技术逐渐从小众的游戏多开工具,发展为涵盖多个领域的智能操作平台。不论是手游搬砖、短视频运营,还是账号养成等场景,云手机群控都展现出了强大的应用潜力。本文将为大家详细解析云手机群控的应用场景…