能否仅将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
相关产品推荐
相关产品推荐

