非常简单的问题,我注册了一个转换,转换器需要一个项目,实际上是一个设计令牌,它位于我应用这个转换的同一个文件中。因此,我需要访问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中,我只能访问prop和options,这是不够的,而且我认为在this.#handler中也没有可用的信息(为了澄清this.#handler = require('style-dictionary'))可以访问这些信息吗?谢谢
发布于 2021-09-23 06:26:46
我发现了这种方法,因为有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;
}
})更好的想法是非常受欢迎的!
https://stackoverflow.com/questions/69285142
复制相似问题