Golang Sass 3.5 컴파일러 go-libsass 라이브러리 알아보기

오늘은 Golang으로 Sass 컴파일러인 LibSass를 랩핑한 go-libsass 라이브러리를 알아보려 합니다.

go-libsass 설치

우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.

맥에서 brew로 쉽게 설치할 수 있습니다.

brew install go

우분투에서도 apt로 쉽게 설치할 수 있습니다.

sudo apt-get install golang-go

go get으로 go-libsass 패키지를 설치합니다.

go get github.com/wellington/go-libsass

홈의 go 폴더에 go-libsass 소스코드와 패키지 파일이 생성됩니다.

샘플 scss

Sass 컴파일러에 사용할 Sass를 준비합니다.

@import "settings";

div {
    p { color: $bg;}
  }

div {
    p { color: black; }
}


div { 
    text: crypto(); 
}

div {}

import로 가져올 파일을 아래와 같이 작성합니다.

$bg: red

예제

package main

해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.


import (
	"crypto/rand"
	"fmt"
	"os"

	"golang.org/x/net/context"

	libsass "github.com/wellington/go-libsass"
)

fmt, os, context, rand 그리고 go-libsass를 가져옵니다.

func marshal(ctx context.Context, usv libsass.SassValue) (*libsass.SassValue, error) {
	b := make([]byte, 10)
	rand.Read(b)
	res, err := libsass.Marshal(fmt.Sprintf("'%x'", b))
	return &res, err
}

Sass 함수를 만들 수 있습니다.

func main() {
	r, err := os.Open("main.scss")

	if err != nil {
		panic(err)
	}

main.scss를 가져옵니다.

	libsass.RegisterSassFunc("crypto()", marshal)

이전에 만든 Sass 함수를 Sass 컴파일에서 사용할 수 있도록 등록합니다.

	libsass.RegisterHeader(`
/*
 * RegisterHeader
 */`)

헤더를 추가하여 컴파일된 scss에서 나타낼 수 있습니다.

	compiler, err := libsass.New(os.Stdout, r)

	if err != nil {
		panic(err)
	}

컴파일러 객체를 반환합니다.

	path := []string{"config"}
	err = compiler.Option(libsass.IncludePaths(path))
	if err != nil {
		log.Fatal(err)
	}

config 폴더를 만들어서 해당 폴더의 scss를 찾을 수 있게 합니다.

해당 config 폴더에 _settings.scss 파일을 두고 메인 scss에서 import하면 됩니다.

	if err := compiler.Run(); err != nil {
		panic(err)
	}
}

컴파일을 진행하고, os.Stdout에 의해 화면에 컴파일된 결과가 출력됩니다.

Written on August 11, 2019