react-native-router-flux 路由配置自动格式化:Prettier规则
react-native-router-flux 路由配置自动格式化:Prettier规则
你是否在维护大型React Native项目时,常因团队成员路由配置风格不一致而头疼?react-native-router-flux作为基于React Navigation的增强型导航解决方案,其路由配置文件往往包含大量嵌套结构和属性定义,手动格式化不仅耗时还易出错。本文将详解如何通过Prettier实现路由配置的自动化格式化,确保团队代码风格统一,提升协作效率。读完本文你将掌握:Prettier规则与路由配置的适配方法、自定义格式化脚本编写、以及集成到开发流程的最佳实践。
Prettier基础配置解析
react-native-router-flux项目已内置Prettier支持,核心配置文件为项目根目录下的.prettierrc。该配置针对路由文件特点进行了优化,主要参数包括:
printWidth: 180:将行宽设置为180字符,适应路由配置中较长的属性值(如组件路径、导航选项)singleQuote: true:统一使用单引号,避免JSX属性与字符串嵌套时的引号冲突trailingComma: "all":强制添加尾逗号,使路由配置的多行属性在版本控制中差异更清晰
配置文件完整路径:.prettierrc
项目package.json中已集成格式化命令,通过npm run fix可一键格式化所有源码文件:
{
"scripts": {
"lint": "prettier-eslint $PWD/'src/**/*.js' $PWD/'__tests__/**/*.js' --list-different",
"fix": "prettier-eslint $PWD/'src/**/*.js' $PWD/'__tests__/**/*.js' --write"
}
}
相关代码:package.json
路由配置格式化实战
基础路由格式化示例
未格式化的路由配置通常存在缩进混乱、属性顺序随意等问题:
<Router>
<Stack key="root">
<Scene key="login" component={Login} title="Login" initial={true}/>
<Scene key="home" component={Home} title="Home" />
</Stack>
</Router>
使用Prettier格式化后,代码结构清晰,属性排列有序:
<Router>
<Stack key="root">
<Scene key="login" component={Login} title="Login" initial={true} />
<Scene key="home" component={Home} title="Home" />
</Stack>
</Router>
复杂嵌套路由格式化
对于包含抽屉导航(Drawer)、标签页(Tabs)的复杂路由结构,Prettier能自动调整嵌套层级和属性对齐:
<Router>
<Drawer key="drawer" contentComponent={DrawerContent}>
<Stack key="root">
<Tabs key="tabbar" tabBarComponent={TabBar}>
<Scene key="home" component={Home} title="首页" icon={TabIcon} />
<Scene key="profile" component={Profile} title="个人中心" icon={TabIcon} />
</Tabs>
<Scene key="settings" component={Settings} title="设置" mode="modal" />
</Stack>
</Drawer>
</Router>
实际项目中的路由配置示例可参考:examples/react-native/components/Home.js
自定义路由格式化规则
扩展Prettier配置
如需针对路由文件添加特殊规则,可在项目根目录创建.prettierrc.js文件扩展配置:
module.exports = {
...require('./.prettierrc'),
overrides: [
{
files: 'src/**/*.js',
options: {
printWidth: 200, // 路由文件使用更大行宽
},
},
],
};
集成ESLint规则
项目已配置eslint-config-prettier解决ESLint与Prettier的规则冲突,相关配置:package.json中的eslintConfig字段。通过npm run lint可检查未格式化的文件,确保代码提交前风格统一。
开发流程集成方案
Git提交前自动格式化
通过husky和lint-staged实现提交前自动格式化:
npm install --save-dev husky lint-staged
在package.json中添加:
{
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"src/**/*.js": ["prettier-eslint --write", "git add"]
}
}
IDE实时格式化
推荐在VSCode中安装Prettier插件,并添加工作区配置.vscode/settings.json:
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnPaste": true
}
常见问题与解决方案
问题1:长属性值换行
当路由属性值过长时,Prettier会自动换行:
// 格式化前
<Scene key="productDetail" component={ProductDetail} title="商品详情" options={{headerStyle: {backgroundColor: '#fff'}, headerTintColor: '#000'}} />
// 格式化后
<Scene
key="productDetail"
component={ProductDetail}
title="商品详情"
options={{ headerStyle: { backgroundColor: '#fff' }, headerTintColor: '#000' }}
/>
问题2:JSX表达式格式化
包含三元运算符的复杂属性会被正确缩进:
<Scene
key="dashboard"
component={Dashboard}
title={isAdmin ? "管理员面板" : "用户面板"}
renderRightButton={props => isEditMode ? <SaveButton {...props} /> : null}
/>
最佳实践总结
- 保持配置集中管理:所有格式化规则统一在
.prettierrc中定义,避免分散配置 - 定期执行格式化:将
npm run fix添加到CI流程,确保合并到主分支的代码已格式化 - 路由属性排序建议:推荐按"key > component > title > 导航选项 > 样式"的顺序排列属性
- 复杂路由拆分:超过5个Scene的路由配置建议拆分为多个文件,如examples/react-native/navigation/AppNavigator.js所示
通过以上方法,团队可实现路由配置的自动化格式化,减少90%以上的代码风格争议,将更多精力集中在业务逻辑实现上。项目官方文档docs/API.md中还提供了更多路由配置的高级用法,建议结合格式化规则一起学习。
更多推荐


所有评论(0)