【Figma Tokens × Style Dictionary 설계 시스템의 첫 번째 단계
컨텐트
Figma Tokens
에서 정의한 디자인 영패를 React
등 앞쪽에서 사용하기 쉽게 하다간단한 시도!5steps
install
Token Transformer
와Style Dictionary
의install$ npm install -D token-transformer
$ npm install -D style-dictionary
Include parent key
의 검사 오픈Export
token-transformer
$ node token-transformer tokens.json output.json
or
$ ./node_modules/.bin/token-transformer tokens.json output.json
config.json
style-dictionary.config.json
{
"source": ["output.json"],
"platforms": {
"scss": {
"buildPath": "src/tokens/",
"transformGroup": "scss",
"files": [{
"destination": "tokens.scss",
"format": "scss/map-deep",
"mapName":"css-tokens",
"options": {
"outputReferences": true
}
}]
},
"ts": {
"buildPath": "src/tokens/",
"transformGroup": "js",
"files": [
{
"format": "javascript/module",
"destination": "tokens.js"
},
{
"format": "typescript/module-declarations",
"destination": "tokens.d.ts"
}
]
}
}
}
build
config 파일에 별명을 붙인 경우 지정
--config
$ style-dictionary build --config style-dictionary.config.json
npm-run-all를 사용하여 json의 변환과token의 생성을 한데 모을 수 있습니다.package.json
"tokne:genJson": "./node_modules/.bin/token-transformer tokens.json output.json",
"token:genToken": "style-dictionary build --config style-dictionary.config.json",
"token": "run-s tokne:genJson token:genToken"
상세히
원래 디자인된 영패는?
여러 곳에서 사용하시는 게 좋아요!야단을 맞다.
Figma Tokens
Figma에서 Figma Tokens를 열 때의 화면은 다음과 같습니다.
더하기 아이콘을 누르면 Token을 추가할 수 있습니다.
컬러톡 추가 시 화면.컬러 코드 등을 지정할 수 있습니다.
기존 Token을 지정할 때 중괄호로 지정합니다.e.g.
{color.palette.red.060}
Token을 설정한 후 json 파일을 내보냅니다.
설정은 별다른 변경 없이 유지
Include parent key: on
하면 된다.다운로드한 파일은
tokens.json
입니다.다운로드한 파일의 내용은 다음과 같습니다.
다음 파일을
package.json
레벨과 동일하게 구성합니다.token.json
tokens.json
{
"global": {
"space": {
"refs": {
"8": {
"value": "8",
"type": "spacing"
}
}
},
"color": {
"palette": {
"red": {
"070": {
"value": "#A1160A",
"type": "color"
},
"060": {
"value": "#D91F11",
"type": "color"
},
"050": {
"value": "#FA5343",
"type": "color"
}
},
"blue": {
"070": {
"value": "#0D4EA6",
"type": "color"
},
"060": {
"value": "#186ADE",
"type": "color"
},
"050": {
"value": "#3D8DF5",
"type": "color"
}
}
},
"button": {
"primary": {
"value": "{color.palette.blue.060}",
"type": "color"
},
"destructive": {
"value": "{color.palette.red.060}",
"type": "color"
}
}
}
}
}
Token Transformer
Figma에서 다운로드한 json 파일별명 포함을 사용하여
token-transformer
로 변환합니다.일단 설치.
$ npm install -D token-transformer
변환은 다음 명령만 수행합니다.output.json
는 변환된 파일 이름입니다.$ node token-transformer tokens.json output.json
노드의 path를 통과하지 못하면 다음과 같이 실행할 수 있을 것 같습니다.$ ./node_modules/.bin/token-transformer tokens.json output.json
Style Dictionary
Style Dictionary에 config 파일가 필요하기 때문에 준비해야 합니다.
package.json
와 같은 레벨에서 만들기style-dictionary.config.json
.변환 방법을 정의합니다
output.json
.이번 생성
scss
과 js
파일.다음 링크는 참조된 공식 형식 페이지입니다.
buildPath
의 디렉터리에서 destination
에서 지정한 파일 이름을 사용할 수 있습니다.style-dictionary.config.json
{
"source": ["output.json"],
"platforms": {
"scss": {
"buildPath": "src/tokens/",
"transformGroup": "scss",
"files": [{
"destination": "tokens.scss",
"format": "scss/map-deep",
"mapName":"css-tokens",
"options": {
"outputReferences": true
}
}]
},
"ts": {
"buildPath": "src/tokens/",
"transformGroup": "js",
"files": [
{
"format": "javascript/module",
"destination": "tokens.js"
},
{
"format": "typescript/module-declarations",
"destination": "tokens.d.ts"
}
]
}
}
}
다음 명령을 실행하여 지정한 파일을 생성할 수 있습니다.$ style-dictionary build --config style-dictionary.config.json
생성된 파일은 다음과 같습니다.tokens.scss
src/tokens/tokens.scss
/**
* Do not edit directly
* Generated on Tue, 05 Apr 2022 10:35:30 GMT
*/
$color-button-destructive: #d91f11 !default;
$color-button-primary: #186ade !default;
$color-palette-blue-050: #3d8df5 !default;
$color-palette-blue-060: #186ade !default;
$color-palette-blue-070: #0d4ea6 !default;
$color-palette-red-050: #fa5343 !default;
$color-palette-red-060: #d91f11 !default;
$color-palette-red-070: #a1160a !default;
$space-refs-8: 8 !default;
$css-tokens: (
'space': (
'refs': (
'8': $space-refs-8
)
),
'color': (
'palette': (
'red': (
'070': $color-palette-red-070,
'060': $color-palette-red-060,
'050': $color-palette-red-050
),
'blue': (
'070': $color-palette-blue-070,
'060': $color-palette-blue-060,
'050': $color-palette-blue-050
)
),
'button': (
'primary': $color-button-primary,
'destructive': $color-button-destructive
)
)
);
tokens.d.tssrc/tokens/tokens.d.ts
/**
* Do not edit directly
* Generated on Tue, 05 Apr 2022 10:35:30 GMT
*/
export default tokens;
declare interface DesignToken {
value: any;
name?: string;
comment?: string;
themeable?: boolean;
attributes?: {
category?: string;
type?: string;
item?: string;
subitem?: string;
state?: string;
[key: string]: any;
};
[key: string]: any;
}
declare const tokens: {
"space": {
"refs": {
"8": DesignToken
}
},
"color": {
"palette": {
"red": {
"070": DesignToken,
"060": DesignToken,
"050": DesignToken
},
"blue": {
"070": DesignToken,
"060": DesignToken,
"050": DesignToken
}
},
"button": {
"primary": DesignToken,
"destructive": DesignToken
}
}
}
tokens.jssrc/tokens/tokens.js
/**
* Do not edit directly
* Generated on Tue, 05 Apr 2022 10:35:30 GMT
*/
module.exports = {
"space": {
"refs": {
"8": {
"value": 8,
"type": "spacing",
"filePath": "output.json",
"isSource": true,
"original": {
"value": 8,
"type": "spacing"
},
"name": "SpaceRefs8",
"attributes": {
"category": "space",
"type": "refs",
"item": "8"
},
"path": [
"space",
"refs",
"8"
]
}
}
},
"color": {
"palette": {
"red": {
"070": {
"value": "#a1160a",
"type": "color",
"filePath": "output.json",
"isSource": true,
"original": {
"value": "#A1160A",
"type": "color"
},
"name": "ColorPaletteRed070",
"attributes": {
"category": "color",
"type": "palette",
"item": "red",
"subitem": "070"
},
"path": [
"color",
"palette",
"red",
"070"
]
},
"060": {
"value": "#d91f11",
"type": "color",
"filePath": "output.json",
"isSource": true,
"original": {
"value": "#D91F11",
"type": "color"
},
"name": "ColorPaletteRed060",
"attributes": {
"category": "color",
"type": "palette",
"item": "red",
"subitem": "060"
},
"path": [
"color",
"palette",
"red",
"060"
]
},
"050": {
"value": "#fa5343",
"type": "color",
"filePath": "output.json",
"isSource": true,
"original": {
"value": "#FA5343",
"type": "color"
},
"name": "ColorPaletteRed050",
"attributes": {
"category": "color",
"type": "palette",
"item": "red",
"subitem": "050"
},
"path": [
"color",
"palette",
"red",
"050"
]
}
},
"blue": {
"070": {
"value": "#0d4ea6",
"type": "color",
"filePath": "output.json",
"isSource": true,
"original": {
"value": "#0D4EA6",
"type": "color"
},
"name": "ColorPaletteBlue070",
"attributes": {
"category": "color",
"type": "palette",
"item": "blue",
"subitem": "070"
},
"path": [
"color",
"palette",
"blue",
"070"
]
},
"060": {
"value": "#186ade",
"type": "color",
"filePath": "output.json",
"isSource": true,
"original": {
"value": "#186ADE",
"type": "color"
},
"name": "ColorPaletteBlue060",
"attributes": {
"category": "color",
"type": "palette",
"item": "blue",
"subitem": "060"
},
"path": [
"color",
"palette",
"blue",
"060"
]
},
"050": {
"value": "#3d8df5",
"type": "color",
"filePath": "output.json",
"isSource": true,
"original": {
"value": "#3D8DF5",
"type": "color"
},
"name": "ColorPaletteBlue050",
"attributes": {
"category": "color",
"type": "palette",
"item": "blue",
"subitem": "050"
},
"path": [
"color",
"palette",
"blue",
"050"
]
}
}
},
"button": {
"primary": {
"value": "#186ade",
"type": "color",
"filePath": "output.json",
"isSource": true,
"original": {
"value": "#186ADE",
"type": "color"
},
"name": "ColorButtonPrimary",
"attributes": {
"category": "color",
"type": "button",
"item": "primary"
},
"path": [
"color",
"button",
"primary"
]
},
"destructive": {
"value": "#d91f11",
"type": "color",
"filePath": "output.json",
"isSource": true,
"original": {
"value": "#D91F11",
"type": "color"
},
"name": "ColorButtonDestructive",
"attributes": {
"category": "color",
"type": "button",
"item": "destructive"
},
"path": [
"color",
"button",
"destructive"
]
}
}
}
};
그다음에 쓰고 싶은 데만 import 사용하세요!
Reference
이 문제에 관하여(【Figma Tokens × Style Dictionary 설계 시스템의 첫 번째 단계), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kosukek/articles/c86b34b847a9f2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)