You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否仅将Style-Dictionary用作函数库,跳过文件导出步骤?

复用Style-Dictionary的Token打磨逻辑(无需导出文件)

核心思路

Style-Dictionary本身支持不执行文件构建流程,直接调用核心API处理Token,你可以跳过sd.buildAllPlatforms(),单独复用Token打磨逻辑。

具体实现步骤

1. 抽离打磨逻辑为独立模块

把build-tokens.js里的手动打磨、自定义转换逻辑抽成单独的工具模块,方便跨脚本调用:

// utils/tokenProcessor.js
const StyleDictionary = require('style-dictionary');

// 注册你的自定义转换规则(如果之前有)
StyleDictionary.registerTransform({
  name: 'custom/color-adjust',
  type: 'value',
  matcher: token => token.attributes.category === 'color',
  transformer: token => {
    // 你的自定义打磨逻辑示例
    return token.value.replace('#', '0x');
  }
});

// 核心Token处理函数
function processRawTokens(rawTokens) {
  // 初始化Style-Dictionary实例,仅传入Token和必要转换配置
  const sd = new StyleDictionary({
    tokens: rawTokens,
    transformGroup: 'css' // 或你自定义的转换组
    // 无需配置platforms,因为不导出文件
  });

  // 执行内置转换,拿到处理后的Token树
  const processedTokens = sd.extend(rawTokens).tokens;

  // 叠加你的手动打磨逻辑
  const polishedTokens = polishTokens(processedTokens);
  
  return polishedTokens;
}

// 你的手动打磨函数(比如扁平化结构、修改命名)
function polishTokens(tokens) {
  return Object.keys(tokens).reduce((acc, key) => {
    acc[`ds-${key}`] = tokens[key].value;
    return acc;
  }, {});
}

module.exports = { processRawTokens };

2. 在其他脚本中直接调用

比如在Storybook配置或其他工具脚本里复用:

// .storybook/preview.js 示例
const { processRawTokens } = require('../utils/tokenProcessor');
const rawTokens = require('../tokens.json');

// 直接获取打磨后的Token
const finalTokens = processRawTokens(rawTokens);

// 示例:在Storybook中全局注入Token
export const parameters = {
  themes: {
    default: 'light',
    list: [
      { name: 'light', tokens: finalTokens }
    ]
  }
};

关键API说明

  • new StyleDictionary(config):初始化实例时无需配置platforms,避免触发文件生成流程
  • sd.extend(tokens):加载原始Token并应用注册的转换规则
  • sd.tokens:获取经过Style-Dictionary内置处理后的Token结构,可直接叠加自定义打磨逻辑

内容的提问来源于stack exchange,提问作者MacGregor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 07:53:12