如何在编译后转换样式词典变量.js 的约定。忽略它们的父样式文件夹

问题描述 投票:0回答:2

这是我的transform-token.js 文件:

const StyleDictionary = require('style-dictionary');
const baseConfig = require('./style-dictionary.config.json');

StyleDictionary.registerTransform({
  name: 'size/px',
  type: 'value',
  matcher: token => {
    return (token.unit === 'pixel' || token.type === 'dimension') && token.value !== 0;
  },
  transformer: token => {
    return `${token.value}px`;
  },
});

StyleDictionary.registerTransform({
  name: 'size/percent',
  type: 'value',
  matcher: token => {
    return token.unit === 'percent' && token.value !== 0;
  },
  transformer: token => {
    return `${token.value}%`;
  },
});

StyleDictionary.registerTransformGroup({
  name: 'custom/css',
  transforms: StyleDictionary.transformGroup['css'].concat([
    'size/px',
    'size/percent',
  ]),
});

// StyleDictionary.registerFilter({
//   name: 'validToken',
//   matcher: function(token) {
//     return ['dimension', 'string', 'number', 'color'].includes(token.type)
//   }
// });

StyleDictionary
  .extend(baseConfig)
  .buildAllPlatforms();

当我们构建时,我们得到这个:TypographyTypographyHeadersSubheadersSubheading1400,而不是得到类似:“Subheading1400”

这就是令牌导出到其typography.json的方式

{
  "typography": {
    "typography": {
      "headers": {
        "subheaders": {
          "subheading1-400": {
            "value": {
              "font": {
                "type": "font",
                "value": {
                  "family": {
                    "type": "string",
                    "value": "Plus Jakarta Sans"
                  },
                  "subfamily": {
                    "type": "string",
                    "value": "Regular"
                  }
                }
              },

它似乎正在从 Figma 中获取此样式的所有父文件夹并将其放入变量名称中。

我确实编辑了 js 文件,但我不完全确定要解决什么问题。

javascript token figma style-dictionary
2个回答
0
投票

嗯...您需要对您的

transform-token.js
文件进行一些小调整

现在,命名约定似乎包括 Figma 中样式的父文件夹,这导致了您所描述的问题。

您需要更新

name
方法中的
extend
属性以避免这种情况。

它看起来像这样:

StyleDictionary
  .extend({ ...baseConfig, name: "Subheading1400" })
  .buildAllPlatforms();

这将确保您导出的令牌被命名为

Subheading1400
而不是
TypographyTypographyHeadersSubheadersSubheading1400


0
投票

名称转换负责为输出构建令牌名称。没有内置转换可以从令牌路径返回最后一段,但很容易添加:

styleDictionary.registerTransform({
  name: "name/tail",
  type: "name",
  transformer: (token) => {
    token.original["name"] = token.name;
    token.name = token.path[token.path.length - 1];
  
    return token.name || {};
  },
});

然后您只需将

name/tail
添加到您的自定义变换组即可。

© www.soinside.com 2019 - 2024. All rights reserved.