<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/scripts/pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:h="http://www.w3.org/TR/html4/"><channel><title>鲸鱼的博客</title><description>鲸鱼在游泳的博客</description><link>https://blog.toolplus.vip</link><item><title>windows电脑快速实现对手机抓包-安卓篇</title><link>https://blog.toolplus.vip/blog/2026-07-14-windows%E7%94%B5%E8%84%91%E5%BF%AB%E9%80%9F%E5%AE%9E%E7%8E%B0%E5%AF%B9%E6%89%8B%E6%9C%BA%E6%8A%93%E5%8C%85-%E5%AE%89%E5%8D%93%E7%AF%87</link><guid isPermaLink="true">https://blog.toolplus.vip/blog/2026-07-14-windows%E7%94%B5%E8%84%91%E5%BF%AB%E9%80%9F%E5%AE%9E%E7%8E%B0%E5%AF%B9%E6%89%8B%E6%9C%BA%E6%8A%93%E5%8C%85-%E5%AE%89%E5%8D%93%E7%AF%87</guid><description>### 一、基础环境配置（Charles 端）</description><pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;windows电脑快速实现对手机抓包-安卓篇&lt;/h1&gt;
&lt;h3&gt;一、基础环境配置（Charles 端）&lt;/h3&gt;
&lt;p&gt;无论目标设备是什么 Android 版本，首先完成电脑端 Charles 的基础配置：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装 Charles 根证书到电脑&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Help&lt;/code&gt; → &lt;code&gt;SSL Proxying&lt;/code&gt; → &lt;code&gt;Install Charles Root Certificate&lt;/code&gt; → 安装到「受信任的根证书颁发机构」&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启用 SSL 代理&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Proxy&lt;/code&gt; → &lt;code&gt;SSL Proxying Settings&lt;/code&gt; → 勾选 &lt;strong&gt;Enable SSL Proxying&lt;/strong&gt;&lt;br&gt;
添加规则：Host 填 &lt;code&gt;*&lt;/code&gt;，Port 填 &lt;code&gt;443&lt;/code&gt;（或 &lt;code&gt;*&lt;/code&gt; 捕获全部端口）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;查看代理地址&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Help&lt;/code&gt; → &lt;code&gt;Local IP Address&lt;/code&gt; 查看电脑 IP，Charles 默认端口为 &lt;code&gt;8888&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;二、Android设备&lt;/h3&gt;
&lt;p&gt;如果设备系统低于 Android 7.0，只需安装证书到&lt;strong&gt;用户目录&lt;/strong&gt;即可：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;手机与电脑同 WiFi，设置代理为电脑 IP + 8888&lt;/li&gt;
&lt;li&gt;手机浏览器访问 &lt;code&gt;chls.pro/ssl&lt;/code&gt;，下载并安装证书&lt;/li&gt;
&lt;li&gt;Charles 弹出 Allow 请求时点击允许，即可抓取 HTTPS（包括 WebView）&lt;/li&gt;
&lt;/ol&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>Mac M3 用 Chrome DevTools 调试安卓真机网页</title><link>https://blog.toolplus.vip/blog/2026-01-22-mac-m3-chrome-devtools-%E8%B0%83%E8%AF%95%E5%AE%89%E5%8D%93%E7%9C%9F%E6%9C%BA%E7%BD%91%E9%A1%B5</link><guid isPermaLink="true">https://blog.toolplus.vip/blog/2026-01-22-mac-m3-chrome-devtools-%E8%B0%83%E8%AF%95%E5%AE%89%E5%8D%93%E7%9C%9F%E6%9C%BA%E7%BD%91%E9%A1%B5</guid><description>最简四步教程：Mac 连接安卓手机，用 Chrome DevTools 实时调试手机上的网页样式</description><pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;1. 手机开启开发者选项&lt;/h2&gt;
&lt;p&gt;打开「设置 → 关于手机」，狂点&lt;strong&gt;版本号 7 下&lt;/strong&gt;，开启「开发者选项」。&lt;/p&gt;
&lt;p&gt;进入开发者选项，打开：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;USB 调试&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;USB 调试（安全设置）&lt;/strong&gt;（有的话也打开）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Mac 安装 ADB 工具&lt;/h2&gt;
&lt;p&gt;终端运行一行命令：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;brew install android-platform-tools
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;没装 Homebrew？访问 https://brew.sh 先装一下。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;3. 连接手机&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;用数据线连接手机和 Mac&lt;/li&gt;
&lt;li&gt;手机弹出「允许这台电脑调试」→ 点&lt;strong&gt;允许&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;终端验证连接：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;adb devices
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;出现类似 &lt;code&gt;XXXXXXXX device&lt;/code&gt; 就成功了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://imgs.shuxitech.com/image-20260317161544781.png&quot; alt=&quot;image-20260317161544781&quot;&gt;&lt;/p&gt;
&lt;h2&gt;4. Chrome 开始调试&lt;/h2&gt;
&lt;p&gt;电脑 Chrome 打开：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chrome://inspect
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你手机上打开的网页会直接显示出来，点 &lt;strong&gt;inspect&lt;/strong&gt; → 弹出的面板就是真机的真实样式面板。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;完事，四步搞定真机调试。&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>解密 Docker 部署：Dockerfile 与 Docker Compose 的角色与关联</title><link>https://blog.toolplus.vip/blog/2025-09-20-%E8%A7%A3%E5%AF%86-docker-%E9%83%A8%E7%BD%B2dockerfile-%E4%B8%8E-docker-compose-%E7%9A%84%E8%A7%92%E8%89%B2%E4%B8%8E%E5%85%B3%E8%81%94</link><guid isPermaLink="true">https://blog.toolplus.vip/blog/2025-09-20-%E8%A7%A3%E5%AF%86-docker-%E9%83%A8%E7%BD%B2dockerfile-%E4%B8%8E-docker-compose-%E7%9A%84%E8%A7%92%E8%89%B2%E4%B8%8E%E5%85%B3%E8%81%94</guid><pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;理解 &lt;code&gt;Dockerfile&lt;/code&gt; 和 &lt;code&gt;docker-compose.yml&lt;/code&gt; 的关系是掌握 Docker 部署的关键。&lt;/p&gt;
&lt;h4&gt;1. 核心概念辨析&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Dockerfile&lt;/code&gt; (角色设定/建造说明书)&lt;/strong&gt;：&lt;strong&gt;定义如何构建一个独立的、包含应用及其运行环境的镜像&lt;/strong&gt;。它指定了基础环境、依赖安装、文件复制和启动命令。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;docker-compose.yml&lt;/code&gt; (剧本/组装方案)&lt;/strong&gt;：&lt;strong&gt;定义如何组织、连接和管理多个容器作为一个整体应用来运行&lt;/strong&gt;。它声明了需要哪些服务、它们的配置、网络和卷挂载。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;2. 它们如何协同工作？&lt;/h4&gt;
&lt;p&gt;在 &lt;code&gt;docker-compose.yml&lt;/code&gt; 中，&lt;code&gt;build: .&lt;/code&gt; 这行指令是连接两者的桥梁。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;services:
  my-app:
    build: .  # #1 告诉Compose：请根据当前目录下的Dockerfile构建镜像
    ports:
      - &quot;8000:8000&quot; # #2 然后用这个镜像启动容器，并进行端口映射
    # ...其他配置
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;构建阶段&lt;/strong&gt;：当你运行 &lt;code&gt;docker-compose up -d&lt;/code&gt;，Compose 会读取 &lt;code&gt;build: .&lt;/code&gt; 指令。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;寻找说明书&lt;/strong&gt;：它会在当前目录（&lt;code&gt;.&lt;/code&gt;）下寻找名为 &lt;code&gt;Dockerfile&lt;/code&gt; 的文件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;执行构建&lt;/strong&gt;：根据 &lt;code&gt;Dockerfile&lt;/code&gt; 中的指令，一步步构建出应用的镜像。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;启动服务&lt;/strong&gt;：镜像构建成功后，Compose 再用这个镜像来创建和启动容器，并应用 &lt;code&gt;ports&lt;/code&gt;, &lt;code&gt;volumes&lt;/code&gt; 等其他配置。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;3. 总结与比喻&lt;/h4&gt;
&lt;p&gt;| | &lt;strong&gt;Dockerfile&lt;/strong&gt; | &lt;strong&gt;Docker Compose&lt;/strong&gt; |
| :--- | :--- | :--- |
| &lt;strong&gt;角色&lt;/strong&gt; | &lt;strong&gt;建造者&lt;/strong&gt; | &lt;strong&gt;指挥家&lt;/strong&gt; |
| &lt;strong&gt;职责&lt;/strong&gt; | 制造单个零件（镜像） | 将多个零件组装成一台完整机器（多容器应用） |
| &lt;strong&gt;关系&lt;/strong&gt; | &lt;strong&gt;被引用&lt;/strong&gt;、&lt;strong&gt;是基础&lt;/strong&gt; | &lt;strong&gt;引用&lt;/strong&gt; Dockerfile、&lt;strong&gt;是组织者&lt;/strong&gt; |
| &lt;strong&gt;缺一不可&lt;/strong&gt; | ✅ 没有 Dockerfile，Compose 不知道如何创建应用镜像。 | ✅ 没有 Compose，你也可以用 &lt;code&gt;docker run&lt;/code&gt; 启动容器，但管理复杂应用会很麻烦。 |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结论：两者分工明确，相辅相成。&lt;code&gt;Dockerfile&lt;/code&gt; 负责“怎么做”，&lt;code&gt;docker-compose.yml&lt;/code&gt; 负责“怎么跑”。&lt;/strong&gt;&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>一次讲清：云服务器安全组与系统防火墙的区别与联系</title><link>https://blog.toolplus.vip/blog/2025-09-20-%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%BD%91%E7%BB%9C%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6</link><guid isPermaLink="true">https://blog.toolplus.vip/blog/2025-09-20-%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%BD%91%E7%BB%9C%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6</guid><pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;部署应用时，开放端口需要在两个地方配置，它们不是重复劳动，而是互补关系。&lt;/p&gt;
&lt;h4&gt;1. 流量访问路径图&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;flowchart LR
    Internet[互联网] --&gt; SG[云服务器安全组&amp;#x3C;br&gt;第一道关卡]
    SG -- Allow --&gt; OS[服务器操作系统]
    OS --&gt; FW[系统防火墙&amp;#x3C;br&gt;第二道关卡]
    FW -- Allow --&gt; App[您的应用程序]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://imgs.shuxitech.com/uniapp/v1.1/image-20260122140101308.png&quot; alt=&quot;image-20260122140101308&quot;&gt;&lt;/p&gt;
&lt;h4&gt;2. 区别对照表&lt;/h4&gt;
&lt;p&gt;| 特性 | &lt;strong&gt;云服务器安全组 (Security Group)&lt;/strong&gt; | &lt;strong&gt;系统防火墙 (UFW/Firewalld)&lt;/strong&gt; |
| :--- | :--- | :--- |
| &lt;strong&gt;位置&lt;/strong&gt; | 云平台&lt;strong&gt;网络层面&lt;/strong&gt;的虚拟防火墙 | 服务器&lt;strong&gt;操作系统内部&lt;/strong&gt;的软件防火墙 |
| &lt;strong&gt;控制对象&lt;/strong&gt; | 控制能否进入&lt;strong&gt;整台云服务器&lt;/strong&gt; | 控制服务器内部能否访问&lt;strong&gt;某个具体应用&lt;/strong&gt; |
| &lt;strong&gt;管理界面&lt;/strong&gt; | 阿里云、腾讯云等云平台的控制台 | 服务器命令行 &lt;strong&gt;或&lt;/strong&gt; 1Panel 可视化界面 |
| &lt;strong&gt;特点&lt;/strong&gt; | &lt;strong&gt;必须&lt;/strong&gt;配置，是流量进入服务器的&lt;strong&gt;前提&lt;/strong&gt; | 推荐配置，提供第二层防护和管理便利 |&lt;/p&gt;
&lt;h4&gt;3. 操作黄金法则&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;一个需要被公网访问的应用，必须同时在“安全组”和“系统防火墙”中放行其端口。&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;安全组&lt;/strong&gt;：登录云平台控制台，添加&lt;strong&gt;入方向&lt;/strong&gt;规则，协议&lt;code&gt;TCP&lt;/code&gt;，端口号&lt;code&gt;XXXX&lt;/code&gt;，授权来源&lt;code&gt;0.0.0.0/0&lt;/code&gt;（或更精确的IP）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;系统防火墙&lt;/strong&gt;：在 1Panel 的 &lt;code&gt;防火墙&lt;/code&gt; 页面，添加一条允许规则，协议&lt;code&gt;TCP&lt;/code&gt;，端口号&lt;code&gt;XXXX&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>五分钟快速部署：用 Docker 和 Docker Compose 部署 FastAPI 应用</title><link>https://blog.toolplus.vip/blog/2025-09-20-%E4%BA%94%E5%88%86%E9%92%9F%E5%BF%AB%E9%80%9F%E9%83%A8%E7%BD%B2%E7%94%A8-docker-%E5%92%8C-docker-compose-%E9%83%A8%E7%BD%B2-fastapi-%E5%BA%94%E7%94%A8</link><guid isPermaLink="true">https://blog.toolplus.vip/blog/2025-09-20-%E4%BA%94%E5%88%86%E9%92%9F%E5%BF%AB%E9%80%9F%E9%83%A8%E7%BD%B2%E7%94%A8-docker-%E5%92%8C-docker-compose-%E9%83%A8%E7%BD%B2-fastapi-%E5%BA%94%E7%94%A8</guid><pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;本指南提供一个极简的 FastAPI 应用从代码到部署的全流程。&lt;/p&gt;
&lt;h4&gt;1. 准备项目文件&lt;/h4&gt;
&lt;p&gt;创建项目目录，并在此目录下创建以下文件：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. &lt;code&gt;main.py&lt;/code&gt; (FastAPI 应用代码)&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from fastapi import FastAPI
app = FastAPI()
@app.get(&quot;/&quot;)
def read_root():
    return {&quot;Hello&quot;: &quot;World&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;2. &lt;code&gt;requirements.txt&lt;/code&gt; (项目依赖)&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fastapi==0.104.1
uvicorn[standard]==0.24.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;3. &lt;code&gt;Dockerfile&lt;/code&gt; (构建镜像的指令)&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [&quot;uvicorn&quot;, &quot;main:app&quot;, &quot;--host&quot;, &quot;0.0.0.0&quot;, &quot;--port&quot;, &quot;8000&quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;4. &lt;code&gt;docker-compose.yml&lt;/code&gt; (定义和启动服务)&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;services:
  fastapi-app:
    build: .
    container_name: my-fastapi-app
    ports:
      - &quot;8000:8000&quot;
    restart: unless-stopped
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2. 部署命令&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;将以上文件通过 1Panel 的文件管理器或 &lt;code&gt;scp&lt;/code&gt; 命令上传到服务器。&lt;/li&gt;
&lt;li&gt;在服务器上，进入项目目录。&lt;/li&gt;
&lt;li&gt;执行一键部署命令：
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;访问 &lt;code&gt;http://你的服务器IP:8000&lt;/code&gt; 查看结果，访问 &lt;code&gt;http://你的服务器IP:8000/docs&lt;/code&gt; 查看交互文档。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;3. 项目结构&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;my-fastapi-project/
├── main.py
├── requirements.txt
├── Dockerfile
└── docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>miniforge-替代conda的Python环境和包管理工具</title><link>https://blog.toolplus.vip/blog/2025-08-24-miniforge-%E6%9B%BF%E4%BB%A3conda%E7%9A%84python%E7%8E%AF%E5%A2%83%E5%92%8C%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7</link><guid isPermaLink="true">https://blog.toolplus.vip/blog/2025-08-24-miniforge-%E6%9B%BF%E4%BB%A3conda%E7%9A%84python%E7%8E%AF%E5%A2%83%E5%92%8C%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7</guid><pubDate>Sat, 23 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;我安装的是 miniforge3，不是 conda&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;安装 miniforge3&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开终端（Mac/Linux）或命令提示符（Windows）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;找到官网下载地址，选择对应版本。我的是 macos arm64 版本。
https://conda-forge.org/miniforge/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;运行安装脚本：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sh Miniforge3-25.3.0-3-MacOSX-arm64.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;替换成实际的脚本名称安装。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;常用的命令&lt;/h2&gt;
&lt;p&gt;miniforge中同时内置了包管理工具conda和mamba，其中mamba可「完全」作为conda功能的替代，且运行效率优于conda，我们只需要将平时熟悉的conda命令中的conda替换为mamba即可。&lt;/p&gt;
&lt;p&gt;查看虚拟环境 &lt;code&gt;mamba env list&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;创建虚拟环境 &lt;code&gt;mamba create -n &amp;#x3C;env_name&gt; python=&amp;#x3C;version&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;激活虚拟环境 &lt;code&gt;mamba activate &amp;#x3C;env_name&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;退出虚拟环境 &lt;code&gt;mamba deactivate&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;删除虚拟环境 &lt;code&gt;mamba env remove -n &amp;#x3C;env_name&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;安装包 &lt;code&gt;mamba install &amp;#x3C;package_name&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;卸载包 &lt;code&gt;mamba uninstall &amp;#x3C;package_name&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;更新包 &lt;code&gt;mamba update &amp;#x3C;package_name&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;搜索包 &lt;code&gt;mamba search &amp;#x3C;package_name&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;查看已安装的包 &lt;code&gt;mamba list&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;查看包的信息 &lt;code&gt;mamba info &amp;#x3C;package_name&gt;&lt;/code&gt;&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>Vue 项目部署 Netlify 并配置 API 代理解决跨域问题</title><link>https://blog.toolplus.vip/blog/vue-%E9%A1%B9%E7%9B%AE%E9%83%A8%E7%BD%B2-netlify-%E5%B9%B6%E9%85%8D%E7%BD%AE-api-%E4%BB%A3%E7%90%86%E8%A7%A3%E5%86%B3%E8%B7%A8%E5%9F%9F%E9%97%AE%E9%A2%98</link><guid isPermaLink="true">https://blog.toolplus.vip/blog/vue-%E9%A1%B9%E7%9B%AE%E9%83%A8%E7%BD%B2-netlify-%E5%B9%B6%E9%85%8D%E7%BD%AE-api-%E4%BB%A3%E7%90%86%E8%A7%A3%E5%86%B3%E8%B7%A8%E5%9F%9F%E9%97%AE%E9%A2%98</guid><description>介绍如何在 Netlify 上部署 Vue 项目，并通过 netlify.toml 配置 API 代理转发，轻松解决前端开发中的跨域问题。</description><pubDate>Sun, 16 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;在 Vue 项目开发中，前端应用通常需要调用后端 API。当项目部署到 Netlify 后，如果后端 API 位于不同的域名下，就会遇到**跨域（CORS）**问题。本文介绍如何通过 &lt;code&gt;netlify.toml&lt;/code&gt; 配置文件，在 Netlify 上实现无缝的 API 代理转发。&lt;/p&gt;
&lt;h2&gt;配置示例&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;[build]
  command = &quot;npm run build&quot;
  publish = &quot;dist&quot;

[[redirects]]
  from = &quot;/farm_server/*&quot;
  to = &quot;https://pre.shuxitech.com/farm_server/:splat&quot;
  status = 200
  force = true
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;配置项详解&lt;/h2&gt;
&lt;h3&gt;[build] 区块&lt;/h3&gt;
&lt;p&gt;| 配置项 | 说明 |
|--------|------|
| &lt;code&gt;command&lt;/code&gt; | 构建命令，执行 &lt;code&gt;npm run build&lt;/code&gt; 生成生产环境代码 |
| &lt;code&gt;publish&lt;/code&gt; | 指定构建输出目录，Vue 项目默认输出到 &lt;code&gt;dist&lt;/code&gt; 文件夹 |&lt;/p&gt;
&lt;h3&gt;[[redirects]] 区块&lt;/h3&gt;
&lt;p&gt;| 配置项 | 说明 |
|--------|------|
| &lt;code&gt;from&lt;/code&gt; | 匹配的路径模式，&lt;code&gt;/farm_server/*&lt;/code&gt; 表示匹配所有以 &lt;code&gt;/farm_server/&lt;/code&gt; 开头的请求 |
| &lt;code&gt;to&lt;/code&gt; | 目标地址，&lt;code&gt;:splat&lt;/code&gt; 表示将通配符匹配的内容原样传递到目标 URL |
| &lt;code&gt;status&lt;/code&gt; | HTTP 状态码，&lt;code&gt;200&lt;/code&gt; 表示 rewrite（重写），而非 redirect（重定向） |
| &lt;code&gt;force&lt;/code&gt; | 强制应用此规则，即使目标路径存在静态文件也优先匹配 |&lt;/p&gt;
&lt;h2&gt;解决了什么问题？&lt;/h2&gt;
&lt;h3&gt;1. 跨域问题（CORS）&lt;/h3&gt;
&lt;p&gt;浏览器同源策略会阻止前端直接请求不同域名的 API。通过 Netlify 代理，前端代码只需请求同域名的 &lt;code&gt;/farm_server/xxx&lt;/code&gt;，Netlify 服务器会自动转发到目标 API 服务器，从而&lt;strong&gt;绕过浏览器跨域限制&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;2. 环境统一&lt;/h3&gt;
&lt;p&gt;本地开发时使用 &lt;code&gt;vite.config.ts&lt;/code&gt; 配置代理，生产环境使用 &lt;code&gt;netlify.toml&lt;/code&gt; 配置代理，保持代码一致性，无需修改 API 调用逻辑。&lt;/p&gt;
&lt;h3&gt;3. 隐藏真实 API 地址&lt;/h3&gt;
&lt;p&gt;对外暴露的是 &lt;code&gt;/farm_server/&lt;/code&gt; 路径，真实后端地址不会直接暴露给客户端。&lt;/p&gt;
&lt;h2&gt;使用场景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;✅ Vue/React/Angular 等前端项目部署到 Netlify&lt;/li&gt;
&lt;li&gt;✅ 需要调用第三方或独立部署的后端 API&lt;/li&gt;
&lt;li&gt;✅ 希望前后端分离部署但避免跨域问题&lt;/li&gt;
&lt;li&gt;✅ 需要统一本地开发和生产环境的 API 调用方式&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;注意事项&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;:splat&lt;/code&gt; 是 Netlify 的通配符占位符，会将 &lt;code&gt;from&lt;/code&gt; 中 &lt;code&gt;*&lt;/code&gt; 匹配的内容原样附加到 &lt;code&gt;to&lt;/code&gt; 地址&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status = 200&lt;/code&gt; 表示 rewrite，浏览器地址栏不会发生变化&lt;/li&gt;
&lt;li&gt;如需多条代理规则，可添加多个 &lt;code&gt;[[redirects]]&lt;/code&gt; 区块&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;通过简单的 &lt;code&gt;netlify.toml&lt;/code&gt; 配置，即可在 Netlify 上实现 Vue 项目的自动化构建部署和 API 代理转发，是解决前端跨域问题的优雅方案。&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item></channel></rss>