Liquid 开发 · 整理与归档

主题开发工作流程

主题开发工作流程 建立一个高效的主题开发工作流程对于成功的 Shopify 项目至关重要。本指南将介绍从项目初始化到生产部署的完整工作流程。 开发流程概览 1\. 项目初始化 创建新项目 项目结构设置 配置文件设置 2\. 开发环境

主题开发工作流程

建立一个高效的主题开发工作流程对于成功的 Shopify 项目至关重要。本指南将介绍从项目初始化到生产部署的完整工作流程。

开发流程概览

1. 项目初始化

创建新项目

# 创建项目目录
mkdir my-shopify-theme
cd my-shopify-theme
 
# 初始化 Shopify 主题
shopify theme init .
 
# 初始化 Git 仓库
git init
git add .
git commit -m "Initial commit: Shopify theme setup"

项目结构设置

my-shopify-theme/
├── .git/
├── .shopifyignore
├── .gitignore
├── package.json
├── README.md
├── assets/
├── config/
├── layout/
├── locales/
├── sections/
├── snippets/
├── templates/
└── docs/

配置文件设置

// package.json
{
  "name": "my-shopify-theme",
  "version": "1.0.0",
  "description": "Custom Shopify theme",
  "scripts": {
    "dev": "shopify theme dev",
    "watch": "shopify theme dev --live-reload",
    "pull": "shopify theme pull",
    "push": "shopify theme push",
    "check": "shopify theme check",
    "deploy:staging": "shopify theme push --store=staging-store.myshopify.com",
    "deploy:production": "shopify theme push --store=production-store.myshopify.com --live"
  },
  "devDependencies": {
    "@shopify/cli": "latest",
    "@shopify/theme": "latest"
  }
}
# .gitignore
.shopify/
node_modules/
.env
.DS_Store
*.log
config/settings_data.json
# .shopifyignore
node_modules/
.git/
.env
*.md
docs/
.vscode/
*.log

2. 开发环境配置

多环境管理

# 开发环境
export SHOPIFY_FLAG_STORE="dev-store.myshopify.com"
export SHOPIFY_FLAG_THEME_ID="123456789"
 
# 测试环境
export SHOPIFY_STAGING_STORE="staging-store.myshopify.com"
export SHOPIFY_STAGING_THEME_ID="987654321"
 
# 生产环境
export SHOPIFY_PRODUCTION_STORE="production-store.myshopify.com"
export SHOPIFY_PRODUCTION_THEME_ID="111222333"

VS Code 工作区配置

// .vscode/settings.json
{
  "liquid.format.enable": true,
  "files.associations": {
    "*.liquid": "liquid"
  },
  "emmet.includeLanguages": {
    "liquid": "html"
  },
  "liquid.engine": "shopify",
  "editor.formatOnSave": true,
  "liquid.format.indentWidth": 2
}
// .vscode/tasks.json
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Start Development Server",
      "type": "shell",
      "command": "shopify",
      "args": ["theme", "dev"],
      "group": "build",
      "presentation": {
        "echo": true,
        "reveal": "always",
        "focus": false,
        "panel": "new"
      }
    },
    {
      "label": "Pull Latest Theme",
      "type": "shell",
      "command": "shopify",
      "args": ["theme", "pull"],
      "group": "build"
    }
  ]
}

3. 本地开发流程

日常开发工作流

# 1. 启动开发会话
git checkout -b feature/new-feature
shopify theme pull  # 拉取最新更改
 
# 2. 启动开发服务器
shopify theme dev --live-reload
 
# 3. 并行开发
# 在另一个终端进行代码编辑
# 浏览器自动刷新显示更改
 
# 4. 定期提交更改
git add .
git commit -m "feat: add new product card component"
 
# 5. 推送到远程分支
git push origin feature/new-feature

代码组织原则

<!-- 组件化开发示例 -->
<!-- snippets/product-card.liquid -->
<div class="product-card" {{ block.shopify_attributes }}>
  {% render 'product-image', product: product %}
  {% render 'product-info', product: product %}
  {% render 'product-actions', product: product %}
</div>
 
<!-- snippets/product-image.liquid -->
<div class="product-image">
  {% if product.featured_image %}
    <img src="{{ product.featured_image | image_url: width: 300, height: 300 }}"
         alt="{{ product.featured_image.alt | escape }}"
         loading="lazy">
  {% endif %}
</div>
 
<!-- snippets/product-info.liquid -->
<div class="product-info">
  <h3 class="product-title">{{ product.title }}</h3>
  <div class="product-price">{{ product.price | money }}</div>
</div>

4. 测试和质量保证

自动化检查

# 运行主题检查
shopify theme check
 
# 检查特定目录
shopify theme check templates/
shopify theme check sections/
 
# 生成检查报告
shopify theme check --output=json > theme-check-report.json

浏览器测试清单

## 测试清单
 
### 响应式测试
- [ ] 桌面端 (1920x1080)
- [ ] 平板端 (768x1024)
- [ ] 手机端 (375x667)
- [ ] 大屏幕 (2560x1440)
 
### 浏览器兼容性
- [ ] Chrome (最新版本)
- [ ] Safari (最新版本)
- [ ] Firefox (最新版本)
- [ ] Edge (最新版本)
 
### 功能测试
- [ ] 产品页面
- [ ] 购物车功能
- [ ] 结账流程
- [ ] 搜索功能
- [ ] 导航菜单
- [ ] 表单提交
 
### 性能测试
- [ ] Lighthouse 性能评分 > 90
- [ ] 首屏加载时间 < 3s
- [ ] 图片优化
- [ ] CSS/JS 压缩

性能监控

<!-- 性能监控代码 -->
<script>
// 页面加载时间监控
window.addEventListener('load', function() {
  const loadTime = performance.timing.loadEventEnd - performance.timing.navigationStart;
  console.log('Page load time:', loadTime + 'ms');
  
  // 发送到分析服务
  if (typeof gtag !== 'undefined') {
    gtag('event', 'timing_complete', {
      'name': 'load',
      'value': loadTime
    });
  }
});
 
// Core Web Vitals 监控
import {getCLS, getFID, getFCP, getLCP, getTTFB} from 'web-vitals';
 
getCLS(console.log);
getFID(console.log);
getFCP(console.log);
getLCP(console.log);
getTTFB(console.log);
</script>

5. 版本控制工作流

Git 分支策略

# 主要分支
main        # 生产环境代码
develop     # 开发环境代码
staging     # 测试环境代码
 
# 功能分支
feature/新功能名称
fix/bug修复名称
hotfix/紧急修复

提交消息规范

# 提交消息格式
type(scope): description
 
# 类型
feat:     新功能
fix:      bug修复
docs:     文档更新
style:    代码格式调整
refactor: 重构
perf:     性能优化
test:     测试相关
chore:    构建工具等
 
# 示例
feat(product): add variant selector
fix(cart): resolve quantity update issue
docs(readme): update installation guide
style(header): improve navigation spacing

代码审查流程

# 1. 创建 Pull Request
git checkout -b feature/new-component
# 开发功能...
git commit -m "feat(components): add testimonial section"
git push origin feature/new-component
 
# 2. 代码审查清单
- 代码质量和可读性
- 性能影响
- 移动端兼容性
- 安全性检查
- 文档完整性
 
# 3. 合并到主分支
git checkout develop
git merge feature/new-component
git push origin develop

6. 部署策略

自动化部署脚本

#!/bin/bash
# deploy.sh
 
set -e
 
ENVIRONMENT=$1
THEME_ID=$2
 
if [ -z "$ENVIRONMENT" ] || [ -z "$THEME_ID" ]; then
    echo "Usage: ./deploy.sh <environment> <theme_id>"
    exit 1
fi
 
echo "Deploying to $ENVIRONMENT environment..."
 
# 检查代码质量
echo "Running theme check..."
shopify theme check
 
# 备份当前主题
echo "Creating backup..."
shopify theme pull --theme-id=$THEME_ID --dir=backup/$(date +%Y%m%d_%H%M%S)
 
# 部署新版本
echo "Deploying new version..."
shopify theme push --theme-id=$THEME_ID
 
echo "Deployment completed successfully!"

CI/CD 配置

# .github/workflows/deploy.yml
name: Deploy Shopify Theme
 
on:
  push:
    branches:
      - main
      - staging
 
jobs:
  deploy:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout code
      uses: actions/checkout@v3
      
    - name: Setup Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '18'
        
    - name: Install Shopify CLI
      run: npm install -g @shopify/cli @shopify/theme
      
    - name: Run theme check
      run: shopify theme check
      
    - name: Deploy to staging
      if: github.ref == 'refs/heads/staging'
      env:
        SHOPIFY_CLI_TOKEN: ${{ secrets.SHOPIFY_CLI_TOKEN }}
        SHOPIFY_FLAG_STORE: ${{ secrets.STAGING_STORE }}
      run: shopify theme push --theme-id=${{ secrets.STAGING_THEME_ID }}
      
    - name: Deploy to production
      if: github.ref == 'refs/heads/main'
      env:
        SHOPIFY_CLI_TOKEN: ${{ secrets.SHOPIFY_CLI_TOKEN }}
        SHOPIFY_FLAG_STORE: ${{ secrets.PRODUCTION_STORE }}
      run: shopify theme push --theme-id=${{ secrets.PRODUCTION_THEME_ID }}

7. 监控和维护

错误追踪

<!-- 错误监控集成 -->
<script>
window.addEventListener('error', function(e) {
  // 发送错误信息到监控服务
  fetch('/api/errors', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      message: e.message,
      filename: e.filename,
      lineno: e.lineno,
      colno: e.colno,
      stack: e.error ? e.error.stack : null,
      userAgent: navigator.userAgent,
      url: window.location.href,
      timestamp: new Date().toISOString()
    })
  });
});
</script>

性能监控

<!-- 性能指标收集 -->
<script>
// 收集关键性能指标
function collectPerformanceMetrics() {
  const navigation = performance.getEntriesByType('navigation')[0];
  const paint = performance.getEntriesByType('paint');
  
  const metrics = {
    // 导航时间
    dns: navigation.domainLookupEnd - navigation.domainLookupStart,
    tcp: navigation.connectEnd - navigation.connectStart,
    ttfb: navigation.responseStart - navigation.requestStart,
    download: navigation.responseEnd - navigation.responseStart,
    domInteractive: navigation.domInteractive - navigation.navigationStart,
    domComplete: navigation.domComplete - navigation.navigationStart,
    
    // 绘制时间
    fcp: paint.find(p => p.name === 'first-contentful-paint')?.startTime,
    
    // 页面信息
    url: window.location.href,
    timestamp: new Date().toISOString()
  };
  
  // 发送到分析服务
  sendMetrics(metrics);
}
 
// 页面加载完成后收集指标
window.addEventListener('load', collectPerformanceMetrics);
</script>

8. 最佳实践总结

开发最佳实践

  1. 模块化开发

    • 使用 snippets 创建可复用组件
    • 分离关注点,将样式、脚本和模板分开
    • 使用语义化的文件命名
  2. 性能优化

    • 图片懒加载和响应式图片
    • CSS 和 JavaScript 压缩
    • 减少 HTTP 请求数量
  3. 代码质量

    • 定期运行 shopify theme check
    • 遵循编码规范和命名约定
    • 编写清晰的注释和文档
  4. 安全性

    • 对用户输入进行转义
    • 使用 HTTPS
    • 定期更新依赖

团队协作

  1. 文档维护

    • 保持 README 文件更新
    • 记录重要的设计决策
    • 维护变更日志
  2. 沟通协调

    • 定期代码审查
    • 使用问题跟踪系统
    • 设置开发和部署通知

下一步

掌握了工作流程后,建议继续学习:

  1. Liquid 语法详解
  2. 变量和对象
  3. 主题开发实战
  4. 性能优化

良好的工作流程是成功项目的基础,它能帮助您更高效、更安全地开发和维护 Shopify 主题!