news 2026/9/9 17:57:12

Create React App 如何添加 Flow 静态类型检查并配置 .flowconfig

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Create React App 如何添加 Flow 静态类型检查并配置 .flowconfig

Create React App 如何添加 Flow 静态类型检查并配置 .flowconfig

【免费下载链接】create-react-appSet up a modern web app by running one command.项目地址: https://gitcode.com/gh_mirrors/cr/create-react-app

Flow 是一个静态类型检查器,用于帮助写出更少 bug 的代码。如果你已有一个 Create React App 项目,想为源码引入 Flow 类型检查,近期的 Flow 版本可以直接配合 Create React App 项目工作:构建侧已经认识项目根目录的.flowconfig文件,并会在打包时剥离 Flow 的类型语法,因此你只需要安装flow-bin工具、生成.flowconfig、给需要检查的文件加上标记即可。

本文从已有 Create React App 项目出发,走完安装flow-bin、生成.flowconfig、运行类型检查的完整流程,并给出绝对导入和 Sass/SCSS 两个可选的.flowconfig配置。

准备已有项目

先准备一个 Create React App 项目。文档要求本地开发机 Node >= 14(构建服务器不需要)。如果还没有项目,可以用如下命令创建:

npx create-react-app my-app cd my-app

创建完成后会得到包含package.jsonsrc/App.js等文件的my-app目录,以下步骤都在该目录内执行。

安装 flow-bin 并注册 npm 脚本

在项目目录安装flow-bin

npm install --save flow-bin

如果你使用 Yarn,则执行yarn add flow-bin

然后在package.jsonscripts部分添加如下脚本:

{ "scripts": { "flow": "flow" } }

生成 .flowconfig 并标记待检查文件

执行初始化命令,在项目根目录生成.flowconfig文件:

npm run flow init

如果使用 Yarn,对应命令是yarn flow init

接着在需要类型检查的文件中加入// @flow标记,例如加到src/App.js。Flow 只检查带这个标记的文件,未标记的文件不在检查范围内,后续新增文件也要手动补上标记。

Create React App 项目无需额外配置 Babel 就能接受 Flow 语法,是因为构建所用的babel-preset-react-app默认启用flow选项,并启用@babel/plugin-transform-flow-strip-types在构建时剥离 Flow 类型语法,见 create.js;其 README 也说明需要在根目录存在.flowconfig文件,正是上一步生成的内容。

运行类型检查

npm run flow

如果使用 Yarn,则执行yarn flow。该命令会对已标记// @flow的文件执行类型检查并报告类型错误;标记的文件检查不出类型错误时,集成即完成。

如果你希望在输入代码时获得 IDE 内提示,可以安装编辑器扩展,例如 Visual Studio Code 的 Flow Language Support 扩展,或使用基于 Language Server Protocol 标准的客户端(如 vim LSP)。这一步是可选的,不影响命令行检查。

配置绝对导入(可选)

如果项目启用了绝对导入——即在项目根目录通过jsconfig.jsontsconfig.jsonbaseUrl配置为src,从而可以写import Button from 'components/Button'——需要让 Flow 感知这一映射。在.flowconfig[options]部分添加下面一行:

[options] + module.name_mapper='^\([^\.].*\)$' -> '<PROJECT_ROOT>/src/\1'

该行按原文粘贴即可,其中<PROJECT_ROOT>是 Flow 自身识别的特殊变量,指向项目根目录,不需要替换。绝对导入本身的配置方法见 importing-a-component。

配置 Sass/SCSS 识别(可选)

如果项目使用 Sass/SCSS 样式文件,需要在.flowconfig中覆盖module.file_ext设置让 Flow 认识.sass.scss文件,同时保留.js.jsx.mjs.json的默认扩展名设置:

[options] module.file_ext=.js module.file_ext=.jsx module.file_ext=.mjs module.file_ext=.json module.file_ext=.sass module.file_ext=.scss

相关说明见 adding-a-sass-stylesheet。

边界与限制

  • Flow 只检查带// @flow标记的文件,新增文件需补上标记后再次运行npm run flow才会被检查。
  • 开发模式下代理 API 请求所用的代理文件只支持 Node 的 JavaScript 语法,不支持 Flow、ES Modules 等语法特性,编写该文件时不要使用 Flow 语法,见 proxying-api-requests-in-development。
  • 本文流程基于项目文档 adding-flow,其中的外部链接(Flow 官网、IDE 扩展仓库)请以官方渠道为准。

【免费下载链接】create-react-appSet up a modern web app by running one command.项目地址: https://gitcode.com/gh_mirrors/cr/create-react-app

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 17:56:50

PID控制原理与实战:从公式到调参,一篇讲透

简介&#xff1a;这是一份面向自动化、机器人及嵌入式开发者的PID算法学习资料包&#xff0c;涵盖理论、C代码实现和模拟演示三大模块&#xff0c;适合从入门到进阶的工程师对照实践。压缩包共66个文件&#xff0c;以C源码与头文件&#xff08;.c/.h&#xff09;、PDF/DOC文档、…

作者头像 李华
网站建设 2026/9/9 17:53:12

从0到1跑通 .NET Runtime:环境、目录、构建与排错的完整任务流

从0到1跑通 .NET Runtime&#xff1a;环境、目录、构建与排错的完整任务流 【免费下载链接】runtime .NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps. 项目地址: https://gitcode.com/GitHub_Trending/runtime6/runtime .NET runtime 是微…

作者头像 李华
网站建设 2026/9/9 17:52:50

PDF密码保护全攻略:打开密码与权限密码的区别及实操指南

PDF 密码保护这事儿&#xff0c;看着简单&#xff0c;但真做起来坑不少。很多人以为给 PDF 设个密码就是“打开密码”&#xff0c;其实 PDF 密码分两种&#xff0c;用途天差地别。我接触过的办公场景里&#xff0c;因为密码类型选错导致文件发出去却打不开、或者虽然能打开却被…

作者头像 李华
网站建设 2026/9/9 17:52:34

TDE透明加密实战:非结构化数据防泄露的最后一公里

你负责的数据里&#xff0c;最容易被拿走的从来不是什么核心数据库&#xff0c;而是散落在文件服务器、NAS、协同盘和影像归档里的那些Word、PDF、扫描件和图片。这类数据有个共同身份——非结构化数据。它们数量多、体积大、存储分散、访问路径杂&#xff0c;很多单位对它的防…

作者头像 李华
网站建设 2026/9/9 17:52:28

黑客技术入门自学路线:从系统原理到合法渗透实战

先聊点实在的。每次有人听说我是做网络安全的&#xff0c;紧接着的问题基本都是“那你是不是会黑客技术”“能不能帮我查一下聊天记录”或者“你平时是不是经常黑别人网站”。我每次都得很认真地解释&#xff1a;黑客技术不是你想的那样&#xff0c;我也不是电影里那种三分钟黑…

作者头像 李华
网站建设 2026/9/9 17:52:27

Qt多表格联动选择机制:共享QItemSelectionModel与SelectionSyncManager实践

做 Qt 开发的人&#xff0c;基本都绕不过表格视图。不管是后台管理工具、数据采集上位机&#xff0c;还是设备配置面板&#xff0c;QTableView 和 QTableWidget 几乎天天都要打交道。可一旦界面里同时出现了两个、三个甚至更多表格&#xff0c;比如主从表联动的订单详情页、左侧…

作者头像 李华