Flutter 环境配置 & Shell 基础知识笔记
一、Flutter 环境变量配置(实践总结)
需要配置哪些环境变量?
| 环境变量 | 是否必须 | 作用 |
|---|---|---|
PATH |
✅ 必须 | 让终端能找到 flutter 和 dart 命令 |
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
踩坑记录
- 配置写错文件 :macOS 用的是 zsh,环境变量要写在
~/.zshrc,不是~/.bash_profile - 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 的开发没有任何关系,他后来成为了耶鲁大学计算机科学系教授,研究编程语言和编译器。