Это четвертая часть из четырех частей, в которых мы продемонстрируем создание веб-приложения с использованием Go и Vue и, наконец, объединим все это в один двоичный файл для сверхлегкого развертывания / распространения. Часть 1 можно найти здесь, часть 2 здесь, а часть 3 здесь.

В части 1 мы создали приложения Go и Vue. Во второй части мы изменили приложение Go, чтобы оно автоматически запускало приложение Vue, запустив Node, когда версия приложения - «разработка». В части 3 мы собрали все это в один скомпилированный двоичный файл. В этой статье, чтобы облегчить себе жизнь, мы собираемся использовать инструмент make для создания всего.

Если вы помните, нам пришлось запустить эти команды, чтобы создать финальную сборку.

$ cd app
$ npm run build
$ cd ..
$ go generate
$ go build -tags=prod -ldflags="-X 'main.Version=1.0.0'"

Это много шагов. Давайте упростим. Я начну с демонстрации всего Makefile, а затем мы его разберем.

Линия 1 проста. В нем указано, что когда мы запускаем make, действие по умолчанию - запустить, что означает выполнение сценария в строке 17.

Строка 4 - это переменная, определяющая путь к UPX. UPX - отличный инструмент для сжатия исполняемых файлов. Зачем мне это нужно? Когда мы объединяем наши статические ресурсы JavaScript (наше приложение Vue), конечный исполняемый файл становится довольно большим. UPX сделает двоичный файл как можно меньше.

Строки 6–10 определяют некоторые переменные, которые мы собираемся использовать в дальнейшем.

  • Переменная VERSION - это то место, где вы можете установить версию вашего приложения. Это применяется к переменной Version в main.go
  • BUILDFLAGS - это флаги, которые будут переданы в go build. Флаг «-s» указывает Go исключить таблицу символов из двоичного файла, а флаг «-w» указывает пропустить отладочную информацию. Флаг «-X» - это то, что устанавливает переменную версии в двоичном файле.
  • PROJECTNAME - это переменная, которая является именем конечного исполняемого файла.
  • GCVARS содержит переменные среды, указывающие, что cgo следует опускать и использовать архитектуру AMD64.
  • GC - последняя команда компиляции Go. Это строка, которая будет запускать фактическую сборку

Строки 12–15 - это фрагмент сценария, который обеспечивает установку UPX. Если он не установлен, процесс создания остановится с ошибкой.

Строки 17 и 18 определяют цель под названием пробег. Это просто запускает приложение Go с тегом «dev». Это также запустит сервер Node для приложения Vue, потому что в main.go переменная Версия - «разработка».

Последние биты определяют цели, которые нужно создавать для различных платформ. Обратите внимание, как каждая из них зависит от цели generate-compiled-assets, которая, в свою очередь, зависит от build-vue-app. Это означает, что если вы запустите make build-linux, оно сначала соберет приложение Vue, затем запустит «go generate», а затем, наконец, запустит сборку Go.

И это все! Хотите запускать свой код во время разработки? Запустите make. Хотите собрать для Windows? Запустите make build-windows. Linux? make build-linux. И в конце вы получите красивый, единственный двоичный файл! Удачного кодирования!