当前位置: 首页 > news >正文

webpack指南(项目篇)——webpack在项目中的运用

系列文章目录

webpack指南(基础篇)——手把手教你配置webpack
webpack指南(优化篇)——webpack项目优化


文章目录

  • 系列文章目录
  • 前言
  • 一、配置拆分
  • 二、修改启动命令
  • 三、定义环境变量
  • 四、配置路径别名
  • 总结


前言

前面我们对webpack的基本使用进行了简单的介绍,今天我们来一起总结下webpack在项目中的使用。


一、配置拆分

日常开发时,我们可能有多个环境,比如开发环境,测试环境,生产环境;这些环境使用的webpack配置往往是不一样的,我们需要对不同的环境采用不同的配置文件;

我们拿之前的项目简单进行一个改造:

1.新建webpack.default.config.js/webpack.config.prod.js/webpack.config.dev.js分别表示默认/开发/生产环境下的配置文件;
在这里插入图片描述
2.按照使用场景修改配置文件:
2.1 devServer移动至webpack.config.dev.js;
2.2 webpack.config.prod.js的mode修改为production;
3.通过webpack-merge把默认的配置文件与生产开发配置文件关联起来

// 安装webpack-merge
yarn add webpack-merge -D

webpack.config.prod.js修改如下:

// 导入merge
const { merge } = require('webpack-merge');
// 导入默认配置
const defaultConfig = require('./webpack.default.config');
// 合并配置
module.exports = merge(defaultConfig, {mode: 'production',//   生产环境生成调试代码devtool: 'source-map',
});

webpack.config.dev.js修改如下:

const path = require('path');
// 导入merge
const { merge } = require('webpack-merge');
// 导入默认配置
const defaultConfig = require('./webpack.default.config');
// 合并配置
module.exports = merge(defaultConfig, {devServer: {// 配置目录static: {directory: path.join(__dirname, 'dist'),},// 端口号port: 9000,},
});

二、修改启动命令

我们已经完成了配置文件的拆分,下一步我们需要修改启动命令,让命令与配置文件关联起来;

// 通过-c声明启动文件 运行时使用开发配置 打包时使用生产配置
"scripts": {"build": "webpack -c ./webpack.config.prod.js","serve": "webpack serve -c ./webpack.config.dev.js --open"},

三、定义环境变量

项目中开发和生产环境往往使用的是不同的请求地址和端口号,我们在配置的时候需要动态的去获取,不能固定写死,这个时候就需要用到环境变量了;

1.webpack环境变量

webpack 命令行 环境配置 的 --env 参数,可以允许你传入任意数量的环境变量。而在 webpack.config.js 中可以访问到这些环境变量。例如,–env production 或 --env goal=local。

简单来说就是webpack 命令通过–env传入参数,在配置文件中就可以获取到:

// 修改启动命令
"serve": "webpack serve -c ./webpack.config.dev.js --open --env port=7777"
// 修改配置文件
module.exports = (env) => {return merge(defaultConfig(env), {devServer: {// 配置目录static: {directory: path.join(__dirname, 'dist'),},// 端口号 通过env.port获取port: env.port || 9000,},});
};

看下效果:
在这里插入图片描述
2.系统环境变量
除了这一种方式,我们还可以通过声明系统环境变量的方式来区分:

// 注意这里linux和mac的桥启动命令不一样
"serve": "set PORT=5555 && webpack serve -c ./webpack.config.dev.js"
// 获取端口号
port: process.env.PORT || 9000,

在这里插入图片描述
效果是可以实现的,但是实际开发中配置参数有很多,总不能全部写在一行吧,我们需要把配置写在参数表里,启动时候访问参数表;
3.抽离配置参数

我们使用doenv来实现

// 安装yarn add dotenv --save

新建两个文件
在这里插入图片描述
以开发环境为例,在.env.development中写入配置

ENV = 'development'#修改端口
port = 4567

修改webpack.config.dev.js

// 引入doenv加载根目录的.env文件去注入环境变量
require('dotenv').config({ path: './.env.development' });
// 端口号改写为这种形式
port: process.env.port || 9000,

ok,大功告成
在这里插入图片描述

四、配置路径别名

在vue项目中我们经常使用@作为路径别名,我们今天来了解下是怎么做的

    // 配置路径别名resolve: {alias: {'@': path.resolve(__dirname, 'src'),},// 忽略后缀extensions: ['.js', '.jsx'],},};

总结

截至到这里,关于webpack的配置基本已经介绍完了。本系列文章旨在分析webpack各类配置项的配置方法,力求做到开发过程中能自己进行修改,并不需要我们从头去搭建项目。因为实际使用的时候vue-cli已经集成了大部分webpack的功能,已经可以做到开箱即用了;
后续会逐步更新开发自定义loader,plugin和cli,欢迎持续关注~

相关文章:

webpack指南(项目篇)——webpack在项目中的运用

系列文章目录 webpack指南(基础篇)——手把手教你配置webpack webpack指南(优化篇)——webpack项目优化 文章目录系列文章目录前言一、配置拆分二、修改启动命令三、定义环境变量四、配置路径别名总结前言 前面我们对webpack的基…...

unicode字符集与utf-8编码的区别,unicode转中文工具、中文转unicode工具(汉字)

在cw上报的报警信息中,有一个name字段的值是\u4eba\u4f53 不知道是啥,查了一下,是unicode编码,用下面工具转换成汉字就是“人体” 参考文章:https://tool.chinaz.com/tools/unicode.aspx 那么我很好奇,uni…...

3D数学系列之——再谈特卡洛积分和重要性采样

目录一、前篇文章回顾二、积分的黎曼和形式三、积分的概率形式(蒙特卡洛积分)四、误差五、蒙特卡洛积分计算与收敛速度六、重要性采样七、重要性采样方法和过程八、重要性采样的优缺点一、前篇文章回顾 在前一篇文章3D数学系列之——从“蒙的挺准”到“蒙…...

Python错误 TypeError: ‘NoneType‘ object is not subscriptable解决方案汇总

目录前言一、引发错误来源二、解决方案2-1、解决方案一(检查变量)2-2、解决方案二(使用 [] 而不是 None)2-3、解决方案三(设置默认值)2-4、解决方案四(使用异常处理)2-5、解决方案五…...

VMware空间不足又无法删除快照的解决办法

如果因为快照删除半路取消或者失败,快照管理器就不再显示这个快照,但是其占用的空间还在,最终导致硬盘不足。 可以百度到解决方案,就是在快照管理器,先新建一个,再点删除,等待删除完成就可以将…...

类和对象(一)

类和对象(一) C并不是纯面向对象语言 C是面向过程和面向对象语言的! 面向过程和面向对象初步认识: C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基…...

Java 不同路径

不同路径中等一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径&#xff1f…...

【SAP PO】X-DOC:SAP PO 接口配置 REST 服务对接填坑记

X-DOC:SAP PO 接口配置 REST 服务对接填坑记1、背景2、PO SLD配置3、PO https证书导入1、背景 (1)需求背景: SAP中BOM频繁变更,技术人员在对BOM进行变更后,希望及时通知到相关使用人员 (2&…...

最新研究!美国爱荷华州立大学利用量子计算模拟原子核

爱荷华州立大学物理学和天文学教授James Vary(图片来源:网络)美国爱荷华州立大学物理学和天文学教授James Vary和来自爱荷华州立大学、马萨诸塞州塔夫茨大学,以及美国能源部加利福尼亚州劳伦斯伯克利国家实验室的研究人员&#xf…...

零入门kubernetes网络实战-22->基于tun设备实现在用户空间可以ping通外部节点(golang版本)

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 本篇文章主要是想做一个测试: 实现的目的是 希望在宿主机-1上,在用户空间里使用ping命令发起ping请求,产生的icmp类型的…...

web安全——Mybatis防止SQL注入 ssrf漏洞利用 DNS污染同源策略

目录 0x01 Mybatis防止SQL注入 0x02 sqlmap中报错注入判断 0x03 ssrf漏洞利用 0x04 SSRF重绑定 0x05 DNS污染...

smp_init过程解析

当你看到这样的log,会不会很慌张?竟然由CPU没有启动成功,除了什么故障?本文将结合我遇到的一个问题,将启动过程中bringup secondary cpu的过程分析一下。smp_init代码如下:602 void __init smp_init(void) …...

判断推理之逻辑判断

考点一翻译推理(一)题目特征题干或选项中出现多组“逻辑关联词”,如:“如果……那么……”、“只要……就……”、“只有……才……”、“所有”、“有些”、“……且……”、“ ……或……”等典型逻辑关联词。(二&am…...

2023金三银四常见Handler面试总结,附带答案

以下的Handler的面试题都是在面试过程中总结出来比较常见的面试题,现在分享给大家,希望可以帮助你们!1.Handler的实现原理从四个方面看Handler、Message、MessageQueue 和 Looper Handler:负责消息的发送和处理 Message:消息对象,…...

为什么机器人操作系统ROS1、ROS2这么难学

AI回复:ROS1、ROS2是机器人操作系统,涉及到很多复杂的概念和技术,需要有一定的编程和机器人知识基础才能学习。此外,ROS1和ROS2的架构和设计也有很大的不同,需要花费一定的时间和精力去学习和适应。但是,一…...

day01

授课老师 :陶国荣 联系方式 : taogrtedu.cn 授课阶段 : Web前端基础 授课内容 : HTML CSS JavaScript 文章目录一、讲师和课程介绍二、Web前端介绍1. 什么是网页2. 网页的组成3. 网页的优势4. 开发前的准备三、 HTML语法介绍…...

第四十章 linux-并发解决方法五(顺序锁seqlock)

第四十章 linux-并发解决方法四(顺序锁seqlock) 文章目录第四十章 linux-并发解决方法四(顺序锁seqlock)顺序锁的设计思想是,对某一共享数据读取时不加锁,写的时候加锁。为了保证读取的过程中不会因为写入名…...

【SPSS】交叉设计方差分析和协方差分析详细操作教程(附案例实战)

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 方差分析概述 交叉设计方差分析...

playwright--核心概念和Selector定位

文章目录前言一、浏览器二、浏览器上下文三、页面和框架四、Selectors1、data-test-id selector2、CSS and XPath selector3、text 文本selector4、id定位selector5、Selector 组合定位五、内置Selector前言 Playwright提供了一组API可自动化操作Chromium,Firefox和…...

响应式操作实战案例

Project Reactor 框架 在Spring Boot 项目 Maven 中添加依赖管理。 <dependency><groupId>io.projectreactor</groupId><artifactId>reactor-core</artifactId> </dependency><dependency><groupId>io.projectreactor</g…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...