Shopify Polaris 从 v10 升级到 v11 完全指南

Shopify Polaris 从 v10 升级到 v11 完全指南

概述

Shopify Polaris v11.0.0 是一个重要的版本更新,带来了多项重大变更,包括依赖版本支持调整、组件移除和重命名、以及设计令牌(Tokens)的更新。本文将为您提供从 v10 升级到 v11 的完整指南,包含详细的迁移步骤、代码示例和最佳实践。

环境要求变更

Node.js 支持

mermaid

React 支持

  • React 16 和 17 不再支持
  • React 18 成为最低支持版本

Webpack 支持

  • Webpack 4 不再支持
  • Webpack 5 成为最低支持版本

TypeScript 变更

Polaris 不再支持多个 TypeScript 版本,现在只构建一套基于当前项目 TypeScript 版本的类型定义。

// v10 中的类型导入
import { ComponentProps } from '@shopify/polaris/build/ts/latest';

// v11 中的类型导入  
import { ComponentProps } from '@shopify/polaris/build/ts';

组件迁移指南

文本组件统一迁移

v11 移除了多个文本组件,统一使用 Text 组件:

移除的组件推荐的替代方案
DisplayTextText + variant 属性
HeadingText + as="h2" + variant
SubheadingText + as="h3" + variant
CaptionText + as="p" + variant
TextStyleText + 相应属性
VisuallyHiddenText + visuallyHidden 属性
迁移命令
# 迁移所有文本组件
npx @shopify/polaris-migrator v10-react-replace-text-components <path>

# 迁移特定文本组件
npx @shopify/polaris-migrator v10-react-replace-text-components --componentName='DisplayText' <path>
代码示例对比
// v10 代码
<DisplayText size="medium">销售数据</DisplayText>
<Heading>在线商店仪表板</Heading>
<TextStyle variation="subdued">无供应商列表</TextStyle>

// v11 代码  
<Text as="p" variant="headingXl">销售数据</Text>
<Text as="h2" variant="headingMd">在线商店仪表板</Text>
<Text as="span" color="subdued">无供应商列表</Text>

布局组件重命名

mermaid

迁移步骤
  1. 首先迁移旧组件到 Legacy 版本
# 迁移 Stack 到 LegacyStack
npx @shopify/polaris-migrator react-rename-component <path> \
  --renameFrom="Stack" --renameTo="LegacyStack" \
  --renamePropsFrom="StackProps" --renamePropsTo="LegacyStackProps"

# 迁移 Card 到 LegacyCard  
npx @shopify/polaris-migrator react-rename-component <path> \
  --renameFrom="Card" --renameTo="LegacyCard" \
  --renamePropsFrom="CardProps" --renamePropsTo="LegacyCardProps"
  1. 然后迁移 Alpha 组件到正式名称
# 迁移 AlphaCard 到 Card
npx @shopify/polaris-migrator react-rename-component <path> \
  --renameFrom="AlphaCard" --renameTo="Card" \
  --renamePropsFrom="AlphaCardProps" --renamePropsTo="CardProps"

面包屑导航属性更新

v11 将 breadcrumbs 属性统一改为 backAction

// v10 代码
<Page breadcrumbs={[{url: '/', content: '首页'}]}>
<SkeletonPage breadcrumbs>

// v11 代码
<Page backAction={{url: '/', content: '首页'}}>
<SkeletonPage backAction>
迁移命令
# 迁移 Page 组件的 breadcrumbs
npx @shopify/polaris-migrator v11-react-update-page-breadcrumbs <path>

# 迁移 SkeletonPage 和 Breadcrumbs 组件
npx @shopify/polaris-migrator react-rename-component-prop <path> \
  --componentName="SkeletonPage" --from="breadcrumbs" --to="backAction"

npx @shopify/polaris-migrator react-rename-component-prop <path> \
  --componentName="Breadcrumbs" --from="breadcrumbs" --to="backAction"

设计令牌迁移

v11 引入了新的设计令牌系统,需要迁移自定义样式:

颜色令牌迁移

// v10 自定义样式
.element {
  color: var(--p-color-text);
  background: var(--p-color-bg-surface);
}

// v11 迁移后
.element {
  color: var(--p-text);
  background: var(--p-surface);
}

边框和间距令牌

// v10
border: var(--p-border-width-1) solid var(--p-color-border);
padding: var(--p-space-4);

// v11  
border: var(--p-border-width-1) solid var(--p-border);
padding: var(--p-space-400);

迁移命令

# 迁移边框令牌
npx @shopify/polaris-migrator v11-styles-replace-custom-property-border <path>

# 迁移颜色令牌
npx @shopify/polaris-migrator v11-styles-replace-custom-property-color <path>

# 迁移深度令牌
npx @shopify/polaris-migrator v11-styles-replace-custom-property-depth <path>

迁移工作流程

推荐迁移顺序

mermaid

逐步迁移指南

  1. 环境准备

    # 检查当前环境
    node --version  # 确保 ≥16
    npm ls react    # 确保 ≥18
    
  2. 依赖更新

    {
      "dependencies": {
        "@shopify/polaris": "^11.0.0",
        "react": "^18.0.0",
        "react-dom": "^18.0.0"
      },
      "devDependencies": {
        "@shopify/polaris-migrator": "^1.0.0"
      }
    }
    
  3. 执行迁移

    # 安装迁移工具
    npm install -g @shopify/polaris-migrator
    
    # 执行完整迁移
    npx @shopify/polaris-migrator v10-react-replace-text-components src/
    npx @shopify/polaris-migrator react-rename-component src/ \
      --renameFrom="Stack" --renameTo="LegacyStack"
    npx @shopify/polaris-migrator v11-react-update-page-breadcrumbs src/
    
  4. 手动检查和处理

    # 检查未迁移的组件
    grep -r "DisplayText\|Heading\|Subheading" src/ --include="*.js" --include="*.jsx" --include="*.ts" --include="*.tsx"
    
    # 检查未迁移的样式
    grep -r "--p-color-" src/ --include="*.css" --include="*.scss"
    

常见问题解决

迁移后验证正则表达式

// 检查未迁移的文本组件
/<(DisplayText|Heading|Subheading|Caption|TextStyle|VisuallyHidden)[\s>]/g

// 检查未迁移的布局组件  
/<(Stack|Card|Filters|Tabs|Inline)[\s>]/g

// 检查未迁移的breadcrumbs属性
/breadcrumbs(=| )/g

样式覆盖处理

如果项目中有自定义样式覆盖,需要手动更新类名:

/* v10 自定义样式 */
.Polaris-DisplayText--sizeLarge {
  font-size: 2rem;
}

/* v11 需要更新为 */
.Polaris-Text--variantHeading2xl {
  font-size: 2rem;
}

性能优化建议

迁移后的包大小优化

# 分析包大小
npx webpack-bundle-analyzer dist/main.js

# 移除不再使用的组件引用
import { 
  DisplayText, 
  Heading, 
  // 其他已移除组件...
} from '@shopify/polaris'; // ← 移除这些导入

Tree Shaking 优化

确保只导入需要的组件:

// 推荐:按需导入
import { Text, Card, Button } from '@shopify/polaris';

// 避免:整体导入
import * as Polaris from '@shopify/polaris';

总结

Shopify Polaris v11 的迁移虽然涉及多个重大变更,但通过系统化的迁移策略和工具支持,可以相对顺利地完成升级。关键步骤包括:

  1. 环境准备:确保 Node.js、React、Webpack 满足最低要求
  2. 组件迁移:使用官方迁移工具自动化处理文本组件和布局组件
  3. 令牌更新:迁移设计令牌到新命名规范
  4. 全面测试:验证所有功能正常,处理边缘情况

遵循本文的迁移指南,您将能够高效、安全地将项目从 Polaris v10 升级到 v11,享受新版本带来的性能改进和开发体验提升。

立即行动:开始您的迁移之旅,体验 Polaris v11 更现代化、更一致的组件库!

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

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值