0

非常简单的问题,我正在注册一个转换,而转换器需要一个项目,实际上是一个设计令牌,它位于我正在应用此转换的同一个文件中。所以我需要dictionary.properties通过它来访问来检索这个元素name,用于转换所有其他元素。

    this.#handler.registerTransform({
      name: 'my/size/transform',
      type: 'value',
      matcher: (prop) => {
        return prop?.attributes?.category === 'size'
      },
      transformer: (prop, options) => {
        return parseFloat(prop.original.value) + [A DESIGN TOKEN DATA COMING FROM DICTIONARY];
      }
    })

transformer我只能访问propand options,还不够,而且我认为它也不是可用的信息this.#handler(澄清this.#handler = require('style-dictionary'))是否可以访问此信息?谢谢

4

1 回答 1

0

我发现了这种方法,因为有prop.filePath信息,所以我直接从文件系统中读取它并将其解析为一个对象。它有效,我没有看到性能大幅下降(因为此访问是在循环中完成的),但它有效:

    this.#handler.registerTransform({
      name: 'my/size/transform',
      type: 'value',
      matcher: (prop) => {
        return prop?.attributes?.category === 'size'
      },
      transformer: (prop) => {
        const dictionary = JSON.parse(
          fs.readFileSync(prop.filePath).toString()
        )
        return parseFloat(prop.original.value) + dictionary['design-token-to-fetch'].value;
      }
    })

也许像这样减少文件系统访问:

    let dictionary: any

    this.#handler.registerTransform({
      name: 'my/size/transform',
      type: 'value',
      matcher: (prop) => {
        return prop?.attributes?.category === 'size'
      },
      transformer: (prop) => {
        dictionary ??= JSON.parse(
          fs.readFileSync(prop.filePath).toString()
        )
        return parseFloat(prop.original.value) + dictionary['design-token-to-fetch'].value;
      }
    })

更好的想法非常受欢迎!

于 2021-09-23T06:26:46.430 回答