Как в golang сделать компрессию js/css файлов?

Пользователь

от akeem , в категории: HTML/CSS , год назад

Как в golang сделать компрессию js/css файлов?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от kyleigh_runte , год назад

@akeem 

В Go есть несколько пакетов, которые могут помочь сжать и минимизировать файлы JavaScript и CSS. Вот несколько примеров:

  1. github.com/tdewolff/minify - это пакет, который позволяет сжимать и минимизировать различные типы файлов, включая JavaScript и CSS. Вы можете установить его с помощью команды go get github.com/tdewolff/minify. Вот пример его использования:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main

import (
    "fmt"
    "io/ioutil"

    "github.com/tdewolff/minify"
    "github.com/tdewolff/minify/js"
    "github.com/tdewolff/minify/css"
)

func main() {
    input, err := ioutil.ReadFile("script.js")
    if err != nil {
        panic(err)
    }

    m := minify.New()
    m.AddFunc("text/javascript", js.Minify)
    m.AddFunc("text/css", css.Minify)

    compressed, err := m.Bytes("text/javascript", input)
    if err != nil {
        panic(err)
    }

    fmt.Println(string(compressed))
}


  1. github.com/tdewolff/parse - еще один пакет от того же автора, который позволяет разбирать и минимизировать CSS файлы. Вы можете установить его с помощью команды go get github.com/tdewolff/parse. Вот пример его использования:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main

import (
    "fmt"
    "io/ioutil"

    "github.com/tdewolff/parse/v2/css"
)

func main() {
    input, err := ioutil.ReadFile("styles.css")
    if err != nil {
        panic(err)
    }

    stylesheet, err := css.Parse(input, false)
    if err != nil {
        panic(err)
    }

    // Минимизировать стили
    stylesheet.Minify().WriteToIndent(nil)

    fmt.Println(css.Print(stylesheet))
}


  1. github.com/gorilla/handlers - это пакет, предлагающий HTTP-обработчики для обработки сжатия и минимизации файлов. Вы можете установить его с помощью команды go get github.com/gorilla/handlers. Вот пример его использования:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package main

import (
    "net/http"
    "github.com/gorilla/handlers"
)

func main() {
    // Обработчик для сжатия и минимизации файлов
    http.Handle("/static/", handlers.CompressHandler(http.StripPrefix("/static/", http.FileServer(http.Dir("./static")))))

    // Запуск сервера
    http.ListenAndServe(":8080", nil)
}


Указанные выше пакеты могут помочь вам сжать и минимизировать файлы JavaScript и CSS в Go. Вы можете использовать эти пакеты в своем проекте, чтобы достичь требуемой компрессии файлов.

Пользователь

от maymie , 7 месяцев назад

@akeem 

Если вы хотите просто скомпрессировать JavaScript и CSS файлы без минимизации, можно воспользоваться стандартной библиотекой "compress/gzip" в Go. Вот пример использования для компрессии JS и CSS файлов:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package main

import (
	"bytes"
	"compress/gzip"
	"io/ioutil"
	"os"
)

func compressFile(inputPath string, outputPath string) error {
	// Чтение содержимого файла
	input, err := ioutil.ReadFile(inputPath)
	if err != nil {
		return err
	}

	// Создание gzip буфера
	var b bytes.Buffer
	gz := gzip.NewWriter(&b)

	// Копирование содержимого в gzip буфер
	_, err = gz.Write(input)
	if err != nil {
		return err
	}

	// Закрытие gzip буфера
	err = gz.Close()
	if err != nil {
		return err
	}

	// Запись сжатых данных в файл
	err = ioutil.WriteFile(outputPath, b.Bytes(), os.ModePerm)
	if err != nil {
		return err
	}

	return nil
}

func main() {
	err := compressFile("script.js", "script.js.gz")
	if err != nil {
		panic(err)
	}

	err = compressFile("styles.css", "styles.css.gz")
	if err != nil {
		panic(err)
	}
}


Этот код сначала считывает содержимое JS/CSS файла, затем сжимает его с помощью gzip и записывает сжатые данные в новый файл с расширением .gz. Вы можете адаптировать этот код для своих нужд и использовать его в своем проекте для компрессии файлов.