Web 开发 06
坚持坚持坚持!!
今天,啊,0点过了,(7.24的学习)虽然课程视频进度没推进,但是自己学到了不少东西,特别好的体验,我觉得我在进步,真好!
1 Web 开发环境搭建与工具使用
- Webpack 配置与依赖管理
- 依赖安装与版本匹配:在项目初始化时,通过
npm install
命令安装所需依赖包。需特别注意版本兼容性,例如webpack
与webpack - dev - server
,webpack 5
建议搭配webpack - dev - server 4.x
及以上版本。若版本不兼容,可能在启动或构建时出现诸如unknown property
等报错。若遇到依赖相关问题,可先清除缓存(执行npm cache clean --force
),删除node_modules
文件夹,然后重新安装指定版本的依赖包。 - 配置文件编写:在
webpack.config.js
文件中,需精准配置多个关键部分。entry
用于指定项目的入口文件,例如entry: \'./src/index.js\'
;output
定义输出文件的路径和名称,如output: { path: path.resolve(__dirname, \'dist\'), filename: \'bundle.js\' }
。module.rules
数组用于配置不同类型文件的加载器,比如处理 CSS 文件,需配置css - loader
和style - loader
:
- 依赖安装与版本匹配:在项目初始化时,通过
javascript
module: { rules: [ { test: /\\.css$/, use: [\'style - loader\', \'css - loader\'] } ]}
- 模块解析与代码分离:Webpack 通过
resolve
配置项来指定如何解析模块路径。例如,可设置别名以简化模块导入,resolve: { alias: { \'@\': path.resolve(__dirname,\'src\') } }
。在代码分离方面,有多种策略。入口点分离是将代码按入口点拆分,每个入口点生成一个单独的bundle
文件;代码拆分可按功能模块拆分,将不同模块拆分成不同bundle
文件;动态导入使用import()
语句,只有在需要时才加载对应模块;懒加载可借助React.lazy()
(React 项目)或Vue.lazy()
(Vue 项目)等方法实现,在 Webpack 配置中,还需在optimization.splitChunks
中开启相关功能并设置合适参数,如cacheGroups
和maxSize
等,以此减少初始bundle
文件大小,提升页面加载速度。
- 开发服务器启动与端口管理
- 启动命令与参数设置:常见的启动 Web 开发服务器的方式,如使用
webpack - dev - server
,在package.json
的scripts
字段中配置启动命令,如\"dev\": \"webpack - dev - server --config webpack.config.js --mode development --port 5050\"
,这里的--port 5050
指定了服务器运行的端口为 5050。 - 端口占用处理:若启动服务器时提示端口被占用(如
EADDRINUSE
错误),在 Windows 系统下,可通过命令netstat -ano | findstr 端口号
来查找占用该端口的进程,随后在任务管理器中找到对应进程 ID 并结束进程;在 Linux 系统中,使用lsof -i:端口号
命令定位占用进程,再通过kill 进程ID
终止进程。或者直接修改启动命令或配置文件中的端口号,更换为其他未被占用的端口,如从 5050 改为 5052。同时,要确保防火墙规则允许新端口的通信,在 Windows 中可在 “高级安全 Windows 防火墙” 里添加入站规则,允许指定端口的流量通过。
- 启动命令与参数设置:常见的启动 Web 开发服务器的方式,如使用
- 开发工具的使用与调试
- 浏览器开发者工具:现代浏览器(如 Chrome、Firefox、Edge)的开发者工具(通常按 F12 或右键点击页面选择 “检查” 打开)是强大的调试利器。其中,Network 面板可监控网络请求和响应。在后端开发中,它能帮助开发者查看 API 请求详情,包括前端发送到后端的请求头(如
Content - Type
、Authorization
等)、请求负载(如Form Data
或JSON
格式的数据);查看 API 响应,如后端返回的数据、状态码、响应头(如Content - Type
、Set - Cookie
等),还能通过时间分析功能(如 Blocking、Initial Connection、Request Sent、Waiting (TTFB)、Content Download 等阶段耗时)识别性能瓶颈。例如,在调试基于 Token 的认证(如 JWT)时,可在 Network 面板中查看发往受保护 API 路径(如/api/protected/
)的请求,确认请求头包含正确的Authorization: Bearer
,并查看响应状态码和内容,验证认证是否成功(401 Unauthorized 表示认证失败)。此外,Console 面板可用于执行 JavaScript 代码,查看前端日志、错误信息,也可执行自定义代码进行 API 调用测试等,有助于理解前端逻辑和调试集成问题。 - 其他调试工具:如 Charles 抓包工具,它专注于捕获 HTTP 和 HTTPS 请求。通过将其配置为代理,可捕获浏览器、移动应用和 API 接口的所有网络请求,实时查看请求和响应数据,支持 SSL 代理,能解密 HTTPS 流量。其功能包括断点调试(可在请求发送前或响应返回前修改数据)、带宽模拟(模拟不同网络环境,如 2G、3G、4G 等,测试应用在不同网络速度和延迟下的表现)、请求重写(可根据正则表达式修改请求和响应数据,模拟不同场景,验证 API 接口在不同输入条件和权限下的行为),还支持 iOS 和 Android 设备及模拟器的抓包,在 API 调试和性能优化方面具有显著优势,与 Wireshark(适合深入分析网络协议,界面复杂)、Fiddler(更适用于 Windows 平台)相比,Charles 界面简洁且跨平台支持广泛。
- 浏览器开发者工具:现代浏览器(如 Chrome、Firefox、Edge)的开发者工具(通常按 F12 或右键点击页面选择 “检查” 打开)是强大的调试利器。其中,Network 面板可监控网络请求和响应。在后端开发中,它能帮助开发者查看 API 请求详情,包括前端发送到后端的请求头(如
2 Google OAuth 登录集成
- Google Cloud 控制台配置
- 创建项目与启用 API:在 Google Cloud 控制台(https://console.cloud.google.com/ )创建新项目,然后在 “API 和服务” 中启用
Google+ API
(虽部分功能已弃用,但部分旧登录逻辑依赖)以及Google Identity Platform
,若未启用可能导致登录失败。 - OAuth 同意屏幕设置:配置 OAuth 同意屏幕,填写应用名称、支持的用户类型等信息。若选择 “测试用户” 模式,需在 “测试用户” 列表中添加可登录的 Google 账号,否则非测试用户登录时可能卡在加载页面或出现权限相关错误。若要开放给所有 Google 账号登录,需提交应用审核或设置为 “内部”。
- 创建 OAuth 客户端 ID:在 “凭据” 页面创建 OAuth 客户端 ID,选择应用类型(如 Web 应用),在 “已获授权的 JavaScript 来源” 中填入前端项目的访问地址(如
http://localhost:5052
),在 “已获授权的重定向 URI” 中添加登录成功后的回调地址(如http://localhost:5052/auth/google/callback
),确保与前端代码中的配置完全一致,否则会报redirect_uri_mismatch
错误。生成的客户端 ID(形如309524924900 - 7ko7bg94ekkpjk2mir6dtsg2g58hnli9.apps.googleusercontent.com
)需准确记录,用于前端和后端代码配置。
- 创建项目与启用 API:在 Google Cloud 控制台(https://console.cloud.google.com/ )创建新项目,然后在 “API 和服务” 中启用
- 前端代码集成
- 安装与配置登录组件:若使用 React 项目,可安装
@react - oauth/google
库来实现 Google 登录功能。在代码中引入GoogleLogin
组件,并配置clientId
属性,确保其值与 Google Cloud 控制台生成的客户端 ID 一致,如console.log(\'登录成功\', response)} onError={() => console.log(\'登录失败\')} />
。同时,需配置onSuccess
和onError
回调函数,在onSuccess
中可处理登录成功后的逻辑,如获取用户信息、存储登录状态等;onError
中可处理登录失败的情况,如提示用户。 - 回调处理与路由配置:确保前端路由配置了处理 Google 登录回调的路径,例如使用 React Router 时,需添加类似
的路由,在
GoogleCallbackComponent
组件中处理 Google 返回的id_token
等信息,与后端进行会话关联等操作。若回调处理不当,可能导致登录后一直转圈,无法完成登录流程。
- 安装与配置登录组件:若使用 React 项目,可安装
- 调试与问题排查
- 网络请求分析:使用浏览器开发者工具的 Network 面板,筛选
accounts.google.com
相关请求。重点检查请求参数中的client_id
和redirect_uri
是否正确,确保client_id
与 Google Cloud 控制台配置一致,redirect_uri
与前端访问地址及 Google Cloud 控制台的 “已获授权的重定向 URI” 一致。查看响应状态码,200
或302
为正常,若出现400
(如400 Bad Request
)、403
(403 Forbidden
)等错误,需排查配置问题。对于重定向的请求,检查Location
字段,确认跳转地址是否正确指向本地项目的回调路径。若请求被浏览器拦截(表现为 Network 面板中看不到相关请求或请求状态显示(pending)
),可尝试禁用浏览器插件(如广告拦截器、隐私扩展),或使用无痕模式。 - 缓存与 Cookie 清理:浏览器缓存的旧登录态或错误配置可能干扰登录流程。可在浏览器开发者工具的 Application 面板中,清空
Local Storage
、Session Storage
、Cookies
(针对当前域名,如localhost:5052
),然后硬刷新页面(Ctrl + Shift + R
或Cmd + Shift + R
),重新触发 Google 登录,看是否能解决问题。
- 网络请求分析:使用浏览器开发者工具的 Network 面板,筛选
3 环境迁移与项目部署(待办)
- 虚拟机环境搭建与使用
- 虚拟机工具选择与安装:常用的虚拟机工具如 VirtualBox(免费)和 VMware Workstation Player(个人免费版),可根据个人喜好选择。以 VirtualBox 为例,从其官网下载安装程序,按提示完成安装。安装完成后,打开 VirtualBox,可创建新的虚拟机。
- Ubuntu 系统安装:去 Ubuntu 官网(ubuntu.com)下载对应版本的 ISO 文件,如 Ubuntu 22.04 LTS(长期支持版更稳定)。在 VirtualBox 中创建虚拟机时,选择下载好的 Ubuntu 镜像文件,根据向导设置虚拟机的内存、硬盘空间等参数,启动虚拟机后按提示完成 Ubuntu 系统的安装。安装完成后,可通过命令行界面进行操作,如更新系统软件包(执行
sudo apt update && sudo apt upgrade
)。 - 项目迁移到虚拟机:若要将 Web 项目迁移到虚拟机中的 Ubuntu 环境,首先确保项目依赖的运行环境已安装,如项目使用 Node.js,可通过
sudo apt install nodejs npm
安装。然后,通过 Git 克隆代码仓库(git clone
)将项目代码获取到虚拟机中,若项目依赖一些特定的软件包,进入项目目录后,根据项目技术栈安装依赖,如 Python 项目使用pip install -r requirements.txt
,Node.js 项目使用npm install
。接着,根据项目需求修改配置文件,如数据库连接字符串、服务器端口、环境变量等,最后使用相应命令启动项目,如 Python 项目若使用 Flask 框架,运行python app.py
;Node.js 项目若使用 Express 框架,运行node app.js
。
- 数据库迁移与配置
- MongoDB 数据迁移:如果项目使用 MongoDB 数据库且需要保留数据,在原环境中使用
mongodump --db 数据库名 --out 备份路径
命令导出数据,通过 SCP(Secure Copy Protocol)或共享文件夹等方式将备份文件传输到虚拟机中。在虚拟机的 MongoDB 中,使用mongorestore --db 数据库名 备份路径/数据库名
命令导入数据。若原数据无需保留,或虚拟机中需要全新的 MongoDB 版本(与原版本不兼容),则在虚拟机中直接安装新的 MongoDB(sudo apt install mongodb
或通过官网教程安装对应版本),安装完成后,重新初始化数据库、创建集合和索引等操作。 - 数据库配置调整:在虚拟机环境中,根据项目的新部署需求,可能需要调整数据库的配置。例如,修改 MongoDB 的配置文件(通常位于
/etc/mongod.conf
),配置绑定的 IP 地址(确保项目能正确访问)、端口号(默认为 27017,若有冲突可修改)等参数。修改完成后,重启 MongoDB 服务(sudo systemctl restart mongodb
)使配置生效。
- MongoDB 数据迁移:如果项目使用 MongoDB 数据库且需要保留数据,在原环境中使用
- 项目部署与优化
- 部署流程与工具使用:若使用 GitHub 进行项目管理和部署,在虚拟机中可重新执行
git clone
获取最新代码。如果之前使用 GitHub Actions 自动化部署,只需修改部署脚本中的 “目标环境” 配置,将部署目标从原服务器改为虚拟机的 IP 地址和端口。例如,若原部署脚本中目标服务器地址为192.168.1.100:80
,现在需改为虚拟机的地址,如192.168.56.101:3000
(假设虚拟机 IP 和项目运行端口为这些值)。同时,若涉及密钥或权限相关配置,如 GitHub 的 SSH 密钥,需要在虚拟机中重新生成密钥对(ssh - keygen -t rsa -b 4096 -C \"your_email@example.com\"
),并将公钥添加到 GitHub 账户中,确保能正常从 GitHub 拉取代码或进行自动化部署。 - 性能优化与监控:在项目部署到虚拟机后,可使用工具进行性能优化和监控。例如,对于 Node.js 项目,可使用
pm2
进程管理器来管理项目进程,它能实现自动重启、负载均衡等功能,提升项目的稳定性和性能。安装pm2
后(npm install -g pm2
),使用pm2 start app.js
(假设项目启动文件为app.js
)启动项目。同时,可通过一些监控工具,如New Relic
、Datadog
等,对项目的性能指标(如 CPU 使用率、内存占用、响应时间等)进行监控,根据监控数据对项目进行优化,如优化数据库查询语句、调整代码逻辑以减少资源消耗等。
- 部署流程与工具使用:若使用 GitHub 进行项目管理和部署,在虚拟机中可重新执行
4 经验小结
一、开发环境与工具配置
-
Webpack 与依赖管理
- 依赖版本兼容性是关键:
webpack
、webpack-dev-server
、css-loader
等工具需版本匹配(如webpack 5
搭配webpack-dev-server 4.x
),版本不兼容会导致启动报错(如unknown property
)。 - 解决依赖问题的通用步骤:清除缓存→删除
node_modules
→重新安装指定版本→检查配置文件是否符合最新 API。
- 依赖版本兼容性是关键:
-
端口占用与服务启动
- 端口被占用(
EADDRINUSE
)时,可通过netstat
/taskkill
(Windows)终止进程,或直接修改配置文件 / 启动命令更换端口(如从 5050 改到 5052)。
- 端口被占用(
二、Google OAuth 登录集成核心要点
-
配置一致性是前提
client_id
必须与 Google Cloud 控制台的 OAuth 客户端 ID 完全一致,且需在前端登录组件(如GoogleLogin
)中正确引用。- 重定向 URI(
redirect_uri
)需严格匹配:前端访问地址(如http://localhost:5052
)必须添加到 Google Cloud 控制台的 “已获授权的重定向 URI” 中,否则会报redirect_uri_mismatch
。
-
调试技巧:网络请求分析
- 用浏览器开发者工具的 Network 面板筛选
accounts.google.com
请求,重点看:- 请求参数中的
client_id
和redirect_uri
是否正确; - 响应状态码(如
200
/302
为正常,400
/403
需排查配置); - 重定向的
Location
地址是否指向本地项目。
- 请求参数中的
- 用浏览器开发者工具的 Network 面板筛选
-
常见登录故障排查
- 登录 “转圈” 但无报错:多为回调未被前端正确处理(如路由未配置
/auth/callback
)或网络 / 代理拦截(可换浏览器 / 无痕模式测试)。 - 测试用户限制:未验证的 Google Cloud 项目仅允许 “测试用户” 登录,需在控制台添加对应账号。
- 登录 “转圈” 但无报错:多为回调未被前端正确处理(如路由未配置
三、环境迁移与项目部署
-
虚拟机环境的适用场景
- 当本地环境(如 Windows)出现难以解决的兼容性问题(如依赖 Linux 的工具),可通过虚拟机(如 VirtualBox+Ubuntu)搭建隔离环境,避免影响主系统。
- 虚拟机中部署项目的核心步骤:安装依赖→克隆代码→配置环境变量→启动服务,无需重复配置开发工具(如 VS Code 可通过远程连接操作)。
-
项目迁移注意事项
- 数据迁移:如 MongoDB 数据可通过
mongodump
/mongorestore
迁移,避免重复创建数据。 - 配置同步:GitHub 仓库、环境变量(如
GOOGLE_CLIENT_ID
)需在新环境中重新配置,确保与原项目一致。
- 数据迁移:如 MongoDB 数据可通过
四、通用开发经验
- 分步排查问题:遇到报错时,先定位具体环节(如编译报错→查依赖;登录问题→查配置 / 网络),再逐步缩小范围(如从工具到代码,从本地到服务端)。
- 利用官方文档:Google Cloud、Webpack 等工具的官方文档是解决配置问题的权威参考,比盲目试错更高效。
- 环境隔离的必要性:当本地环境复杂或存在冲突时,虚拟机 / 容器(如 Docker)是快速搭建干净环境的有效手段,尤其适合测试兼容性。
这些经验不仅能解决当前项目的问题,也适用于其他第三方登录集成(如 Facebook、GitHub 登录)和 Webpack 项目开发,核心逻辑都是 “保证配置一致 + 善用调试工具 + 分步排查”。