1.Flutter 环境配置 & Shell 基础知识笔记

Flutter 环境配置 & Shell 基础知识笔记


一、Flutter 环境变量配置(实践总结)

需要配置哪些环境变量?

环境变量 是否必须 作用
PATH ✅ 必须 让终端能找到 flutterdart 命令
PUB_HOSTED_URL 🇨🇳 国内必须 Dart 包的下载镜像(不配会很慢或下载失败)
FLUTTER_STORAGE_BASE_URL 🇨🇳 国内必须 Flutter SDK 更新的下载镜像

为什么要配置镜像?

Flutter 默认从 Google 服务器下载资源,国内无法直接访问。配置中国镜像后,所有下载都走国内服务器,速度快且稳定。

常用的中国镜像:

镜像 地址
Flutter 社区镜像 https://pub.flutter-io.cn / https://storage.flutter-io.cn
清华大学镜像 https://mirrors.tuna.tsinghua.edu.cn/dart-pub / https://mirrors.tuna.tsinghua.edu.cn/flutter

我的具体配置

Flutter SDK 安装路径:/Users/hongliangchang/development/flutter

~/.zshrc 末尾添加的内容:

bash 复制代码
# Flutter 中国镜像(解决国内无法访问 Google 服务器的问题)
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

# Flutter PATH(让终端能直接使用 flutter 命令)
export PATH="$HOME/development/flutter/bin:$PATH"

# Dart SDK PATH(让终端能直接使用 dart 命令)
export PATH="$HOME/development/flutter/bin/cache/dart-sdk/bin:$PATH"

配置完成后

bash 复制代码
# 1. 让配置生效
source ~/.zshrc

# 2. 验证 flutter 是否可用
flutter --version

# 3. 检查环境是否完整(会列出缺少的依赖)
flutter doctor

踩坑记录

  1. 配置写错文件 :macOS 用的是 zsh,环境变量要写在 ~/.zshrc,不是 ~/.bash_profile
  2. Windows 换行符问题 :如果 Flutter SDK 是从 Windows 拷贝过来的,脚本文件会带 \r 换行符,macOS 无法执行,需要在 macOS 上重新下载解压

二、为什么要配置环境变量?

核心原因:让系统知道去哪里找程序。

当你在终端输入 flutter --version 时,系统不会搜遍整个电脑找 flutter,它只会去 PATH 环境变量列出的目录 里找。

bash 复制代码
# 查看当前 PATH 里有哪些目录
echo $PATH

不配置会怎样?

bash 复制代码
# ❌ 不配置 PATH,每次必须写完整路径
/Users/hongliangchang/development/flutter/bin/flutter --version

# ✅ 配置了 PATH,直接输名字
flutter --version

通俗比喻:好比手机通讯录存了一个人的号码(配置 PATH),以后打电话搜名字就行。不存的话,每次都得手动输完整手机号码(完整路径)。

PATH 之外的环境变量

环境变量不只是 PATH,还能存各种配置信息:

环境变量 作用
PATH 告诉系统去哪些目录找程序
PUB_HOSTED_URL 告诉 Flutter 从哪个镜像下载 Dart 包(中国镜像加速)
FLUTTER_STORAGE_BASE_URL 告诉 Flutter 从哪个镜像下载 SDK(中国镜像加速)

三、配置文件的区别

不同 Shell 读取不同的配置文件,这是环境变量不生效的常见原因:

Shell 配置文件
bash ~/.bash_profile~/.bashrc
zsh ~/.zshrc~/.zprofile

⚠️ 如果你的 Mac 用的是 zsh,环境变量写在 ~/.bash_profile 里是不生效 的,必须写在 ~/.zshrc 里。

配置完后让其生效:

bash 复制代码
source ~/.zshrc

四、什么是 Shell?

Shell 就是你打开「终端」后,帮你执行命令的程序。可以理解为一个「翻译官」,把你输入的命令翻译给操作系统执行。

常见的 Shell 有 sh、bash、zsh、fish 等,它们功能类似但各有增强。


五、Bash 和 Zsh 是什么?

名称 全称 含义
sh Bourne Shell 最古老的 Shell,以作者 Stephen Bourne 命名
bash Bourne Again Shell sh 的增强版,"重生的 Bourne Shell"(双关语 born again = 重生)
zsh Z Shell bash 的增强版,名字来自普林斯顿助教邵中(Zhong Shao)的用户名

继承关系

text 复制代码
sh(祖宗)
 └── bash(儿子,增强版)
      └── zsh(孙子,更强大)

六、macOS 默认用哪个 Shell?

  • macOS Catalina(10.15)之前 :默认 bash
  • macOS Catalina(10.15)及之后 :默认 zsh

查看当前 Shell:

bash 复制代码
echo $SHELL
# /bin/zsh → 用的 zsh
# /bin/bash → 用的 bash

为什么苹果要从 bash 换成 zsh?

bash 新版本改用了 GPLv3 许可证,苹果不愿接受。

GPLv3 的核心要求 :如果你在产品中使用了 GPLv3 的软件,用户修改了这个软件后,你必须允许用户把修改版装回设备运行

这和苹果的封闭生态冲突------macOS/iOS 的系统文件都有代码签名,不允许用户随意替换。

通俗比喻:苹果卖你一辆车,车里装了一台 GPLv3 的发动机。GPLv3 说车主可以自己改造发动机并装回去,但苹果不愿意让你动它的车。所以苹果换了一台 MIT 许可的发动机(zsh),没有任何限制。

最终苹果的做法:

  • 系统自带的 bash 停留在 3.2 版本(2007 年的,最后一个 GPLv2 版本)
  • 默认 Shell 改为 zsh(MIT 许可证,没有"传染性"要求)

七、Oh-My-Zsh 是什么?

Oh-My-Zsh = zsh 的「插件和主题管理器」,它不改变 zsh 核心功能,而是让体验更好。

text 复制代码
zsh = 引擎(自带 Tab 补全等核心功能)
oh-my-zsh = 改装套件(主题 + 插件)
功能 提供者
Tab 补全命令/路径 zsh 自带
Tab 补全时方向键选择 zsh 自带
终端主题/配色 oh-my-zsh
Git 分支显示在命令行 oh-my-zsh 主题
命令别名(如 gst = git status oh-my-zsh 的 git 插件
根据历史记录灰色提示 oh-my-zsh 的 autosuggestions 插件

八、Zsh 命名趣事

zsh 的作者是 Paul Falstad ,1990 年在普林斯顿大学读书时开发。当时有个助教叫邵中(Zhong Shao) ,他的登录用户名是 zsh,Paul 觉得这名字结尾是 sh,很像一个 Shell 的名字,就直接拿来用了。

邵中本人和 zsh 的开发没有任何关系,他后来成为了耶鲁大学计算机科学系教授,研究编程语言和编译器。

相关推荐
stringwu1 小时前
Flutter Generative UI 深度架构剖析与官方 SDK 实战
flutter
唐诺3 小时前
flutter StreamController 完全使用指南
flutter·stream
GitLqr18 小时前
玩转 Flutter 中的 Stack 与 Positioned:解决 UI 重叠问题的实战指南
flutter·面试·全栈
唔661 天前
flutter web iOS 在浏览器加载中文慢的问题
前端·flutter·ios
恋猫de小郭1 天前
Jetpack Compose 8 月版正式发布,核心模块 1.12
android·前端·flutter
梦想的颜色2 天前
AI 时代小白 VibeCoding 做 APP:UniApp(含 Uni‑X)、Flutter 与 React Native+Expo全维度技术选型对比指南
flutter·react native·app·uniapp·vibecoding·unippx·app产品
坚果的博客2 天前
Flutter-OH 3.44.9-dev 悄然上线|首个 OpenHarmony Canary 预览版上线
flutter
大龄秃头程序员2 天前
Flutter 动画随笔:业务里真正高频的几类控件
flutter
天空之城--2 天前
Android Flutter行业最新动态与实用参考(2026年8月第2周)
android·flutter